基于neo4j知识图谱+flask的大数据医疗领域知识问答系统(完整源码+源码解析+开发文档+视频讲解等资料


1. class MedicalSpider:: 定义了一个名为 MedicalSpider 的类。
2. def **init**(self):: 这是类的构造函数,用于在创建类的实例时进行初始化。在初始化过程中,建立了与 MongoDB 数据库的连接,并选择了名为 ‘medical’ 的数据库和名为 ‘data’ 的集合。
3. def insert\_data(self, data):: 这是一个方法,用于插入数据到 MongoDB 中。它使用了 insert\_one 方法,该方法用于插入单个文档(记录)到 MongoDB 集合中。data 参数是要插入的文档数据。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2e03a2dd823444e48d4360b2b90d1a2d.png)


需要爬取的信息包括疾病名、所属目录、症状、治疗方案等等,都可以从页面上获取。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a8c8d1462c21461b8ceedb68e7340035.png)


MongoDB里面的数据也是刷新显示最新数据记录  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ef684bdce53645b88055248552f9c444.png


我们随便点一个我们爬取的网页链接,点击查看网页详情:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0e38df42356241f98814a0795d05e92c.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/441bc388cd2a4f9ca70d578012202b09.png)


这里代码爬虫的主要功能是爬取疾病相关的信息,并将数据存储到MongoDB数据库中。代码的主要结构是一个名为MedicalSpider的类,它包含了各种方法来处理不同类型的数据采集任务。在代码的开头,导入了一些必要的库,如requests、urllib、lxml和pymongo。然后定义了一个MedicalSpider类,该类的构造函数初始化了MongoDB的连接,并指定了要使用的数据库和集合。


接下来是一系列方法,用于实现不同类型的数据采集。其中,get\_html方法用于发送HTTP请求并获取网页的HTML内容。url\_parser方法用于解析HTML内容,提取出需要的URL。basicinfo\_spider方法用于解析疾病的基本信息,如名称、描述和所属目录。treat\_spider、drug\_spider和food\_spider方法分别用于解析治疗信息、药物信息和食物信息。symptom\_spider方法用于解析疾病的症状信息。inspect\_spider方法用于解析疾病的检查信息。common\_spider方法用于解析通用模块下的内容,如疾病预防和疾病起因。


在spider\_main方法中,通过循环遍历页面,构造不同类型的URL,并调用相应的方法进行数据采集。采集到的数据以字典的形式存储,并插入到MongoDB数据库中。  
 最后,代码调用了MedicalSpider类的实例,并依次调用了inspect\_crawl和spider\_main方法,完成了数据的采集和存储。


总的来说,通过爬取寻医问药网站的相关页面,获取疾病的基本信息、治疗信息、药物信息、食物信息、症状信息和检查信息,并将数据存储到MongoDB数据库中。


结束之后我们可以在MongoDB数据库中查看我们爬取到的疾病链接和解析出的网页内容:91496d548148a6a102d46a94d8c.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4939a9d1ebba493383bca85eca40c8f6.png)贪心算法策略+Aho-Corasick算法


本次知识图谱建模使用的最大向前匹配是一种贪心算法,从句首开始匹配,每次选择最长的词语。由于只需一次遍历,因此在速度上相对较快。 算法相对简单,容易实现和理解,不需要复杂的数据结构。 对于中文文本中大部分是左向的情况,最大向前匹配通常能够较好地切分。与最大向前匹配相反,最大向后匹配从句尾开始匹配,每次选择最长的词语。适用于大部分右向的中文文本。双向最大匹配结合了最大向前匹配和最大向后匹配的优势,从两个方向分别匹配,然后选择分词数量较少的一种结果。这种方法综合考虑了左向和右向的特点,提高了切分的准确性。  
 在多模式匹配方面, Aho-Corasick算法专门用于在一个文本中同时搜索多个模式(关键词)。相比于暴力搜索算法,Aho-Corasick算法的时间复杂度较低,在本知识图谱建模问答中,性能更为显著。  
 在线性时间复杂度方面,进行预处理的阶段,Aho-Corasick算法构建了一个确定性有限自动机(DFA),使得在搜索阶段的时间复杂度为O(n),其中n是待搜索文本的长度。这种线性时间复杂度使得算法在本应用中非常高效。  
 在灵活性方面, Aho-Corasick算法在构建有限自动机的过程中,可以方便地添加、删除模式串,而不需要重新构建整个数据结构,提高了算法的灵活性和可维护性。  
 在Cypher查询的效率方面,基于Cypher查询的数据库检索机制在系统中表现出良好的效率。这证明了Cypher查询语言的优越性,以及它在处理医疗知识图谱时的高效性,确保了用户能够快速获取所需的医学信息。  
 在问答模型用户界面计方面,基于文本的命令行问答设计的成功实现极大地提高了系统的可用性和用户体验。用户可以通过直观且易于导航的界面与系统进行交互,从而更轻松地获取所需的医疗信息。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/366b4a9d1b874c92b11f81a7352b257d.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/83802e9ccd9c4538a7026c4b6f8e5e20.png)  
 处理数据后对应的图谱系统数据关键词:


