基于NLP知识图谱+flask的大数据医疗领域知识问答系统(完整源码+全源码解析+开发文档+视频讲解等资料)
基于NLP知识图谱flask的大数据医疗领域知识问答系统完整源码全源码解析开发文档视频讲解等资料完整系统源码文档等资料获取方式在文章末尾一、项目概述基于知识图谱flask的KBQA医疗问答系统基于医疗方面知识的问答通过搭建一个医疗领域知识图谱并以该知识图谱完成自动问答与分析服务。 基于NLP知识图谱flask的KBQA医疗问答系统以neo4j作为存储本系统知识图谱建模使用的最大向前匹配是一种贪心算法从句首开始匹配每次选择最长的词语。由于只需一次遍历因此在速度上相对较快。 算法相对简单容易实现和理解不需要复杂的数据结构。 对于中文文本中大部分是左向的情况最大向前匹配通常能够较好地切分。与最大向前匹配相反最大向后匹配从句尾开始匹配每次选择最长的词语。适用于大部分右向的中文文本。双向最大匹配结合了最大向前匹配和最大向后匹配的优势从两个方向分别匹配然后选择分词数量较少的一种结果。这种方法综合考虑了左向和右向的特点提高了切分的准确性以关键词执行cypher查询并返回相应结果查询语句作为问答。后面我又设计了一个简单的基于 Flask 的聊天机器人应用利用nlp自然语言处理通过医疗AI助手根据用户的问题返回结果用户输入和系统返回的输出结果都会一起自动存储到sql数据库。在多模式匹配方面 Aho-Corasick算法专门用于在一个文本中同时搜索多个模式关键词。相比于暴力搜索算法Aho-Corasick算法的时间复杂度较低在本知识图谱建模问答系统中性能更为显著。在线性时间复杂度方面进行预处理的阶段Aho-Corasick算法构建了一个确定性有限自动机DFA使得在搜索阶段的时间复杂度为O(n)其中n是待搜索文本的长度。这种线性时间复杂度使得算法在本应用中非常高效。在灵活性方面 Aho-Corasick算法在构建有限自动机的过程中可以方便地添加、删除模式串而不需要重新构建整个数据结构提高了算法的灵活性和可维护性。原文链接大数据知识图谱——基于知识图谱深度学习的大数据(KBQA)NLP医疗知识问答可视化系统全网最详细讲解及源码/建议收藏二、实现知识图谱的医疗知识问答系统基本流程配置好所需要的环境jdk,neo4j,pycharm,python等爬取所需要的医学数据获取所需基本的医疗数据。对医疗数据进行数据清洗处理。基于贪心算法进行分词策略。关系抽取定义与实体识别。知识图谱建模。基于Aho-Corasick算法进行多模式匹配。设计一个基于 Flask 的聊天机器人AI助手。设计用户输入和系统输出记录数据自动存储到sql数据库。系统部分内容展示及解析完整资料获取看文末具体的疾病详情页面如下首先对网址上的疾病链接进行分析以感冒为例感冒的链接http://jib.xywy.com/il_sii_38.htm可以看到上面包含了疾病的简介、病因、预防、症状、检查、治疗、并发症、饮食保健等详情页的内容。下面我们要使用爬虫把信息收集起来。通过观察可以看出链接部分 http://jib.xywy.com/il_sii_ 都是相同的是通过数字的叠加来组成不同的病例。通过string类型的拼接进行循环后可以得到我们需要的内容。数据收集模块放在/prepare_data文件夹下面。要收集 url 下面对应的数据具体爬虫代码如下爬取医学数据并将其存储到 MongoDB 数据库中。之前老版本的insert方法被弃用再用会出现警告。insert 替换为了 insert_one这样就不会再收到关于 insert 方法被弃用的警告了。如果你需要一次性插入多个文档可以使用 insert_many 方法。# 使用 insert_one 或 insert_many 方法。提供了更多的灵活性并且支持更多的功能比如插入后返回的文档的 _id 值。class MedicalSpider: def __init__(self):# 在类初始化时建立与 MongoDB 数据库的连接self.connpymongo.MongoClient()# 选择名为 medical2 的数据库self.dbself.conn[medical]# 在数据库中选择名为 data 的集合类似于关系数据库中的表self.colself.db[data]def insert_data(self, data):# 使用 insert_one 方法插入单个文档self.col.insert_one(data)class MedicalSpider:: 定义了一个名为 MedicalSpider 的类。definit(self):: 这是类的构造函数用于在创建类的实例时进行初始化。在初始化过程中建立了与 MongoDB 数据库的连接并选择了名为 ‘medical’ 的数据库和名为 ‘data’ 的集合。def insert_data(self, data):: 这是一个方法用于插入数据到 MongoDB 中。它使用了 insert_one 方法该方法用于插入单个文档记录到 MongoDB 集合中。data 参数是要插入的文档数据。需要爬取的信息包括疾病名、所属目录、症状、治疗方案等等都可以从页面上获取。MongoDB里面的数据也是刷新显示最新数据记录贪心算法策略Aho-Corasick算法本次知识图谱建模使用的最大向前匹配是一种贪心算法从句首开始匹配每次选择最长的词语。由于只需一次遍历因此在速度上相对较快。 算法相对简单容易实现和理解不需要复杂的数据结构。 对于中文文本中大部分是左向的情况最大向前匹配通常能够较好地切分。与最大向前匹配相反最大向后匹配从句尾开始匹配每次选择最长的词语。适用于大部分右向的中文文本。双向最大匹配结合了最大向前匹配和最大向后匹配的优势从两个方向分别匹配然后选择分词数量较少的一种结果。这种方法综合考虑了左向和右向的特点提高了切分的准确性。在多模式匹配方面 Aho-Corasick算法专门用于在一个文本中同时搜索多个模式关键词。相比于暴力搜索算法Aho-Corasick算法的时间复杂度较低在本知识图谱建模问答中性能更为显著。在线性时间复杂度方面进行预处理的阶段Aho-Corasick算法构建了一个确定性有限自动机DFA使得在搜索阶段的时间复杂度为O(n)其中n是待搜索文本的长度。这种线性时间复杂度使得算法在本应用中非常高效。在灵活性方面 Aho-Corasick算法在构建有限自动机的过程中可以方便地添加、删除模式串而不需要重新构建整个数据结构提高了算法的灵活性和可维护性。在Cypher查询的效率方面基于Cypher查询的数据库检索机制在系统中表现出良好的效率。这证明了Cypher查询语言的优越性以及它在处理医疗知识图谱时的高效性确保了用户能够快速获取所需的医学信息。在问答模型用户界面计方面基于文本的命令行问答设计的成功实现极大地提高了系统的可用性和用户体验。用户可以通过直观且易于导航的界面与系统进行交互从而更轻松地获取所需的医疗信息。处理数据后对应的图谱系统数据关键词3所搭建的系统框架包括知识图谱实体类型实体关系类型知识图谱属性类型等。知识图谱实体类型:一般来说一个医疗知识图谱问答系统Schema包括以下几个部分实体指代医疗领域中的具体概念或对象如药品、疾病、症状等。属性指代实体的特征或描述如药品的成分、剂型、适应症等。关系指代实体之间的联系或影响如疾病与药物的治疗关系、食物的忌吃关系等。问题指代用户对医疗领域的信息需求如“高血压应该吃什么药”、“感冒有哪些常见的症状”等。答案指代针对问题的回复或解释如“高血压可以服用降压药物如氨氯地平片、硝苯地平片等。”、“感冒常见的症状有发热、咳嗽、流鼻涕等。”等。departments[]#科室diseases[]# 疾病drugs[]# 药品foods[]# 食物producers[]#药品大类symptoms[]#症状实体关系类型:# 构建节点实体关系共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[]# 疾病与科室之间的关系知识图谱属性类型4导入Neo4j数据库生成图谱。新建一个数据库基于医疗领域的问答系统开启Node4j数据库:连接我们所建的neo4j数据库知识图谱数据入库根据字典形式的数据创建结点以疾病为中心定义关系形成三元组表示的知识将结点和关系导入neo4j数据库形成知识图谱通过运行build_medicalgraph.py脚本构建图谱建立实体关系类型5a2bb0.png)该脚本构建了一个MedicalGraph类定义了Graph类的成员变量g和json数据路径成员变量data_path。建立的图谱实体关系和属性类型数量有点多需要等待一会。项目资料部分截图提示Started streaming 44112 records in less than 1 ms and completed in less than 1 ms.在不到1毫秒内开始流式传输44112条记录并在不到1秒内完成。问答系统的实现与测试包括问答系统·支持的问答类型实现方法与步骤。**本项目问答对话系统的分析思路整体上接近一个基于规则的对话系统首先我们需要对用户输入进行分类其实就是分析用户输入涉及到的实体及问题类型也就是Neo4j中的node、property、relationship然后我们利用分析出的信息转化成Neo4j的查询语句最后再把查询的结果返回给用户就完成了一次问答。本项目问答系统支持的问答类型节点ID查询以上部分内容展示需要完整资料可扫码各位有兴趣的小伙伴可以加下面二完整项目源码和其它相关资料。完整源码源码解析开发文档视频讲解等资料获取方式