“基于医疗知识图谱的问答系统”代码解析(一)
build_medicalgraph.py —建立医疗知识图谱的代码解析
“基于医疗知识图谱的问答系统”代码解析(二)
“基于医疗知识图谱的问答系统”代码解析(三)
“基于医疗知识图谱的问答系统”代码解析(四)
基于医疗知识图谱的问答系统”代码解析(五)
这是我对刘老师所写“基于知识医疗图谱的问答系统”代码的解读。
# 预备知识#!/usr/bin/env python3
# coding: utf-8
# File: MedicalGraph.py
# Author:lhy<lhy_in_blcu@126.com,https://huangyong.github.io>
# Date: 18-10-
# 构建知识图谱 并将知识图谱放入neo4j
import os
import json
# 为了从neo4j导入知识图谱
from py2neo import Graph,Node
class MedicalGraph:
def __init__(self):
# cur_dir 当前目录 即QASystemOnMedicalKG-master
cur_dir = '/'.join(os.path.abspath(__file__).split('/')[:-1])
self.data_path = os.path.join(cur_dir, 'data/medical.json')
self.g = Graph(
host="127.0.0.1", # neo4j 搭载服务器的ip地址,ifconfig可获取到
http_port=7474, # neo4j 服务器监听的端口号
user="neo4j", # 数据库user name,如果没有更改过,应该是neo4j
password="neo") # passward第一次登入是neo4j,随后即更改密码
'''读取文件'''
def read_nodes(self):
# 共7类节点 初始化为列表
drugs = [] # 药品
foods = [] # 食物
checks = [] # 检查
departments = [] # 科室
producers = [] # 药品大类
diseases = [] # 疾病
symptoms = [] # 症状
disease_infos = [] # 疾病信息
# 构建节点实体关系
rels_department = [] # 科室-科室关系
rels_noteat = [] # 疾病-忌吃食物关系
rels_doeat = [] # 疾病-宜吃食物关系
rels_recommandeat = [] # 疾病-推荐吃食物关系
rels_commonddrug = [] # 疾病-通用药品关系
rels_recommanddrug = [] # 疾病-热门药品关系
rels_check = [] # 疾病-检查关系
rels_drug_producer = [] # 厂商-药物关系
rels_symptom = [] # 疾病症状关系
rels_acompany = [] # 疾病并发关系
rels_category = [] # 疾病与科室之间的关系
count = 0
for data in open(self.data_path, encoding='utf-8'):
# 疾病字典
disease_dict = {
}
# 统计疾病数量
count += 1
# 输出统计
print(count)
data_json = json.loads(data)
disease = data_json['name']
disease_dict['name'] = disease
diseases.append(disease)
# 初始化键值对 其值都为字符串
disease_dict['desc'] = ''
disease_dict['prevent'] = ''
disease_dict['cause'] = ''
disease_dict['easy_get'] = ''
disease_dict['cure_department'] = ''
disease_dict['cure_way'] = ''
disease_dict['cure_lasttime'] = ''
disease_dict['symptom'] = ''
disease_dict['cured_prob'] = ''
# 更新关系表
# 如果症状在文件里
if 'symptom' in data_json:
# 症状列表更新
symptoms += data_json[