基于知识图谱的中医药图谱检索与问答系统

项目介绍

基于中医药知识图谱和智能检索的问答系统是一个专门针对中医药知识查询与诊疗辅助场景的Web端智能问答解决方案。该系统以中医药文化传承与临床应用需求为背景,充分利用中医药知识图谱的技术架构,打造了一个功能全面的中医药智慧服务平台。该中医药知识图谱问答系统主要涵盖以下核心功能:

(1)中医药实体检索:用户可以通过现代化的Web界面进行中医药相关实体的精准查询,系统将基于Neo4j中医药知识图谱快速检索相关实体信息并展示结构化结果,为中医药学习与临床应用提供专业参考。

(2)诊疗关系推理:系统支持基于图谱的关系推理模式,能够根据用户查询的症状或药物推导出相关的疾病、治疗方案等关联信息,提供系统化的中医药诊疗辅助体验。

(3)图谱可视化展示:系统不仅提供查询结果,还通过ECharts实现中医药知识图谱的动态可视化,用户可以直观查看实体间的复杂关系网络,确保知识关联的透明度和准确性。

(4)中医药数据预处理:支持中医药原始数据的批量导入和预处理,包括实体抽取、关系识别和数据清洗,进行中医药知识的结构化组织和图谱构建。

(5)知识图谱构建管理:系统提供完整的知识图谱构建工具链,从数据解析到节点关系创建,再到图谱优化,支持中医药本体库的动态维护和更新。

(6)前后端系统集成:系统采用Django Web框架作为后端核心,结合HTML/CSS/JavaScript前端技术,通过RESTful接口实现数据交互,确保问答服务的高效稳定运行。

(7)中医药特色交互界面:采用中医药文化元素的界面设计,查询结果采用图谱化与列表化结合的展示方式,疾病实体、药物关系、诊疗路径等信息层次分明呈现,为用户提供专业化的中医药知识体验。

注释:

知识图谱也简称为neo4j图数据库。项目使用了数据预处理,然后预处理好的文档构建知识图谱,然后答案分类,然后再构建查询逻辑和聊天机器人逻辑。

项目预览

安装好知识图谱后,在命令行窗口使用neo4j console命令,打开知识图谱官网,可以查看创作的节点信息,直接访问http://localhost:7474/

系统处理逻辑图

中医药知识图谱问答系统通过Django Web框架构建了一个完整的中医药知识服务平台,用户首先通过浏览器访问系统首页或问答页面,Django的URL路由器根据请求路径分发到相应的视图函数处理,主页视图直接返回静态页面内容,问答页面展示历史对话记录,当用户提交具体问题时question视图会调用ChatBotGraph问答引擎进行处理,ChatBotGraph首先使用QuestionClassifier对问题进行分类识别,然后QuestionParser解析问题的具体意图和实体,最后AnswerSearcher根据解析结果生成Cypher查询语句在Neo4j图数据库中执行图谱匹配查找相关关系,系统的数据构建阶段通过build_medicalgraph.py脚本从medical.json原始数据文件中读取中医药知识,经过实体抽取和关系识别后批量创建Neo4j节点和关系,形成包含疾病药品症状食物检查等多类实体的完整中医药知识图谱,前端采用Bootstrap和ECharts技术实现响应式界面设计和知识图谱可视化展示,整个系统采用分层架构设计确保了代码的可维护性和功能的模块化,当用户查询特定中医药实体时系统能够在图谱中快速检索并可视化展示实体间的复杂关系网络,为中医药学习和临床辅助提供了智能化技术支撑。

项目数据集

中医药知识图谱问答系统的数据预处理过程首先从medical.json原始数据文件开始读取,每条记录包含疾病的详细属性信息如名称、描述、预防措施、成因、症状、并发症、治疗科室、治疗方式、常用药物、推荐药物、检查项目、宜吃食物、忌吃食物等,然后对这些结构化数据进行解析和清洗,提取出七大类实体节点包括疾病、药品、食物、检查项目、科室、生产商和症状,同时构建实体间的关系网络,具体包括疾病与症状的has_symptom关系、疾病与并发症的acompany_with关系、疾病与常用药品的common_drug关系、疾病与推荐药品的recommand_drug关系、疾病与治疗科室的belongs_to关系、科室间的层级belongs_to关系、疾病与检查项目的need_check关系、疾病与宜吃食物的do_eat关系、疾病与忌吃食物的no_eat关系、疾病与推荐食谱的recommand_eat关系以及生产商与药品的drugs_of关系,知识图谱构建阶段通过MedicalGraph类的create_graphnodes方法将这些实体节点批量导入Neo4j图数据库,首先创建疾病节点Disease包含详细属性如名称、描述、预防措施、成因、易感人群、治疗周期、治愈率等,然后依次创建Drug药品节点、Food食物节点、Check检查节点、Department科室节点、Producer生产商节点和Symptom症状节点,最后通过create_graphrels方法建立实体间的关系边,使用create_relationship方法生成Cypher查询语句在Neo4j中创建关系,期间通过参数化查询防止SQL注入并实现批量处理提高构建效率,整个过程在控制台输出进度信息,最终形成包含数万个节点和关系边的完整中医药知识图谱,为后续的智能问答和图谱可视化提供数据基础。

