Advertisement

【知识图谱】基于neo4j构建医疗领域知识图谱

阅读量:

【知识图谱】基于neo4j构建医疗领域知识图谱

  • 知识图谱核心建模

      • 1.知识图谱实体类型
        1. 知识图谱双向关系类型
        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。
请关注我们的官方小红书账号'知识靠谱'。

全部评论 (0)

还没有任何评论哟~