知识图谱3

本文介绍了Neo4j作为主流图数据库的基本概念、索引机制和优势,并聚焦于医疗领域的知识图谱——MedicalGraph,阐述了如何创建和操作节点、关系,以及在医疗知识图谱构建中的关键步骤。
摘要由CSDN通过智能技术生成

一、引言

Neo4j 是当前较为主流和先进的原生图数据库之一,提供原生的图数据存储、检索和处理。它由 Neo Technology支持,从 2003 年开始开发,1.0 版本发布于 2010 年,2.0版本发布于 2013 年。经过十多年的发展,Neo4j 获得越来越高的关注度,它已经从一个 Java 领域内的图数据库逐渐发展成为适应多语言多框架的图数据库。Neo4j 支持ACID、集群、备份和故障转移,具有较高的可用性和稳定性;它具备非常好的直观性,通过图形化的界面表示节点和关系;同时它具备较高的可扩展性,能够承载上亿的节点、关系和属性,通过 REST 接口或者面向对象的 JAVA API进行访问。

二、Neo4j简介

(1)基本概念

Neo4j使用图相关的概念来描述数据模型,把数据保存为图中的节点以及节点之间的关系。数据主要由三部分构成:

  • 节点。节点表示对象实例,每个节点有唯一的ID区别其它节点,节点带有属性;
  • 关系。就是图里面的边,连接两个节点,另外这里的关系是有向的并带有属性;
  • 属性。key-value对,存在于节点和关系中,如图1所示。
    在这里插入图片描述

(2)索引

  • 动机:Neo4j使用遍历操作进行查询。为了加速查询,Neo4j会建立索引,并根据索引找到遍历用的起始节点;

  • 介绍:默认情况下,相关的索引是由Apache Lucene提供的。但也能使用其他索引实现来提供。

  • 操作:用户可以创建任意数量的命名索引。每个索引控制节点或者关系,而每个索引都通过key/value/object三个参数来工作。其中object要么是一个节点,要么是一个关系,取决于索引类型。另外,Neo4j中有关于节点(关系)的索引,系统通过索引实现从属性到节点(关系)的映射。

  • 作用:

    1. 查找操作:系统通过设定访问条件比如,遍历的方向,使用深度优先或广度优先算法等条件对图进行遍历,从一个节点沿着关系到其他节点;
    2. 删除操作:Neo4j可以快速的插入删除节点和关系,并更新节点和关系中的属性。

(3)Neo4j的优势

  • 查询的高性能
  • 设计的灵活性
  • 开发的敏捷行
  • 与其他数据库的比较
  • 综合表现
    1. 闪电般的读/写速度,无与伦比的高性能表现;
    2. 非结构化数据存储方式,在数据库设计上具有很大的灵活性;
    3. 能很好地适应需求变化,并适合使用敏捷开发方法;
    4. 很容易使用,可以用嵌入式、服务器模式、分布式模式等方式来使用数据库;
    5. 使用简单框图就可以设计数据模型,方便建模;
    6. 图数据的结构特点可以提供更多更优秀的算法设计;
    7. 完全支持ACID完整的事务管理特性;
    8. 提供分布式高可用模式,可以支持大规模的数据增长;
    9. 数据库安全可靠,可以实时备份数据,很方便恢复数据;
    10. 图的数据结构直观而形象地表现了现实世界的应用场景。

三、主体类MedicalGraph介绍

class MedicalGraph:
    def __init__(self):
        pass
    
    # 读取文件,获得实体,实体关系
    def read_file(self):
        psss
    # 创建节点
    def create_node(self, label, nodes):
        pass
    # 创建疾病节点的属性
    def create_diseases_nodes(self, disease_info):
        pass
    # 创建知识图谱实体
    def create_graphNodes(self):
        pass
    # 创建实体关系边
    def create_graphRels(self):
        pass
    # 创建实体关系边
    def create_relationship(self, start_node, end_node, edges, rel_type, rel_name):
        pass
  1. 读取文件
def read_file(self):
        """
        读取文件,获得实体,实体关系
        :return:
        """
        # cols = ["name", "alias", "part", "age", "infection", "insurance", "department", "checklist", "symptom",
        #         "complication", "treatment", "drug", "period", "rate", "money"]
        # 实体
        diseases = []  # 疾病
        aliases = []  # 别名
        symptoms = []  # 症状
        parts = []  # 部位
        departments = []  # 科室
        complications = []  # 并发症
        drugs = []  # 药品

        # 疾病的属性:age, infection, insurance, checklist, treatment, period, rate, money
        diseases_infos = []
        # 关系
        disease_to_symptom = []  # 疾病与症状关系
        disease_to_alias = []  # 疾病与别名关系
        diseases_to_part = []  # 疾病与部位关系
        disease_to_department = []  # 疾病与科室关系
        disease_to_complication = []  # 疾病与并发症关系
        disease_to_drug = []  # 疾病与药品关系

        all_data = pd.read_csv(self.data_path, encoding='gb18030').loc[:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值