基于neo4j知识图谱的大数据医疗领域知识问答系统(完整源码资料)

这篇具有很好参考价值的文章主要介绍了基于neo4j知识图谱的大数据医疗领域知识问答系统(完整源码资料)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于neo4j知识图谱的大数据医疗领域知识问答系统(完整源码资料)

一、项目概述

基于知识图谱+flask的KBQA医疗问答系统基于医疗方面知识的问答,通过搭建一个医疗领域知识图谱,并以该知识图谱完成自动问答与分析服务。 基于知识图谱+flask的KBQA医疗问答系统以neo4j作为存储,本系统知识图谱建模使用的最大向前匹配是一种贪心算法,从句首开始匹配,每次选择最长的词语。由于只需一次遍历,因此在速度上相对较快。 算法相对简单,容易实现和理解,不需要复杂的数据结构。 对于中文文本中大部分是左向的情况,最大向前匹配通常能够较好地切分。与最大向前匹配相反,最大向后匹配从句尾开始匹配,每次选择最长的词语。适用于大部分右向的中文文本。双向最大匹配结合了最大向前匹配和最大向后匹配的优势,从两个方向分别匹配,然后选择分词数量较少的一种结果。这种方法综合考虑了左向和右向的特点,提高了切分的准确性,以关键词执行cypher查询,并返回相应结果查询语句作为问答。后面我又设计了一个简单的基于 Flask 的聊天机器人应用,利用nlp自然语言处理,通过医疗AI助手根据用户的问题返回结果,用户输入和系统返回的输出结果都会一起自动存储到sql数据库。

在多模式匹配方面, Aho-Corasick算法专门用于在一个文本中同时搜索多个模式(关键词)。相比于暴力搜索算法,Aho-Corasick算法的时间复杂度较低,在本知识图谱建模问答系统中,性能更为显著。在线性时间复杂度方面,进行预处理的阶段,Aho-Corasick算法构建了一个确定性有限自动机(DFA),使得在搜索阶段的时间复杂度为O(n),其中n是待搜索文本的长度。这种线性时间复杂度使得算法在本应用中非常高效。在灵活性方面, Aho-Corasick算法在构建有限自动机的过程中,可以方便地添加、删除模式串,而不需要重新构建整个数据结构,提高了算法的灵活性和可维护性。

二、实现知识图谱的医疗知识问答系统基本流程

  1. 配置好所需要的环境(jdk,neo4j,pycharm,python等)

  2. 爬取所需要的医学数据,获取所需基本的医疗数据。

  3. 对医疗数据进行数据清洗处理。

  4. 基于贪心算法进行分词策略。

  5. 关系抽取定义与实体识别。

  6. 知识图谱建模。

  7. 基于 Aho-Corasick算法进行多模式匹配。

  8. 设计一个基于 Flask 的聊天机器人AI助手。

  9. 设计用户输入和系统输出记录数据自动存储到sql数据库。

系统部分内容展示及解析(完整资料获取看文末):

具体的疾病详情页面如下:
首先对网址上的疾病链接进行分析,以感冒为例:
感冒的链接:http://jib.xywy.com/il_sii_38.htm
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
可以看到,上面包含了疾病的简介、病因、预防、症状、检查、治疗、并发症、饮食保健等详情页的内容。下面我们要使用爬虫把信息收集起来。
通过观察可以看出,链接部分 http://jib.xywy.com/il_sii_ 都是相同的,是通过数字的叠加来组成不同的病例。通过string类型的拼接进行循环后可以得到我们需要的内容。
数据收集模块放在/prepare_data文件夹下面。
要收集 url 下面对应的数据,具体爬虫代码如下:
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

爬取医学数据并将其存储到 MongoDB 数据库中。
之前老版本的insert方法被弃用,再用会出现警告。insert 替换为了 insert_one,这样就不会再收到关于 insert 方法被弃用的警告了。如果你需要一次性插入多个文档,可以使用 insert_many 方法。

