【知识图谱】基于neo4j构建医疗领域知识图谱
【知识图谱】基于neo4j构建医疗领域知识图谱
-
知识图谱核心建模
-
- 1.知识图谱实体类型
-
- 知识图谱双向关系类型
-
- 知识图谱属性类型
-
-
搭建Neo4j知识图谱
- 开发并部署医疗领域专用知识图谱系统
-
Python脚本实现指南
-
使用Python连接Node4j数据库
-
建立图结构
-
新增节点数据
-
定义实体之间的关联关系
-
为两个节点新增关联信息
-
运行创建图谱
-
- 医疗实体数据导入
- 医疗实体关系数据导入
-
医疗领域知识图谱可视化
-
- 开发并部署医疗领域专用知识图谱系统
在之前的讨论中,我们利用爬虫技术获取了医疗信息领域的结构化数据medical.json文件。该文件包含了大约4.41万条实体记录以及约2.4万条实体之间的关系记录。
在这些研究过程中
医疗知识图谱的数据库迁移参考教程:<>
获取用于医疗知识图谱dump操作的资源链接:<>
深入探究知识图谱相关问题,请通过以下方式获取所需资源,并随时与我们联系合作。
微信平台:zskp1012
欢迎关注官方账号:"知识靠谱"
知识图谱本体建模
基于数据库构建了三元组,并使这些三元组构成结构化数据关系。
构建了一个知识图谱模型。
以(Subject, Predicate, Object)形式构成的知识图为基本单元。
每个(Subject, Predicate, Object)都对应于一个完整的图形结构。
将这些节点与边组合构成了一个完整的图形结构。
具体来说,在知识图谱中涉及以下几个关键方面:
其中每个节点代表了一个特定的知识实体。
其中每个节点存储了一定数量的知识属性。
其中三元组的谓词描述了节点间的关系。
建议如果想深入了解这一领域,请参考相关的学术文献。
1.知识图谱实体类型
知识图谱实体类型如下图所示:


2. 知识图谱实体关系类型
知识图谱实体关系类型,如下图所示:

# 构建节点实体关系,共11类
rels_department = []
rels_noteat = [] # 疾病-忌吃食物关系
rels_doeat = [] # 疾病-宜吃食物关系
rels_recommandeat = [] # 疾病-推荐吃食物关系
rels_commonddrug = [] # 疾病-通用药品关系
rels_recommanddrug = [] # 疾病-热门药品关系
rels_check = [] # 疾病-检查关系
rels_drug_producer = [] # 厂商-药物关系
rels_symptom = [] #疾病症状关系
rels_acompany = [] # 疾病并发关系
rels_category = [] # 疾病与科室之间的关系
代码解释
3. 知识图谱实体属性类型
知识图谱实体属性类型,如下图所示:



构建neo4j知识图谱
搭建知识图谱系统通常涉及Neo4j图数据库的安装过程。
具体操作步骤可参考以下资源获取详细指导:
其中桌面版安装指南可通过以下链接获取:
<>
社区版安装指南则可访问:
<>
创建并启动医疗领域知识图谱
Add
Create
启动已经安装好的Neo4j应用程序。
单击【Add

点击start启动数据库

