知识图谱在问答系统、语义搜索等领域得到了越来越多的应用,是目前人工智能领域的热点研究问题。笔者对中国科学院软件研究所刘焕勇老师的项目QABasedOnMedicaKnowledgeGraph(github链接:https://github.com/liuhuanyong/QASystemOnMedicalKG)进行了较为系统的梳理,受益匪浅,遂将项目整体思路与大家分享。
一、项目主体结构
该项目分为知识图谱的构建、基于知识图谱的问答两部分,build_medicalgraph.py构建图谱、chatbot_graph.py启动问题系统,项目中的文件层次结构如下:
├── E:\QASystemOnMedicalKG
├── data
├── medical.json
├── dict
├── check.txt
├── deny.txt
├── department.txt
├── disease.txt
├── drug.txt
├── food.txt
├── producer.txt
├── symptom.txt
├── prepare_data
├── build_data.py
├── data_spider.py
├── disease.txt
├── first_name.txt
├── first_name_spider.py
├── max_cut.py
├── answer_search.py
├── build_medicalgraph.py
├── chatbot_graph.py
├── question_classifier.py
├── question_parser.py
├── README.md
二、知识图谱构建
(一)爬取以疾病为核心的医疗数据,数据量大,普通个人计算机爬取数据程序运行时间需耗时一天,需将爬取数据导入非关系型数据库mongodb,见脚本data_spider.py。下图是爬取的原始数据在mongodb中的存储形式。
(二)对爬取的数据进行清洗,整理成“节点:属性”的可直接导入图形数据库neo4j的字典形式,并将清洗后的数据导入mongodb,见脚本build_data.py。(因数据清洗需要的first_name.txt文件遗失,笔者通过分析build_data.py代码,在原项目爬虫程序部分进行适当增删,编