# 使用 insert_one 或 insert_many 方法。提供了更多的灵活性,并且支持更多的功能,比如插入后返回的文档的 _id 值。
class MedicalSpider:
    def __init__(self):
        # 在类初始化时,建立与 MongoDB 数据库的连接
        self.conn = pymongo.MongoClient()

        # 选择名为 'medical2' 的数据库
        self.db = self.conn['medical']

        # 在数据库中选择名为 'data' 的集合(类似于关系数据库中的表)
        self.col = self.db['data']

    def insert_data(self, data):
        # 使用 insert_one 方法插入单个文档
        self.col.insert_one(data)


  1. class MedicalSpider:: 定义了一个名为 MedicalSpider 的类。
  2. def init(self):: 这是类的构造函数,用于在创建类的实例时进行初始化。在初始化过程中,建立了与 MongoDB 数据库的连接,并选择了名为 ‘medical’ 的数据库和名为 ‘data’ 的集合。
  3. def insert_data(self, data):: 这是一个方法,用于插入数据到 MongoDB 中。它使用了 insert_one 方法,该方法用于插入单个文档(记录)到 MongoDB 集合中。data 参数是要插入的文档数据。
    知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

需要爬取的信息包括疾病名、所属目录、症状、治疗方案等等,都可以从页面上获取。
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

MongoDB里面的数据也是刷新显示最新数据记录
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

我们随便点一个我们爬取的网页链接,点击查看网页详情:
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

这里代码爬虫的主要功能是爬取疾病相关的信息,并将数据存储到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)
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python贪心算法策略+Aho-Corasick算法

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

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

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

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

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

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

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

实体关系类型:
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

# 构建节点实体关系,共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 = [] # 疾病与科室之间的关系

知识图谱属性类型:

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
4)导入Neo4j数据库,生成图谱。
新建一个数据库:基于医疗领域的问答系统知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
开启Node4j数据库:

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

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

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

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

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
建立实体关系类型:
5a2bb0.png)
该脚本构建了一个MedicalGraph类,定义了Graph类的成员变量g和json数据路径成员变量data_path。

建立的图谱实体关系和属性类型数量有点多,需要等待一会。知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

项目资料部分截图:
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
提示:Started streaming 44112 records in less than 1 ms and completed in less than 1 ms.
在不到1毫秒内开始流式传输44112条记录,并在不到1秒内完成。

)问答系统的实现与测试,包括问答系统·支持的问答类型,实现方法与步骤。**
本项目问答对话系统的分析思路,整体上接近一个基于规则的对话系统,首先我们需要对用户输入进行分类,其实就是分析用户输入涉及到的实体及问题类型,也就是Neo4j中的node、property、relationship,然后我们利用分析出的信息,转化成Neo4j的查询语句,最后再把查询的结果返回给用户,就完成了一次问答。
本项目问答系统支持的问答类型:

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
节点ID查询

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

以上部分内容展示,需要完整资料可扫码
各位有兴趣的小伙伴可以加下面二完整项目源码和其它相关资料
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python
知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python

知识图谱 node4j,大数据,自然语言处理,知识图谱,大数据,知识图谱,flask,数据库,人工智能,前端,python文章来源地址https://www.toymoban.com/news/detail-786571.html