图谱创建python脚本介绍
基于字典形式的数据构建节点,并围绕疾病构建关系并形成三元组表示的知识;将节点和关系导入Neo4j数据库进而形成知识图谱;通过运行build_medicalgraph.py脚本完成知识图谱的构建工作。
此脚本生成了一个MedicalGraph类实例,并初始化其成员变量g;同时设置了与JSON文件路径相关的data_path成员变量。
1.Python连接Node4j数据库
from py2neo import Graph
class AnswerSearcher:
def __init__(self):#调用数据库进行查询
# self.g = Graph("bolt://localhost:7687", username="neo4j", password="12345678")#老版本neo4j
self.g = Graph("bolt://localhost:7687", auth=("neo4j", "12345678"))#输入自己修改的用户名,密码
代码解释
2.创建图对象
#对绝对路径进行拼接 获取json文件路径
self.data_path = os.path.join(cur_dir, 'data/medical.json')
class MedicalGraph:
def __init__(self):
cur_dir = '/'.join(os.path.abspath(__file__).split('/')[:-1])
self.data_path = os.path.join(cur_dir, 'data/medical.json')# 对绝对路径进行拼接 获取json文件路径 这里使用的Jason为部分数据量
# self.g = Graph("http://localhost:7474", username="neo4j", password="12345678")#老版本neo4j
self.g = Graph("bolt://localhost:7687", auth=("neo4j", "12345678"))
代码解释
3.增加node节点:
def create_node(self, label, nodes):
count = 0
for node_name in nodes:
node = Node(label, name=node_name)
self.g.create(node)
count += 1
print(count, len(nodes))
return
代码解释
4.创建实体关系:
def create_graphrels(self):
Drugs, Foods, Checks, Departments, Producers, Symptoms, Diseases, disease_infos, rels_check, rels_recommandeat, rels_noteat, rels_doeat, rels_department, rels_commonddrug, rels_drug_producer, rels_recommanddrug,rels_symptom, rels_acompany, rels_category = self.read_nodes()
self.create_relationship('Disease', 'Food', rels_recommandeat, 'recommand_eat', '推荐食谱')#调用下面的关系边创建函数
self.create_relationship('Disease', 'Food', rels_noteat, 'no_eat', '忌吃')
self.create_relationship('Disease', 'Food', rels_doeat, 'do_eat', '宜吃')
self.create_relationship('Department', 'Department', rels_department, 'belongs_to', '属于')
self.create_relationship('Disease', 'Drug', rels_commonddrug, 'common_drug', '常用药品')
self.create_relationship('Producer', 'Drug', rels_drug_producer, 'drugs_of', '生产药品')
self.create_relationship('Disease', 'Drug', rels_recommanddrug, 'recommand_drug', '好评药品')
self.create_relationship('Disease', 'Check', rels_check, 'need_check', '诊断检查')
self.create_relationship('Disease', 'Symptom', rels_symptom, 'has_symptom', '症状')
self.create_relationship('Disease', 'Disease', rels_acompany, 'acompany_with', '并发症')
self.create_relationship('Disease', 'Department', rels_category, 'belongs_to', '所属科室')
代码解释
5.两个节点新加关系:
from py2neo import Graph, Node, Relationship, NodeMatcher, Subgraph
g = Graph('http://localhost:7687', auth=("neo4j", "123456"))
matcher = NodeMatcher(g)
fugui = matcher.match('Person', name='节点名称1').first()
youqian = matcher.match('Person', name='节点名称2').first()
relation = Relationship(节点名称1, '所要建立的关系', 节点名称2)
g.create(relation)
代码解释
运行创建图谱
运行build_medicalgraph.py脚本构建图谱:
医疗实体数据导入

医疗实体关系数据导入




脚本运行完之后查看neo4j数据库中构建的知识图谱。
建立的图谱涉及较多的实体关系与属性类型数量,在短时间内无法完成搭建(大约需要等待两到三个小时)。只要耐心等待即可完成搭建工作,在获取的数据规模较大情况下进行搭建更为合理与必要:因为知识图谱若数据量不足,则即便存在众多实体关系与属性类型也无济于事;只有在大数据环境下构建的知识图谱具备更强的回答能力。
利用数据库迁移可从而快速部署医疗领域的知识图谱。
医疗领域知识图谱完成后需进行数据库迁移dump操作,
数据库迁移参考教程:<>
<>
<>
医疗领域知识图谱可视化




至此医疗领域知识图谱创建完成,水平有限,如有问题欢迎多做交流!!!
研究知识图谱问题,并在获取所需资源的同时期待您的垂询。
我们的微信账号是zskp1012。
请关注我们的官方小红书账号'知识靠谱'。
