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

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

目录

relationship_data.csv

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

关系:症状-检查

def generate_examine() -> list:
    """
    关系:疾病-检查
    """
    rels_check = []
    df = pd.read_csv('relationship_data.csv')
    for idx, row in df.iterrows():
        for symptom in row['检查'].split(','):
            for exam in row['症状'].split(','):
                rels_check.append([exam, symptom])
    rels_check = deduplicate(rels_check)
    return rels_check
def relationship_rels_check():
    """
    # 创建关系
    match(p:Symptom),(q:Examine) where p.name='上下楼梯疼' and q.name='膝关节核磁' create (p)-[rel:need_check{name:'症状检查'}]->(q)
    # 删除关系
    MATCH(p: Symptom)-[r: need_check]-(q:Examine)
    WHERE p.name = '上下楼梯疼' and q.name = '膝关节核磁'
    DELETE r
    """
    cql = "MATCH(p:Symptom)-[r:need_check]-(q:Examine) DELETE r"
    neo4j.execute_write(cql)
    print("删除成功 => need_check")
    # 症状 需要  做哪些检查
    rels_check = generate_examine()
    print(rels_check)
    cql_list = generate_cql('Symptom', 'Examine', rels_check, 'need_check', '症状检查')
    for cql in cql_list:
        neo4j.execute_write(cql)
        print(cql)

关系:疾病-症状

def generate_symptom() -> list:
    """
    关系:疾病-症状 (疾病有哪些症状)
    """
    rels_check = []
    df = pd.read_csv('relationship_data.csv')
    for idx, row in df.iterrows():
        for symptom in row['症状'].split(','):
            for exam in row['疾病'].split(','):
                rels_check.append([exam, symptom])
    rels_check = deduplicate(rels_check)
    return rels_check

代码重构

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

详细代码如下

import logging
from utils.neo4j_provider import neo4j
import pandas as pd
logging.root.setLevel(logging.INFO)
# 关系去重函数
def deduplicate(relation_old) -> list:
    relation_new = []
    for each in relation_old:
        if each not in relation_new:
            relation_new.append(each)
    return relation_new
def generate_cql(start_node, end_node, edges, rel_type, rel_name) -> str:
    """
    生成 CQL
    """
    cql = []
    for edge in edges:
        p = edge[0]
        q = edge[1]
        # 创建关系的 Cypher 语句
        cql.append(
            "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))
        print('创建关系 {}-{}->{}'.format(p, rel_type, q))
    return cql
def generate_relation(l_name, r_name) -> list:
    relation_list = []
    df = pd.read_csv('relationship_data.csv')
    for idx, row in df.iterrows():
        for l_node in row[l_name].split(','):
            for r_node in row[r_name].split(','):
                relation_list.append([l_node, r_node])
    return deduplicate(relation_list)
def create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, relation_name):
    """
    创建关系
    :param l_node: 左节点 name
    :param r_node: 右节点 name
    :param relationship: 关系
    :param l_data_name: 左数据列名
    :param r_data_name: 右数据列名
    :param relation_name: 关系 name
    :return:
    """
    neo4j.delete_relationship(l_node, r_node, relationship)
    relation_list = generate_relation(l_data_name, r_data_name)
    print(relation_list)
    cql_list = generate_cql(l_node, r_node, relation_list, relationship, relation_name)
    for cql in cql_list:
        neo4j.execute_write(cql)
        print(cql)
def relationship_relation_check():
    l_node = "Symptom"
    r_node = "Examine"
    relationship = "need_check"
    l_data_name = '症状'
    r_data_name = '检查'
    rel_name = '症状检查'
    create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
def relationship_has_symptom():
    l_node = "Disease"
    r_node = "Symptom"
    relationship = "has_symptom"
    l_data_name = '疾病'
    r_data_name = '症状'
    rel_name = '症状'
    create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
def relationship_used_drugs():
    l_node = "Disease"
    r_node = "Drug"
    relationship = "used_drugs"
    l_data_name = '疾病'
    r_data_name = '药品'
    rel_name = '常用药品'
    create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
def relationship_doeat_foods():
    l_node = "Disease"
    r_node = "Foods"
    relationship = "doeat_foods"
    l_data_name = '疾病'
    r_data_name = '宜吃'
    rel_name = '推荐食物'
    create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
