基于知识图谱的医疗问答系统设计与实现
本项目构建了一个高可用的医疗知识图谱问答系统,涵盖从数据存储到智能交互的全链路技术体系。
- 在基础设施层,基于 Kubernetes 部署 Neo4j 分布式集群,通过 Shell 脚本自动化安装 1 master + 2 node 架构,结合 CSI Driver 实现 data/logs/conf 等目录的动态持久化存储,并利用 Helm 参数化模板(values.yaml)实现多环境配置适配,最终通过 LoadBalancer 暴露服务接口,保障知识图谱的高可用性与扩展性。
- 在数据层,开发医疗网页爬虫提取 19 类疾病字段,通过 XPath+re 模块清洗后以 JSON 格式标准化存储,并构建 build_medicalgraph.py 脚本将结构化数据导入 Neo4j,定义疾病/科室/治疗等节点及关系类型,同步设计 D3.js 兼容的数据转换逻辑,实现力导向图的可视化对接。
- 在业务层,创新性提出分层式问答引擎:通过 Aho-Corasick 自动机实现 14 类问句分类与实体识别,语义解析器动态生成 Cypher 查询模板支持复杂关系检索,并通过结果去重与模板填充优化答案可读性(如“{疾病}的症状包括:{症状列表}”)。
- 在应用层,采用 Flask 构建 RESTful API(/ask 接口),前端通过 Fetch 异步请求实现问答交互,集成 iframe 动态加载 Neo4j Browser、D3.js 可视化界面及问答面板,结合 CSS Grid/Flex 响应式布局与 GSAP 动画优化用户体验,并通过 Webpack 资源压缩、Live2D 看板娘、Aplayer 音乐组件等增强功能交互性,最终形成具备知识可视化、智能问答与多终端适配的医疗知识服务系统。
| 实体类型 | 中文含义 | 实体数量 | 举例 |
|---|---|---|---|
| Check | 诊断检查项目 | 3,353 | 支气管造影;关节镜检查 |
| Department | 医疗科目 | 54 | 整形美容科;烧伤科 |
| Disease | 疾病 | 8,807 | 血栓闭塞性脉管炎;胸降主动脉动脉瘤 |
| Drug | 药品 | 3,828 | 京万红痔疮膏;布林佐胺滴眼液 |
| Food | 食物 | 4,870 | 番茄冲菜牛肉丸汤;竹笋炖羊肉 |
| Producer | 在售药品 | 17,201 | 通药制药青霉素V钾片;青阳醋酸地塞米松片 |
| Symptom | 疾病症状 | 5,998 | 乳腺组织肥厚;脑实质深部出血 |
| Total | 总计 | 44,111 | 约4.4万实体量级 |
| 实体关系类型 | 中文含义 | 关系数量 | 举例 |
|---|---|---|---|
| belongs_to | 属于 | 8,844 | <妇科,属于,妇产科> |
| common_drug | 疾病常用药品 | 14,649 | <阳强,常用,甲磺酸酚妥拉明分散片> |
| do_eat | 疾病宜吃食物 | 22,238 | <胸椎骨折,宜吃,黑鱼> |
| drugs_of | 药品在售药品 | 17,315 | <青霉素V钾片,在售,通药制药青霉素V钾片> |
| need_check | 疾病所需检查 | 39,422 | <单侧肺气肿,所需检查,支气管造影> |
| no_eat | 疾病忌吃食物 | 22,247 | <唇病,忌吃,杏仁> |
| recommand_drug | 疾病推荐药品 | 59,467 | <混合痔,推荐用药,京万红痔疮膏> |
| recommand_eat | 疾病推荐食谱 | 40,221 | <鞘膜积液,推荐食谱,番茄冲菜牛肉丸汤> |
| has_symptom | 疾病症状 | 5,998 | <早期乳腺癌,疾病症状,乳腺组织肥厚> |
| acompany_with | 疾病并发疾病 | 12,029 | <下肢交通静脉瓣膜关闭不全,并发疾病,血栓闭塞性脉管炎> |
| Total | 总计 | 294,149 | 约30万关系量级 |
| 属性类型 | 中文含义 | 举例 |
|---|---|---|
| name | 疾病名称 | 喘息样支气管炎 |
| desc | 疾病简介 | 又称哮喘性支气管炎... |
| cause | 疾病病因 | 常见的有合胞病毒等... |
| prevent | 预防措施 | 注意家族与患儿自身过敏史... |
| cure_lasttime | 治疗周期 | 6-12个月 |
| cure_way | 治疗方式 | "药物治疗","支持性治疗" |
| cured_prob | 治愈概率 | 95% |
| easy_get | 疾病易感人群 | 无特定的人群 |
- 首先就是k8s集群的自动化部署,具体参考Centos7.9 使用 Kubeadm 自动化部署 K8S 集群(一个脚本)
- 其次是数据源的获取,具体脚本在
Scraping for Medical Data目录下,里面一个是爬虫的一个是将获取到的数据转换为可视化所需的格式 - 数据获取到之后就是知识图谱数据导入
build_medicalgraph.py文件 - 同时可视化的部分在
visualization目录下,使用vscode的Go Live插件即可在浏览器上运行 - 整体网站部分在
index.html文件。其智能问答模块需要启动app.py和chat_graph.py文件 - 里面
Aplayrer和Live2D的组件都是本地部署 - 目前系统还不算太完善,后续有时间再优化
- 此系统是基于刘焕庸老师的
QABasedOnMedicaKnowledgeGraph开源项目基础上修改- QASystemOnMedicalKG