项目架构展示

项目功能展示

前端页面功能

界面包含智能问答、为您推荐、健康百科、中医药知识图谱检索、智能问答等。

中医药图谱检索

用户可以在首页知识图谱检索区域搜索相关的信息,然后系统会通过在neo4j图数据库构建好的知识图谱当中搜索节点信息,然后反馈到前端,形成可视化的结果。

如下图所示,搜索高血压这个节点信息,前端返回的可视化结果。

然后在图数据库http://localhost:7474/当中使用cyspher查询命令:MATCH (n:Disease {name: “高血压”}) RETURN n; 进行检索,查看生成的可视化结果是否正确。

综上所述,查询到的节点信息和前端用户得到的信息一致,实现了知识图谱检索以及可视化的功能。

然后我使用第二个查询信息脾肾两虚,继续进行检索。如下图所示。

然后同理我们去访问http://localhost:7474/图数据库neo4j官网,去验证可视化结果是否正确。

使用MATCH (n:Disease {name: “脾肾两虚”}) RETURN n;查询命令

综上所述,中医药知识图谱检索与可视化系统已经实现。

基于知识图谱的智能问答系统模块

该模块用户可以进行问句提问或者陈述句提问,可以提问症状,以及如何检查、如何治疗等相关问题。然后回检索相关的内容回答用户问题。

如下图所示,用户提问头痛怎么办,然后系统会检索知识图谱neo4j,然后返回相关的所有信息,回答用户问题,经过人为检查过后,系统回答的没有问题,符合现实逻辑和意义。

为您推荐模块

这个模块用户点击后,每一次进去都会刷新中医药知识图谱当中的某个节点的所有信息,比如来源,作用,方法,形状,或者是疾病的症状以及吃什么如何调理等等。如下图所示。

健康百科模块

在这里用户可以查看有关中医药养生知识相关信息和文章。

总结

1.知识图谱查询引擎选择与实现

该中医药知识图谱系统采用了Neo4j图数据库作为核心的查询引擎,这是一个经过精心设计的架构选择。系统通过py2neo库实现了对图数据库的封装和调用,该类支持多种连接协议包括Bolt协议,默认使用本地Neo4j实例”bolt://127.0.0.1:7687”。在实现层面,系统采用了完善的错误处理机制,包括连接重试逻辑、事务管理和查询参数化,确保了与图数据库的稳定交互。

系统还预留了多数据库支持的扩展性,通过配置文件和环境变量的方式管理不同数据库的连接参数,这种设计使得系统可以灵活切换不同的图数据库提供商。在查询阶段,系统将用户问题解析为实体和关系,通过Cypher查询语言在知识图谱中检索相关路径,然后根据预定义的模板生成答案。这种架构既保证了答案的中医药专业性和准确性,又维持了系统的可维护性和扩展性。

2.图数据库选择与实现

该系统选择了Neo4j作为图数据库的核心组件,这是一个经过验证的高性能图形数据库系统。Neo4j提供了丰富的图查询语言Cypher支持,系统主要使用了节点-关系-节点的三元组模型来实现中医药知识的存储和检索,这种数据模型特别适合处理复杂的实体关系网络。系统支持本地部署和分布式两种运行模式,通过配置文件可以灵活选择部署方式,在资源受限的环境下可以选择单机模式,而在需要高可用性的场景下可以启用集群模式。

图数据库的实现采用了分层架构设计,底层使用Neo4j进行图数据存储和Cypher查询,上层通过AnswerSearcher类提供统一的查询接口封装。系统在构建知识图谱时,首先从JSON数据文件中提取实体和关系,然后批量创建节点和边,节点包括Disease、Drug、Symptom、Food等类型,关系包括has_symptom、common_drug、belongs_to等。查询阶段通过getRelationByName方法实现基于实体名称的图谱遍历,返回相关的节点和关系数据。这种实现方式既保证了检索的准确性,又确保了查询的高效性,能够在秒级时间内完成复杂的中医药知识关联查询。

3.知识图谱架构实现

该中医药知识图谱系统实现了完整的图谱驱动问答架构,采用了模块化设计理念,将整个系统分解为数据预处理、图谱构建、问答推理和结果展示四个核心模块。在数据预处理模块中,系统通过MedicalGraph类实现了对原始中医药数据的统一处理,包括实体抽取、关系识别和数据清洗,从medical.json文件中提取疾病、药品、症状、检查等实体信息。图谱构建模块通过Neo4j实现了中医药知识图谱的构建,支持多种实体类型和关系类型的批量导入。

问答推理模块是整个知识图谱架构的核心,系统通过ChatBotGraph类实现了基于规则的问答推理功能。该模块首先使用QuestionClassifier进行问题分类识别,然后通过QuestionParser解析问题意图和实体,最后调用AnswerSearcher在图谱中检索答案。系统内置了多种问题类型模板,包括疾病症状查询、药品适应症查询、检查项目推荐等,每种类型都有对应的Cypher查询模板。

展示模块通过Django Web框架实现了结果的可视化,该模块不仅提供文本答案,还通过ECharts实现了知识图谱的动态可视化展示,系统支持实体关系网络的交互式浏览和路径高亮显示。这种架构既保证了中医药知识的系统性和准确性,又确保了用户体验的直观性和专业性。