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

在线,问诊,python,fastapi,neo4j,创建,症状,节点 · 浏览次数 : 193

小编点评

**代码功能:** 该代码从 CSV 文件中提取症状数据并创建 CQL 查询,用于将症状与疾病关联。 **步骤:** 1. **数据读取:** - 读取 CSV 文件 `symptom_data.csv`。 - 使用 pandas 读取 CSV 数据并将其转换为列表。 2. **症状提取:** - 使用 `split()` 方法将症状字符串以 ',' 分割。 - 从列表中提取症状。 - 将所有症状添加到一个集合中。 3. **CQL 生成:** - 使用 list comprehension 将症状集合转换为 CQL 查询。 - 遍历集合,构建 CQL 查询字符串。 - 去除最后一个逗号。 4. **执行 CQL 查询:** - 使用 driver 模块连接数据库。 - 使用 execute_write 方法执行 CQL 查询。 5. **数据清理:** - 使用 clear_data 函数清除所有 Symptom 标签数据。 6. **输出结果:** - 将 CQL 查询结果打印到终端。 **代码示例:** ```python import logging import csv from utils.neo4j_provider import driver import pandas as pd logging.root.setLevel(logging.INFO) def generate_cql(): # ... def execute_write(cql): # ... def clear_data(): # ... def main(): # 读取 CSV 数据 df = pd.read_csv('symptom_data.csv') # 生成 CQL 查询 cql = generate_cql() # 执行 CQL 查询 execute_write(cql) # 清除数据 clear_data() if __name__ == "__main__": main() ``` **注意:** - `utils.neo4j_provider` 模块用于与 Neo4j 数据库连接。请确保已安装。 - `symptom_data.csv` 文件应包含一个列名为 `症状`的症状数据。 - 该代码示例仅展示了症状提取和 CQL 生成的部分。实际应用中可能需要添加更多逻辑。

正文


电子病历中,患者主诉对应的相关检查,得出的诊断以及最后的用药情况。症状一般可以从主诉中提取。

症状数据

symptom_data.csv
CSV 中,没有直接一行一个症状,主要想后面将 症状 => 疾病 做关联,最后会在一个 Excel 中表达
所以每行实际对应一个症病,但在创建节点时,会转化成 N个节点(每个 | 号一个节点)

症状
"上下楼梯疼,不能久站,感觉有点肿"
"眼睛胀痛,干涩,畏光,眼胀,眼痛,看东西有时候清楚有时候不清楚"

创建节点

参考 创建药品 节点。

import logging
import csv
from utils.neo4j_provider import driver
import pandas as pd

logging.root.setLevel(logging.INFO)


# 并生成 CQL
def generate_cql() -> str:
    # cql = """
    #     CREATE (symptom1:Symptom {name: "膝盖疼"}),
    #     (symptom2:Symptom {name: "眼睛酸胀"})
    #     """

    df = pd.read_csv('symptom_data.csv')
    symptoms = []
    for each in df['症状']:
        symptoms.extend(each.split(','))  # 按,号分割成数组,并将每行数据到一个队列里面
    symptoms = set(symptoms)  # 去除重复项

    # 拼接 CQL
    cql = ""
    for idx, item in enumerate(symptoms):
        cql += """(symptom%s:Symptom {name: "%s"}),\r\n""" \
               % (idx, item)
    return "CREATE %s" % (cql.rstrip(",\r\n"))  # 删除最后一个节点的 逗号


# 执行写的命令
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)


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


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

image

附学习

数组 append、extend 区别

import pandas as pd

df = pd.read_csv('../db/symptom_data.csv')

symptoms_extend = []
symptoms_append = []
for idx, each in enumerate(df['症状']):
    sp = each.split(',')
    symptoms_extend.extend(sp)  # 在末尾追加序列的值 结果为 => [X1,X2,X3,X4]
    symptoms_append.append(sp)  # 在末尾追加对接,附加在里面 结果为 => [[X1,X2],[X3,X4]]
    print("%s sp => %s" % (idx, sp))
    print("%s extend => %s" % (idx, symptoms_extend))
    print("%s append => %s" % (idx, symptoms_append))
    print('--' * 20)

print("extend => %s" % (symptoms_extend))
print("append => %s" % (symptoms_append))

image

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

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

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

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

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

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

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

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

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

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

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

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

在线问诊 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.