relationship_data.csv

  1. 症状,检查,疾病,药品,宜吃,忌吃
  2. "上下楼梯疼,不能久站,感觉有点肿","膝关节核磁","右膝髌上囊及关节腔少量积液","扶他林","西红柿,香蕉","辣椒,大蒜"
  3. "眼睛胀痛,干涩,畏光,眼胀,眼痛,看东西有时候清楚有时候不清楚","视力,眼底","干眼","施图伦","胡萝卜,核桃仁,菠菜","海鲜,芥末"

关系:症状-检查

  1. def generate_examine() -> list:
  2. """
  3. 关系:疾病-检查
  4. """
  5. rels_check = []
  6. df = pd.read_csv('relationship_data.csv')
  7. for idx, row in df.iterrows():
  8. for symptom in row['检查'].split(','):
  9. for exam in row['症状'].split(','):
  10. rels_check.append([exam, symptom])
  11. rels_check = deduplicate(rels_check)
  12. return rels_check
  13. def relationship_rels_check():
  14. """
  15. # 创建关系
  16. match(p:Symptom),(q:Examine) where p.name='上下楼梯疼' and q.name='膝关节核磁' create (p)-[rel:need_check{name:'症状检查'}]->(q)
  17. # 删除关系
  18. MATCH(p: Symptom)-[r: need_check]-(q:Examine)
  19. WHERE p.name = '上下楼梯疼' and q.name = '膝关节核磁'
  20. DELETE r
  21. """
  22. cql = "MATCH(p:Symptom)-[r:need_check]-(q:Examine) DELETE r"
  23. neo4j.execute_write(cql)
  24. print("删除成功 => need_check")
  25. # 症状 需要 做哪些检查
  26. rels_check = generate_examine()
  27. print(rels_check)
  28. cql_list = generate_cql('Symptom', 'Examine', rels_check, 'need_check', '症状检查')
  29. for cql in cql_list:
  30. neo4j.execute_write(cql)
  31. print(cql)

关系:疾病-症状

  1. def generate_symptom() -> list:
  2. """
  3. 关系:疾病-症状 (疾病有哪些症状)
  4. """
  5. rels_check = []
  6. df = pd.read_csv('relationship_data.csv')
  7. for idx, row in df.iterrows():
  8. for symptom in row['症状'].split(','):
  9. for exam in row['疾病'].split(','):
  10. rels_check.append([exam, symptom])
  11. rels_check = deduplicate(rels_check)
  12. return rels_check

代码重构

包括疾病用药,食物能吃,食物不能吃的关系。

