python&Neo4j关联相关的cypher查询操作之图数据库的实体对齐总结

Cypher语句介绍:

Cypher是一种声明式图查询语言,表达高效查询和更新图数据库。

例子:声明式编程是一种编程范式,即构建计算机程序的结构和元素的一种风格,它表达了计算的逻辑而没有描述其控制流程。常用的声明性语言包括数据库查询语言(例如SQL,XQuery),正则表达式,逻辑编程,函数式编程和配置管理系统。命令式编程以明确的步骤实现算法。match 相当于SQL select

cypher查询语言的基本介绍:
match
(node) - [relationship] ->(node)
where
(node | relationship)
return
(node | relationship)

下面就是通过 Cypher + Python 一起操作neo4j知识图谱融合对齐

总:Neo4j 实体对齐总共分为3个步骤

1、实体三元组的写入和去重。
2、实体的融合和对齐
3、补齐属性

一、实体三元组的写入和去重

在写入前我按照1:4的比例提取了26万多篇文章的100万个三元组集合(因为之前做了测试大概是100篇文章可以提取460条三元组集合)联系运维在服务器上部署好我们组专用的neo4j。
在这里插入图片描述
在三元组写入方面,依据每个数据的情况不一样来确定三元组的写入语句。首先用新闻数据来提取三元组,然后查看提取出来的三元组的值的情况,来判断估算重复值的数量。其次采用cypher语句里面的merge 写入三元组的实体写成node。因为merge 有自动去除重复值的功能。 match可以匹配节点,用create unique创建俩俩之间的唯一关系。看图2的 代码。出来的效果如下

在这里插入图片描述
cypher查询如下:
在这里插入图片描述
在这里插入图片描述

二、实体的融合和对齐

在步骤一的基础上来做实体对齐。我做到的是把neo4j里面的子图来做一个小子图谱的自我对齐,如下图4 。
对齐的基本思路:匹配出所有的节点或和关系,拿出来在一个个独立小的子图谱里面做对齐,
对齐步骤1:Levenshtein distance (最小编辑距离),Jaccard 系数,例如:jaccard系数大于0.75就可以证明相似。在本代码中用到的是前面2着相似度的和的平均值。
对齐步骤2在对齐步骤1基础上用cypher 语句进行对齐(就是删除相似度高的关系,或者节点)a:先取出一个个小图谱里面的所有实体,然后用2个for循环嵌入(这里的生成一个矩阵,取矩阵的上半部分的值。看事例图5)。 b:把实体进行俩俩相似度计算,计算出相似度。c:用python结合cypher语句来进行调整图数据库里面的节点和关系。
注意,调整的时候还要判断关系是否一样,如果关系一样可以直接调整删除,如果不一样,还要先把关系调整到另外一个不删除的实体上,然后在删除原先的相似度高的实体和关系。具体如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、补齐属性

在步骤二的基础上,进行图谱的属性的补全前,还需要考虑一个标准数据的问题。
我仔细查看了一下数据,有一部分数据是在说公司的新闻,而且里面公司信息大部分是上市公司。所以我就结合了公司的redis 里面的company 信息 和 mongodb里面的董高监数据信息来做的实体对齐。
这个是链接redis 信息。
redis_nodes = [1111111
2222222
3333333]

redisconn = StrictRedisCluster(startup_nodes=redis_nodes, decode_responses=True)

但拿到neo4j里面的公司的名称或者短称后,进行于redis里面的公司信息匹配搜索,拿到相对比较全面的信息来补充neo4j里面的公司信息作为其属性进行补全。具体代码如下:
在这里插入图片描述
上面的公司信息补全作为属性存入的结果如下
在这里插入图片描述
下面是 链接到公司mongodb的董高监数据,目的是获取里面的上市公司的信息,来补全人和公司的关系属性。
onnect1 = MongoClient()
db1 = connect1[]
db1.authenticate(“", "*”)
collect1 = db1.hpd
在这里插入图片描述
在这里插入图片描述
看上面 图11-图12的例子,关系都是 “监事会主席” ,但是2个人的任职时间不一样。
这个就是来源公司的董高监数据。补全人和公司的属性。

在这里插入图片描述
以上就是我做的 从三元组的提取 写入,对齐到补全。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值