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



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

    症状数据

    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

  • 相关阅读:
    4. 类型转换指令
    倾向得分匹配PSM案例分析
    FPGA 20个例程篇:13.千兆网口实现ARP通信协议(下)
    使用Linux下的“信号“实现一些简单功能
    elasticsearch 集群部署
    shell脚本自学笔记
    网络安全(黑客)自学
    项目实战——实现注册和登录模块
    【Vue】所有指令详解
    Qt的常用类及作用
  • 原文地址:https://www.cnblogs.com/vipsoft/p/17699002.html