详细代码如下

  1. import logging
  2. from utils.neo4j_provider import neo4j
  3. import pandas as pd
  4. logging.root.setLevel(logging.INFO)
  5. # 关系去重函数
  6. def deduplicate(relation_old) -> list:
  7. relation_new = []
  8. for each in relation_old:
  9. if each not in relation_new:
  10. relation_new.append(each)
  11. return relation_new
  12. def generate_cql(start_node, end_node, edges, rel_type, rel_name) -> str:
  13. """
  14. 生成 CQL
  15. """
  16. cql = []
  17. for edge in edges:
  18. p = edge[0]
  19. q = edge[1]
  20. # 创建关系的 Cypher 语句
  21. cql.append(
  22. "MATCH(p:%s),(q:%s) WHERE p.name='%s' and q.name='%s' CREATE (p)-[rel:%s{name:'%s'}]->(q)" % (start_node, end_node, p, q, rel_type, rel_name))
  23. print('创建关系 {}-{}->{}'.format(p, rel_type, q))
  24. return cql
  25. def generate_relation(l_name, r_name) -> list:
  26. relation_list = []
  27. df = pd.read_csv('relationship_data.csv')
  28. for idx, row in df.iterrows():
  29. for l_node in row[l_name].split(','):
  30. for r_node in row[r_name].split(','):
  31. relation_list.append([l_node, r_node])
  32. return deduplicate(relation_list)
  33. def create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, relation_name):
  34. """
  35. 创建关系
  36. :param l_node: 左节点 name
  37. :param r_node: 右节点 name
  38. :param relationship: 关系
  39. :param l_data_name: 左数据列名
  40. :param r_data_name: 右数据列名
  41. :param relation_name: 关系 name
  42. :return:
  43. """
  44. neo4j.delete_relationship(l_node, r_node, relationship)
  45. relation_list = generate_relation(l_data_name, r_data_name)
  46. print(relation_list)
  47. cql_list = generate_cql(l_node, r_node, relation_list, relationship, relation_name)
  48. for cql in cql_list:
  49. neo4j.execute_write(cql)
  50. print(cql)
  51. def relationship_relation_check():
  52. l_node = "Symptom"
  53. r_node = "Examine"
  54. relationship = "need_check"
  55. l_data_name = '症状'
  56. r_data_name = '检查'
  57. rel_name = '症状检查'
  58. create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
  59. def relationship_has_symptom():
  60. l_node = "Disease"
  61. r_node = "Symptom"
  62. relationship = "has_symptom"
  63. l_data_name = '疾病'
  64. r_data_name = '症状'
  65. rel_name = '症状'
  66. create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
  67. def relationship_used_drugs():
  68. l_node = "Disease"
  69. r_node = "Drug"
  70. relationship = "used_drugs"
  71. l_data_name = '疾病'
  72. r_data_name = '药品'
  73. rel_name = '常用药品'
  74. create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
  75. def relationship_doeat_foods():
  76. l_node = "Disease"
  77. r_node = "Foods"
  78. relationship = "doeat_foods"
  79. l_data_name = '疾病'
  80. r_data_name = '宜吃'
  81. rel_name = '推荐食物'
  82. create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
  83. def relationship_noteat_foods():
  84. l_node = "Disease"
  85. r_node = "Foods"
  86. relationship = "noteat_foods"
  87. l_data_name = '疾病'
  88. r_data_name = '忌吃'
  89. rel_name = '忌吃食物'
  90. create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
  91. if __name__ == "__main__":
  92. # 有症状需要做哪些检查
  93. relationship_relation_check()
  94. # 疾病有哪些症状
  95. relationship_has_symptom()
  96. # 疾病常用药物
  97. relationship_used_drugs()
  98. # 推荐饮食
  99. relationship_doeat_foods()
  100. # 不宜饮食
  101. relationship_noteat_foods()

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

