基于知识图谱的医疗领域问答系统1【QASystemOnMedicalKG】
1 代码来源
本代码来源于github项目地址,主要是构建以疾病为中心的具有一定规模的医药领域知识图谱,并以该知识图谱完成自动问答与分析服务。其中知识图谱通过neo4j构建,代码采用python语言。
2 项目组成
项目包括知识爬取、知识图谱构建、问答处理等三部分,其中问答处理可以进一步按照处理流程细分为三个部分,分别为实体意图提取、问答模板匹配和回答语句生成。
3 知识图谱构建
知识图谱构建包括知识准备和知识构建两部分,本项目知识准备通过网络爬虫从寻医问药网爬取医学知识,这里不再详细赘述。项目已经准备好了相关数据,data/medical.json,json格式。下面详细说明如何基于medical.json,构建知识图谱。需要的python包为py2neo,json,外部服务为neo4j。
(1)图谱设计
根据医学领域知识,围绕疾病,共设计7类节点(Disease、Drug、Food、Check、Department、Producer、Symptom),11种关系(Disease-(recommand_eat)>Food,Disease-(no_eat)>Food,Disease-(do_eat)>Food,Department-(belongs_to)>Department,Disease-(common_drug)>Drug,Disease-(recommand_drug)>Drug,
Producer-(drugs_of)>Drug,Disease-(need_check)>Check,Disease-(has_symptom)>Symptom,Disease-(acompany_with)>Disease,
Disease-(belongs_to)>Department)。
(2)图谱构建
主要采用py2neo接口,利用neo4j软件,构建知识图谱。
- 建立连接
// 建立连接
from py2neo import Graph,Node
g = Graph(host="127.0.0.1", # neo4j 搭载服务器的ip地址,ifconfig可获取到
http_port=7474, # neo4j 服务器监听的端口号
user="neo4j", # 数据库user name,如果没有更改过,应该是neo4j
password="123456")
- 建立实体节点
// An highlighted block
node = Node("Disease", name=disease_dict['name'], desc=disease_dict['desc'],
prevent=disease_dict[