在线问诊 Python、FastAPI、Neo4j — 创建药品节点
在线问诊 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
准备数据
采用 CSV 格式,CSV 是一种纯文本形式保存数据,好处可以记事本打开预览,也可用 excel 打开,将来数据来源都过爬虫或者NLP处理,比处理Excel要方便得多
Excel 只能看,如果编辑 CSV 就乱码了,不知道为啥
通用名,商品名,英文名称,适应症,用法用量,禁忌,不良反应,药理毒理,注意事项,图片地址
创建药品标签节点
创建药品标签节点
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)
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/17687480.html