在线问诊 Python、FastAPI、Neo4j — 创建 节点关系的更多相关文章

  1. python 查询Neo4j多节点的多层关系

    需求:查询出满足3人及3案有关系的集合 # -*- coding: utf-8 -*- from py2neo import Graph import psycopg2 # 二维数组查找 def fi ...

  2. python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式

    python将知识图谱的节点关系(CSV或其他格式)转换成Echarts所需的json格式 前言: 1. 此代码以如下(CSV)格式的数据为例, 故事 时间 地点 人物 xx 2020 安徽合肥 小戈 ...

  3. Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目

    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目 新建一个maven工程,这里不赘述如何新建maven工程. 添加Neo4j jar到你的工程 有两种方 ...

  4. Neo4j创建自动索引

    一.创建Neo4j的Legacy indexing 1.为节点创建索引 官方API的创建示例为: 将一节点添加至索引: public static void AddNodeIndex(String n ...

  5. Python网络数据采集- 创建爬虫

    1. 初见网络爬虫 1.1 网络连接 输出某个网页的全部 HTML 代码. urllib 是 Python 的标准库(就是说你不用额外安装就可以运行这个例子),包含了从网络请求数据,处理 cookie ...

  6. jacascript DOM节点——节点关系与操作

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 节点关系 DOM可以将任何HTML描绘成一个由多层节点构成的结构.每个节点都拥有各自的特点.数据和方法,也 ...

  7. python之multiprocessing创建进程

    python的multiprocessing模块是用来创建多进程的,下面对multiprocessing总结一下使用记录. multiprocessing创建多进程在windows和linux系统下的 ...

  8. neo4j 将一个节点的属性复制到另一个节点上

    在使用Python操作Neo4j数据库的时候,经常会遇到重复的节点,需要将一个节点的属性复制到另一个节点,之后将该节点删除. def copy_node_properties(source_node_ ...

  9. Python | 面试必问,线程与进程的区别,Python中如何创建多线程?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题第20篇文章,我们来聊聊Python当中的多线程. 其实关于元类还有很多种用法,比如说如何在元类当中设置参数啦,以及一 ...

  10. 深入理解DOM节点关系

    × 目录 [1]父级属性 [2]子级属性 [3]同级属性[4]包含方法[5]关系方法 前面的话 DOM可以将任何HTML描绘成一个由多层节点构成的结构.节点分为12种不同类型,每种类型分别表示文档中不 ...

随机推荐

  1. 解决element-ui下拉框数据过多,导致页面卡顿问题与本地分页功能实现

    效果 前情提要: 最近使用element-ui开发的一个页面,在打开的时候占用cpu非常高,有时候都能达到90%↑.在调试时发现其中一个下拉框的接口返回2k↑的数据.本着有问题问百度的精神,看到主要的 ...

  2. Java Websocket 01: 原生模式 Websocket 基础通信

    目录 Java Websocket 01: 原生模式 Websocket 基础通信 Java Websocket 02: 原生模式通过 Websocket 传输文件 Websocket 原生模式 原生 ...

  3. 无法将“Ethernet0”连接到虚拟网络“VMnet8”。

    出现这个问题的解决办法,请参考右侧链接:https://blog.csdn.net/big_bigwolf/article/details/79147388

  4. CentOS 7 下/etc/ssh/sshd_config 文件解释

    CentOS 7 下/etc/ssh/sshd_config 文件详解 SSH由客户端和服务端的软件组成,在客户端可以使用的软件有SecureCRT.putty.Xshell等,而在服务器端运行的是一 ...

  5. Thinkphp6 连接达梦数据库

    Thinkphp6 连接达梦数据库 这里使用 IDEA phpEnv PHP7.3 Thinkphp6 桌面操作系统:Windows11 虚拟机:VMware 服务器操作系统:银河麒麟 在虚拟机操作与 ...

  6. 初识常量变量、字符串、ASCII编码表、转义字符表

    一.常量.变量 1.枚举常量(enum) 枚举常量不能更改,枚举常量所创造出的变量可以更改 正确 错误 2.常变量 3.#define定义的标示变量 二.数组 "abc"--'a' ...

  7. Centos7快速安装Oracl11g

    Centos7快速安装Oracle11g 一.解决虚拟机或低配置的云服务器上安装Oracle的方法有两种: 1)不用图形界面,采用静默方式安装,这种方法的技术难度比较大,Oracle的DBA经常采用这 ...

  8. 层叠样式表(CSS)2(环境:MyEclipse 10)

    二.选择器 注:在head里面写选择器的内容.环境一直不变,所有HTML和css都是这个MyEclipse 10 1.基本选择器(每个选择器新建一个HTML网页测试学习) 元素选择器:按节点名称匹配元 ...

  9. HTML超文本标记语言1

    一.简介-HTML 1.什么是HTML?? 首先,HTML是WWW的描述语言,由Tim Berners-lee提出. HTML是用于描述网页的一种语言 html是指超文本标记语言(HyperText ...

  10. Llama2 论文中译版——开放式基础和微调聊天模型

    Llama 2:开放式基础和微调聊天模型 写在前头 因为最近一直在使用 LLM 工具,所以在学习 Llama 2:开放式基础和微调聊天模型 这篇论文的期间,顺手将内容翻译了过来. 整片译文是由 Cha ...