在线问诊 Python、FastAPI、Neo4j — 创建药品节点

在线,问诊,python,fastapi,neo4j,创建,药品,节点 · 浏览次数 : 374

小编点评

**目录结构** * **demo** * create_drug.py * build_drugs.py * utils.neo4j_provider * driver.py * **build_drugs.py** * generate_cql.py * execute_write.py * clear_data.py **主要类** * **driver.py** * Driver for Neo4j * **create_drug.py** * Creates a drug node in Neo4j * **build_drugs.py** * Reads data from CSV file and generates CQL statements for creating drug nodes * **utils.neo4j_provider** * Provides utility functions for interacting with Neo4j **主要功能** * **create_drug.py** * 从 CSV 文件中读取数据并生成 CQL 语句创建新节点 * **build_drugs.py** * 从 CSV 文件中读取数据并构建 CQL 语句集合,用于创建多个节点 * **utils.neo4j_provider** * 提供一些基本的 Neo4j 操作函数,例如创建节点、删除节点等 **使用方法** 1. 将 `drugs_data.csv` 文件放入 `data/` 目录中 2. 运行 Python 代码:`python build_drugs.py` 3. 运行 Python 代码:`python create_drug.py` **注意** * `drugs_data.csv` 的文件格式应为 CSV 格式,包含节点的属性,例如商品名、通用名、英文名称等。 * 代码需要安装 `pyneo4j` 库。可以使用 `pip install pyneo4j` 命令安装。

正文


在线问诊 Python、FastAPI、Neo4j — 创建节点
Neo4j 节点的标签可以理解为 Java 中的实体。

根据常规流程:首先有什么症状,做哪些对应的检查,根据检查诊断什么疾病,需要用什么药物治疗,服药期间要注意哪些饮食,需要做哪些运行
在线问诊大概创建:症状、检查项目、疾病、药品、饮食、运动 这几个对象

前提条件

基于 Python FastAPI 获取 Neo4j 数据 :https://www.cnblogs.com/vipsoft/p/17687070.html

创建节点 Demo

通过 这个Demo 理解 Neo4j Driver for Python ,创建节点
test_create_node.py

import logging
from utils.neo4j_provider import driver

logging.root.setLevel(logging.INFO)

''' 创建知识图谱实体节点类型schema '''


def create_drug(tx, name):
    query = (
        "CREATE (n:Drug {name: $name})"
        "RETURN id(n)"
    )
    result = tx.run(query, name=name)
    return result.single()[0]


if __name__ == "__main__":
    with driver.session() as session:
        session.execute_write(create_drug, "扶他林")
    driver.close()
    logging.info("创建成功")

验证

# 查看创建后的结果
MATCH (n:Drug) WHERE n.name="扶他林" RETURN n
# 删除节点
MATCH (n:Drug) WHERE n.name="扶他林" DELETE n

image

准备数据

采用 CSV 格式,CSV 是一种纯文本形式保存数据,好处可以记事本打开预览,也可用 excel 打开,将来数据来源都过爬虫或者NLP处理,比处理Excel要方便得多
Excel 只能看,如果编辑 CSV 就乱码了,不知道为啥
通用名,商品名,英文名称,适应症,用法用量,禁忌,不良反应,药理毒理,注意事项,图片地址
image

创建药品标签节点

创建药品标签节点
build_drugs.py

import logging
import csv
from utils.neo4j_provider import driver

logging.root.setLevel(logging.INFO)

# 从CSV 中读取数据,并生成 CQL
def generate_cql() -> str:
    with open('drugs_data.csv', 'r', encoding='utf-8') as csv_file:
        csv_reader = csv.DictReader(csv_file)
        cql = ""
        for idx, row in enumerate(csv_reader):
            cql += """(drug%s:Drug {name: "%s",generic_name: "%s",english_name: "%s",indications: "%s",contraindications: "%s",adverse_reactions: "%s",toxicology: "%s",attention: "%s",usage_dosage: "%s",images_url: "%s"}),\r\n""" \
                   % (idx, row['商品名'], row['通用名'], row['英文名称'], row['适应症'], row['禁忌'], row['不良反应'], row['药理毒理'], row['注意事项'], row['用法用量'], row['图片地址'])

        return "CREATE %s" % (cql.rstrip(",\r\n"))
        data = [row for row in csv_reader]


