首页 > 编程语言 >在线问诊 Python、FastAPI、Neo4j — Cypher 生成

在线问诊 Python、FastAPI、Neo4j — Cypher 生成

时间:2023-09-26 09:33:42浏览次数:45  
标签:Cypher name Python FastAPI question disease type 有时候 symptom

目录
这边只是为了测试,演示效果和思路,实际应用中,可以通过NLP构建CQL
接上一篇的问题分类

question = "请问最近看东西有时候清楚有时候不清楚是怎么回事"
# 最终输出
data = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['symptom_disease']}

question = "干眼常用药有哪些"
# 最终输出
data = {'args': {'干眼': ['disease']}, 'question_types': ['disease_drug']}

question = "干眼哪些不能吃"
data = {'args': {'干眼': ['disease']}, 'question_types': ['disease_not_food']}

构建节点字典

目的,为了拼CQL,查出符合条件的节点详情

def build_nodedict(self, args):
    """
    构建节点字典
    :param args: {'看东西有时候清楚有时候不清楚': ['symptom']}
    :return: 组装成 => {'symptom': '看东西有时候清楚有时候不清楚'}
    """
    node_dict = {}
    for arg, types in args.items():
        for type in types:
            if type not in node_dict:
                node_dict[type] = [arg]
            else:
                node_dict[type].append(arg)
    return node_dict
# 输入:
{'看东西有时候清楚有时候不清楚': ['symptom']}
# 输出:
{'symptom': ['看东西有时候清楚有时候不清楚']}

构建Cypher CQL语句

# 查询症状会导致哪些疾病
if question_type == 'symptom_disease':
    sql = ["MATCH (m:Disease)-[r:has_symptom]->(n:Symptom) where n.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]

# 查询症状会导致哪些疾病
if question_type == 'symptom_disease':
    sql = ["MATCH (m:Disease)-[r:has_symptom]->(n:Symptom) where n.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]

# 查询疾病常用药品-药品别名记得扩充
if question_type == 'disease_drug':
    sql = ["MATCH (m:Disease)-[r:used_drugs]->(n:Drug) where m.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]


# 查询疾病的忌口
if question_type == 'disease_not_food':
    sql = ["MATCH (m:Disease)-[r:noteat_foods]->(n:Foods) where m.name = '{0}' return m.name, r.name, n.name".format(i) for i in entities]

node_dict.get('symptom')

Test

if __name__ == '__main__':
    handler = QuestionPaser()
    question_class = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['symptom_disease']}
    cql = handler.parser_main(question_class)
    print(cql)

输出:

# 输入
question_class = {'args': {'看东西有时候清楚有时候不清楚': ['symptom']}, 'question_types': ['symptom_disease']}
# 输出
[{'question_type': 'symptom_disease', 'sql': ["MATCH (m:Disease)-[r:has_symptom]->(n:Symptom) where n.name = '看东西有时候清楚有时候不清楚' return m.name, r.name, n.name"]}]

# 输入:
question_class = {'args': {'干眼': ['disease']}, 'question_types': ['disease_drug']}
# 输出: 
[{'question_type': 'disease_drug', 'sql': ["MATCH (m:Disease)-[r:used_drugs]->(n:Drug) where m.name = '干眼' return m.name, r.name, n.name"]}]

# 输入:
question_class = {'args': {'干眼': ['disease']}, 'question_types': ['disease_not_food']}
# 输出:
[{'question_type': 'disease_not_food', 'sql': ["MATCH (m:Disease)-[r:noteat_foods]->(n:Foods) where m.name = '干眼' return m.name, r.name, n.name"]}]

image

后面根据 生成的 CQL语句,查询出知识图谱中对应的数据,

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

标签:Cypher,name,Python,FastAPI,question,disease,type,有时候,symptom
From: https://www.cnblogs.com/vipsoft/p/17729384.html

相关文章

  • python读写excel
     pipinstallpandasopenpyxl 读取Excel文件importpandasaspd#读取Excel文件df=pd.read_excel('your_file.xlsx')#查看数据print(df) 写入Excel文件importpandasaspd#创建一个数据框(dataframe)data={'Name':['Tom','Nick&#......
  • 利用Python对当前目录下xlsx文件数据绘制拆线图
    importpandasaspdimportxlwtimportosimportglobimportmatplotlib.pyplotaspltfromopenpyxlimportWorkbookfromopenpyxlimportload_workbookfrommatplotlibimportrcParams ##获取当前路径path=os.getcwd()##获取当前路径下(不包含子目录)的所有xlsx文件zx_w......
  • [888] How to get the directory of the current Python file
    TogetthedirectoryofthecurrentPythonfile,youcanusetheos.pathmoduleincombinationwiththe__file__attribute.Here'showyoucandoit:importos#GetthedirectoryofthecurrentPythonfilecurrent_directory=os.path.dirname(os.pat......
  • # yyds干货盘点 # 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:withopen("./G......
  • 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:with......
  • Python RuntimeError: dictionary changed size during iteration
    运行下面代码,报如下错误fornameinglobals():print(name) 解决办法是:将待遍历的对象转换成列表fornameinlist(globals()):print(name) ......
  • poython文件运行模式和python控制台运行模式和Juputer运行模式
    今天学pytorch,我知道了python文件是整个代码运行,,而python控制台是一行一行的运行。而Juputer是任意代码块运行的。 ......
  • Python与Java的语法区别
    数据容器/数组/集合Python:对数据容器的操作#对list进行切片,从1开始,4结束,步长1(默认步长为1)my_list=[0,1,2,3,4,5,6]result1=my_list[1:4]print(f"结果1:{result1}")#对tuple进行切片,从头开始,到最后结束,步长1my_tuple=(0,1,2,3,4,5,6)result2=my_tu......
  • Python-day18
    1、常用的文件打开模式rfile=open('a.txt','r')print(file.readlines())file.close()wfile=open('a.txt','w')file.write('whywhywhy')file.close()afile=open('a.txt','a')file.write('whywhywhy......
  • Python学习笔记1
    a="好的,测试字符tester"b=17c=3print(a[1:5])#从第1(包含)个字符取到第5(不包含)个字符print(a[:3])#取到第3个字符(不含3)print(a[-5:-1])#取倒数第5个到倒数第1个print(a[-1:])#取最后一个字符print(len(a))#字符长度#exit()#退出与quit()一样,里面......