# e-doctor **Repository Path**: code0307/e-doctor ## Basic Information - **Project Name**: e-doctor - **Description**: 基于知识图谱的疾病智能诊断系统 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2023-08-16 - **Last Updated**: 2023-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # e-doctor(基于知识图谱的疾病智能诊断系统) #### 介绍 上周在github上看到一个基于知识图谱的疾病智能诊断类开源项目,通过用户输入年龄,性别,职业,症状,能够智能的反馈可能的疾病。 对此比较感兴趣,于是想着down下来看看代码,run起来看看效果。可惜的是没有太多说明文档,于是便尝试分析源码进行部署。整体代码还是比较规整,层次模块比较清晰,不过在部署的过程中发现少了一些代码和文件,无法run起来。从一个链接里看到了作者已声明要完整的代码库,需要微信扫描购买。本着互联网的分享精神,花了一周多左右的时间对项目做了一些裁剪和小重构,让整个项目run起来了,并对整体系统设计补充了一些图解说明,分享给需要的同学们。麻雀虽小,五脏俱全,该项目为一个6个子系统组成的分布式微服务应用,涉及数据爬虫,缓存,用于检索分析的ElasticSearch,用于复杂关系分析的图数据库Neo4j,以docker作为微服务应用的部署环境。 #### 软件架构 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/162103_a503131d_8794343.png "屏幕截图.png") 从这个架构可以看出,原作者试图将不同数据源的数据检索都以微服务的方式提供,以提供更灵活的伸缩性,但此处的neo4j的知识图谱关系又没有按照这个原则,显得有点半吊子。 对应的代码组织结构如下,和上图子系统一一对应。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/162407_9d4a7cd0_8794343.png "屏幕截图.png") #### 关键领域实体 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/162954_b583508f_8794343.png "屏幕截图.png") 从医学网站词典库爬取构建出的疾病与症状的关系图示例如下,可见非常复杂。 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/162846_ddc2bbd9_8794343.png "屏幕截图.png") #### 系统诊断主流程 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/163101_3721acd0_8794343.png "屏幕截图.png") 说明:1.系统获取用户输入的信息后,首先根据症状获取对应的疾病列表以及疾病对应的科室信息。 2.根据用户的年龄做一些排除(比如如果是年轻人,则排除老年科以及儿科疾病) 3.根据用户的性别做一些排除(比如是男人,则排除妇科相关的疾病) 4.对剩余的疾病列表根据匹配的症状词个数打分排序得出最后的诊断疾病列表。 #### 部署架构 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/163150_70b9ee19_8794343.png "屏幕截图.png") 说明: 1. neo4j选择的版本是3.3.4(采用的java8,不支持 4.0以上版本) 2. ElasticSearch采用的2.4.6 3. 基础环境搭建好后,进行数据初始化工作 a. 运行Spider工程中的SpiderServiceTest 进行数据爬取,存储到mysql数据库,当前爬取的医学网站是http://jb39.com/,预计需要3h,涉及58个科室,7000+类疾病以及 11w+条的疾病-症状关系。 b.运行spider工程中的MedicalNodeDataTest进行图数据库的初始化工作。 c. 运行spider工程中的ESMedicalRepositoryTest进行ES数据库的初始化工作。 这里的数据初始化都是通过手动驱动,如果要投入生产,这里要优化为定时采集和更新,留给各位自行扩展。 #### 本地部署后的运行效果 ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/163332_83d4770a_8794343.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0312/163342_bb677093_8794343.png "屏幕截图.png") #### 应用价值分析 目前该系统爬取的数据还存在很多噪音以及不够全面,诊断的输入特征还比较少,还需要不断打磨。 但作为一个POC已经很不错了。 该套系统如果能不断完善数据库,并由一些有专业背景的医学院实习生进行正确性打标,不断完善疾病知识库,达到一定的准确度后再推广到医院,作为临床医生诊断和开具处方的辅助工具,可大大提高医生的工作效率。另外医生在实操过程中根据临床实际情况,可能会增加一些病人更多的特征,以及诊断结果,不断丰富到知识库,系统智能将得到不断提升,形成非常好的正循环,同时也沉淀为宝贵的医学知识库。 想想老中医们,为啥越老越吃香,因为经验丰富呗,所谓经验丰富就是经过多年的积累脑海中有一套知识库,针对不同的情况能判断出是什么样的问题,开什么样的处方。如果能把这些经验抽取沉淀下来,人人都可当老中医,把人们从死记硬背中解放出来,参与到更多有创造性的工作中。 #### 源码地址 裁剪重构后代码地址: https://gitee.com/warrenwangxd/e-doctor 原作者代码地址: https://github.com/torome/Doctor