def relationship_noteat_foods():
    l_node = "Disease"
    r_node = "Foods"
    relationship = "noteat_foods"
    l_data_name = '疾病'
    r_data_name = '忌吃'
    rel_name = '忌吃食物'
    create_relationship(l_node, r_node, relationship, l_data_name, r_data_name, rel_name)
if __name__ == "__main__":
    # 有症状需要做哪些检查
    relationship_relation_check()
    # 疾病有哪些症状
    relationship_has_symptom()
    # 疾病常用药物
    relationship_used_drugs()
    # 推荐饮食
    relationship_doeat_foods()
    # 不宜饮食
    relationship_noteat_foods()

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

目录
相关文章
|
10天前
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
20 0
|
10天前
|
数据采集 前端开发 数据库
基于python-django的neo4j化学关系材料图谱系统
基于python-django的neo4j化学关系材料图谱系统
21 0
|
2月前
|
存储 JSON 数据安全/隐私保护
"FastAPI身份验证与授权的奥秘:如何用Python打造坚不可摧的Web应用,让你的项目一鸣惊人?"
【8月更文挑战第31天】在现代Web开发中,保证应用安全性至关重要,FastAPI作为高性能Python框架,提供了多种身份验证与授权方式,包括HTTP基础认证、OAuth2及JWT。本文将对比这些机制并附上示例代码,展示如何使用HTTP基础认证、OAuth2协议以及JWT进行用户身份验证,确保只有合法用户才能访问受保护资源。通过具体示例,读者可以了解如何在FastAPI项目中实施这些安全措施。
98 1
|
2月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
192 1
|
2月前
|
Python
在线问诊 Python、FastAPI、Neo4j — 问题咨询
在线问诊 Python、FastAPI、Neo4j — 问题咨询
45 1
|
2月前
|
JSON 数据库 开发者
FastAPI入门指南:Python开发者必看——从零基础到精通,掌握FastAPI的全栈式Web开发流程,解锁高效编码的秘密!
【8月更文挑战第31天】在当今的Web开发领域,FastAPI迅速成为开发者的热门选择。本指南带领Python开发者快速入门FastAPI,涵盖环境搭建、基础代码、路径参数、请求体处理、数据库操作及异常处理等内容,帮助你轻松掌握这一高效Web框架。通过实践操作,你将学会构建高性能的Web应用,并为后续复杂项目打下坚实基础。
77 0
|
2月前
|
存储 测试技术 开发者
FastAPI异步处理的神奇之处:如何用Python打造高性能Web应用,让你的项目一鸣惊人?
【8月更文挑战第31天】在现代Web开发中,高性能至关重要。FastAPI作为一款高性能Python Web框架,支持多种异步处理方式,包括非阻塞I/O、异步函数(async/await)及异步上下文管理器(async with),能够大幅提升应用性能。本文通过示例代码详细介绍了FastAPI中的异步处理方法,并分享了最佳实践,帮助开发者构建高效的Web应用。
95 0
|
2月前
|
安全 Python
FastAPI安全性揭秘:如何用Python构建坚不可摧的Web应用?
【8月更文挑战第31天】在现代Web开发中,确保应用安全稳定至关重要。FastAPI作为高性能Python Web框架,提供了认证授权、数据验证、CSRF保护及HTTPS支持等安全机制。本文将深入探讨这些特性,并通过示例代码展示如何利用FastAPI构建安全可靠的Web应用。 FastAPI的安全性涵盖多个方面:通过认证授权机制验证用户身份并控制访问权限;利用数据验证功能防止恶意输入;启用CSRF保护避免跨站请求伪造攻击;支持HTTPS增强应用安全性。示例代码展示了如何使用JWT进行认证授权、如何通过`Body`验证请求数据、如何启用CSRF保护以及如何配置HTTPS支持。
87 0
|
2月前
|
API C++ Python
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')
【Azure 应用服务】Python fastapi Function在Azure中遇见AttributeError异常(AttributeError: 'AsgiMiddleware' object has no attribute 'handle_async')
|
2月前
|
API Python
在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务
在线问诊 Python、FastAPI、Neo4j — 提供咨询接口服务
33 0