到了这里,关于基于neo4j知识图谱的大数据医疗领域知识问答系统(完整源码资料)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建

    大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建。我将构建KnowledgeGraphs的类,用于操作Neo4j图数据库中的知识图谱数据。方便管理整个知识图谱操作。创建KnowledgeGraphs类可以使操作数据的代码更加模块化和可复用。使用

    2024年02月07日
    浏览(30)
  • 再相逢【知识图谱】中文医学知识图谱CMeKG,中文产科医学知识图谱COKG | 附:图数据库Neo4j下载安装教学(遇到问题并解决) + Neo4j基本操作

      无论结果如何,请相信那些你努力游向岸的日子都有它的意义。   🎯 作者主页 : 追光者♂ 🔥          🌸 个人简介 : 计算机专业硕士研究生 💖、 2022年CSDN博客之星人工智能领域TOP4 🌟、 阿里云社区特邀专家博主 🏅、 CSDN-人工智能领域新星创作者 🏆、 预期20

    2024年02月14日
    浏览(44)
  • Python neo4j建立知识图谱,药品知识图谱,neo4j知识图谱,知识图谱的建立过程,智能用药知识图谱,智能问诊必备知识图谱

    一、知识图谱概念 知识图谱的概念是由谷歌公司在2012年5月17日提出的,谷歌公司将以此为基础构建下一代智能化搜索引擎,知识图谱技术创造出一种全新的信息检索模式,为解决信息检索问题提供了新的思路。本质上,知识图谱是一种揭示实体之间关系的语义网络,可以对

    2024年01月17日
    浏览(30)
  • 【Neo4j与知识图谱】Neo4j的常用语法与一个简单知识图谱构建示例

    Neo4j是一种基于图形结构的NoSQL数据库,它采用了Cypher查询语言来查询和操作图形数据。下面是Neo4j中语法知识的详细总结和示例: 1.创建节点和关系 在Neo4j中,可以使用CREATE语句来创建节点和关系。下面是创建一个节点的示例: 这将创建一个标签为Person、属性为name和age的节

    2024年02月04日
    浏览(25)
  • 图数据库_Neo4j的使用场景_以及Windows版Neo4j Community Server安装_欺诈检测_推荐_知识图谱---Neo4j图数据库工作笔记0003

    可以看到使用场景,比如欺诈检测, 要建立图谱,才能进行,欺诈人员检测   可以看到图谱的各种应用场景 然后推荐引擎也需要,可以看到 在金融,旅行,求职招聘,保健,服务,媒体娱乐,都可以进行推荐   然后还有知识图谱 身份访问管理,这里,可以进行安全管理,可以挖掘出潜在关系

    2024年02月12日
    浏览(24)
  • 知识图谱构建:图数据库Neo4j的节点和关系的新增、删除

    目录 1、新增节点和节点属性,批量添加属性 2、节点显示信息修改 3、新增关系 4、同时新增两个节点与节点关系 5、删除节点 6、删除关系 7、同时删除节点和关系 CREATE(n:节点名称 {属性1:\\\'属性值\\\', 属性2:\\\'属性值\\\',  ......} ) return n 其中,n只在此语句运行时代表创建的节点

    2024年02月10日
    浏览(32)
  • Neo4j简单构建知识图谱实例

    目录  一、需要两组数据 二、提取所需专题数据 三、利用结巴分词将专题数据分词 四、连接并绘制知识图谱 五、消除重复节点及重复关系 六、结果展示 Ps:在使用Neo4j前,需要先在该安装路径文件下cmd运行,输入neo4j console 即可启动,可根据关闭时输入neo4j stop,如下图所示

    2023年04月12日
    浏览(28)
  • (知识图谱学习1)neo4j基础

    目录 一、neo4j安装与环境配置 官网:https://neo4j.com/download-center/ 下载社区版neo4j服务 neo4j环境变量配置 jdk下载 jdk版本: 启动neo4j 二、cypher语句基本增删改查 增 删除 改 查 三、Py2neo连接neo4j 安装pip install py2neo 连接neo4j 建立节点 建立关系 匹配节点 匹配关系 删除节点 删除关系

    2024年02月10日
    浏览(33)
  • Ubuntu20.04使用Neo4j导入CSV数据可视化知识图谱

    1.安装JDK( Ubuntu20.04 JDK11) 确认安装路径为/usr/lib/jvm/java-11-openjdk-amd64/bin/java。 2 安装Navicat查看知识库(单机版推荐数据库)(此步骤可忽略) 官网下载安装包: 手头的数据库是.db格式,使用nvicat查看。 安装好nvicat后,导入demo.db文件,将需要的数据转换成csv格式。 3 安装Neo4

    2024年04月23日
    浏览(42)
  • 知识图谱:Neo4j数据库的基本使用——创建张学良的关系谱

            知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,是结构化的语义知识库,用于以符号形式描述物理世界中的概念及其相互关系,其基本组成单位是“实体—关系—实体”三元组,以及实体及其相关属性—值对,实体间通过关系相互联

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包