# 执行写的命令
def execute_write(cql):
    with driver.session() as session:
        session.execute_write(execute_cql, cql)
    driver.close()

# 执行 CQL 语句
def execute_cql(tx, cql):
    tx.run(cql)

# 清除 Drug 标签数据
def clear_data():
    cql = "MATCH (n:Drug) DETACH DELETE n"
    execute_write(cql)


if __name__ == "__main__":
    clear_data()
    cql = generate_cql()
    print(cql)
    execute_write(cql)

image

源代码地址:https://gitee.com/VipSoft/VipQA

与在线问诊 Python、FastAPI、Neo4j — 创建药品节点相似的内容:

在线问诊 Python、FastAPI、Neo4j — 创建药品节点

目录前提条件创建节点 Demo准备数据创建药品标签节点 在线问诊 Python、FastAPI、Neo4j — 创建节点 Neo4j 节点的标签可以理解为 Java 中的实体。 根据常规流程:首先有什么症状,做哪些对应的检查,根据检查诊断什么疾病,需要用什么药物治疗,服药期间要注意哪些饮食,需要做哪

在线问诊 Python、FastAPI、Neo4j — 创建 检查节点

目录检查数据创建节点 根据不同的症状,会建议做些相对应的检验、检查 检查数据 examine_data.csv 建议值用“”引起来。避免中间有,号造成误识别 检查 "膝关节核磁" "眼睛酸胀" "视力" "砂眼" "辨色力" "角膜" "眼底" 创建节点 参考 创建药品 节点。 import log

在线问诊 Python、FastAPI、Neo4j — 创建 节点关系

目录关系:症状-检查关系:疾病-症状代码重构 relationship_data.csv 症状,检查,疾病,药品,宜吃,忌吃 "上下楼梯疼,不能久站,感觉有点肿","膝关节核磁","右膝髌上囊及关节腔少量积液","扶他林","西红柿,香蕉","辣椒,大蒜" "眼睛胀痛,干涩,畏光,眼胀,眼痛,看东西

在线问诊 Python、FastAPI、Neo4j — 创建症状节点

目录症状数据创建节点附学习 电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。 症状数据 symptom_data.csv CSV 中,没有直接一行一个症状,主要想后面将 症状 => 疾病 做关联,最后会在一个 Excel 中表达 所以每行实际对应一个症病,

在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点

目录饮食数据创建节点 根据疾病、症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用“”引起来。避免中间有,号造成误识别 饮食 "辣椒" "大蒜" "芥末" "海鲜" "胡萝卜" "核桃仁" "菠菜" "西红柿" "香蕉" 创建节点 重构代码,将 def exe

在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点

目录疾病数据创建节点 根据检查结果、医生的临床经验得出疾病 疾病数据 disease_data.csv 建议值用“”引起来。避免中间有,号造成误识别 疾病 "干眼" "右膝髌上囊及关节腔少量积液" 创建节点 import logging import pandas as pd from utils.

在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务

目录构建服务层接口路由层PostMan 调用 采用 Fast API 搭建服务接口: https://www.cnblogs.com/vipsoft/p/17684079.html Fast API 文档:https://fastapi.tiangolo.com/zh/ 构建服务层 qa_servi

在线问诊 Python、FastAPI、Neo4j — 问题咨询

目录查出节点拼接节点属性测试结果问答演示 通过节点关系,找出对应的节点,获取节点属性值,并拼接成想要的结果。 接上节生成的CQL # 输入 question_class = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['s

在线问诊 Python、FastAPI、Neo4j — 生成 Cypher 语句

目录构建节点字典构建Cypher CQL语句Test 这边只是为了测试,演示效果和思路,实际应用中,可以通过NLP构建CQL 接上一篇的问题分类 question = "请问最近看东西有时候清楚有时候不清楚是怎么回事" # 最终输出 data = {'args': {'看东西有时候清楚有时候不清楚'

在线问诊 Python、FastAPI、Neo4j — 构建问题分类器

目录构建字典数据构建 Trie 字典树按实体组装字典问题分析 将问题进行分析,和系统已有的分类进行关联 构建字典数据 将构建的知识图片字典化, 用于后面对问题的解析,下图为症状的字典,其它字典同理 构建 Trie 字典树 将建字典数据,组装集合 cur_dir = '/'.join(os.path.