![在这里插入图片描述](https://img-blog.csdnimg.cn/5e68ce846cd142d689856241db46e3a6.png)


3)所搭建的系统框架,包括知识图谱实体类型,实体关系类型,知识图谱属性类型等。  
 知识图谱实体类型:


![在这里插入图片描述](https://img-blog.csdnimg.cn/da9067cb27a74b4ebf087111fca8ce6b.png)


一般来说,一个医疗知识图谱问答系统Schema包括以下几个部分:  
 实体:指代医疗领域中的具体概念或对象,如药品、疾病、症状等。  
 属性:指代实体的特征或描述,如药品的成分、剂型、适应症等。  
 关系:指代实体之间的联系或影响,如疾病与药物的治疗关系、食物的忌吃关系等。  
 问题:指代用户对医疗领域的信息需求,如“高血压应该吃什么药?”、“感冒有哪些常见的症状?”等。  
 答案:指代针对问题的回复或解释,如“高血压可以服用降压药物,如氨氯地平片、硝苯地平片等。”、“感冒常见的症状有发热、咳嗽、流鼻涕等。”等。



departments = [] #科室
diseases = [] # 疾病
drugs = [] # 药品
foods = [] # 食物
producers = [] #药品大类
symptoms = []#症状


![在这里插入图片描述](https://img-blog.csdnimg.cn/f90cb6bb3bdd4a72b2b7e6c2bbdedc94.png)


实体关系类型:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3450f43c0d364aa8accab61db4f23026.png)



构建节点实体关系,共11类,medical2做出来的只有10类,因为数据量少

    rels_department = []
    rels_noteat = [] # 疾病-忌吃食物关系
    rels_doeat = [] # 疾病-宜吃食物关系
    rels_recommandeat = [] # 疾病-推荐吃食物关系
    rels_commonddrug = [] # 疾病-通用药品关系
    rels_recommanddrug = [] # 疾病-热门药品关系
    rels_check = [] # 疾病-检查关系
    rels_drug_producer = [] # 厂商-药物关系
    rels_symptom = [] #疾病症状关系
    rels_acompany = [] # 疾病并发关系
    rels_category = [] # 疾病与科室之间的关系

知识图谱属性类型:


![在这里插入图片描述](https://img-blog.csdnimg.cn/c12edc346c0545148688f37bd1a9c841.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/ca45fd5022dc437e873af75c548eb662.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3ffb7c3984414f9b924fa63c54ee2a47.png)  
 4)导入Neo4j数据库,生成图谱。  
 新建一个数据库:基于医疗领域的问答系统![在这里插入图片描述](https://img-blog.csdnimg.cn/75098a972ea24028b5fe2bf7d7176011.png)  
 开启Node4j数据库:


![在这里插入图片描述](https://img-blog.csdnimg.cn/85c4f28dc0e84d488e9078088a753ae9.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fc44298cf9714c919aa5929bff0a3217.png)


连接我们所建的neo4j数据库:


![在这里插入图片描述](https://img-blog.csdnimg.cn/9513ad9ef3b94447a1b506be0f0442c1.png)


知识图谱数据入库:  
 根据字典形式的数据创建结点,以疾病为中心定义关系形成三元组表示的知识,将结点和关系导入neo4j数据库形成知识图谱,通过运行build\_medicalgraph.py脚本构建图谱:


![在这里插入图片描述](https://img-blog.csdnimg.cn/ab34fb6f38364c259c4ec3a639f2c010.png)  
 建立实体关系类型:  
 5a2bb0.png)  
 该脚本构建了一个MedicalGraph类,定义了Graph类的成员变量g和json数据路径成员变量data\_path。


建立的图谱实体关系和属性类型数量有点多,需要等待一会。![在这里插入图片描述](https://img-blog.csdnimg.cn/c8048dd0bc96466f81bbb3b452ac4dae.png)


项目资料部分截图:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/32ce523343e84104800d67362eac121f.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4a0721edb39442eea198bbf23e2a66bf.png)


![在这里插入图片描述](https://img-blog.csdnimg.cn/7b3e84c27f6c4fb8b6c8e1fafca16cd7.png)  
 提示:`Started streaming 44112 records in less than 1 ms and completed in less than 1 ms.`  
 在不到1毫秒内开始流式传输44112条记录,并在不到1秒内完成。


)问答系统的实现与测试,包括问答系统·支持的问答类型,实现方法与步骤。\*\*  


![img](https://img-blog.csdnimg.cn/img_convert/1b116f890b0f34065599dabc4d07e9d9.png)
![img](https://img-blog.csdnimg.cn/img_convert/09d530a1b13831d7c1f0ec2f8e1d08c5.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值