py2neo-neo4j同名节点合并以及neo4j配置等问题

本文介绍了Neo4j的配置问题,包括解决找不到Java路径的问题和跳过账号验证的设置。此外,还详细讲解了如何在Neo4j中处理同名节点的合并,通过NodeMatcher方法避免重复创建节点,并展示了具体代码实现。最后,提到了节点标签的更换方法。内容适合正在使用Neo4j构建知识图谱的读者。
摘要由CSDN通过智能技术生成

py2neo-neo4j同名节点合并以及neo4j配置等问题


最近赶毕业论文,需要用neo4j构建知识图谱,遇到一些问题这里记录一下。

1.neo4j配置问题

像环境变量配置攻略有很多也较为简单,这里说一下配置好环境变量后可能出现的问题:
(1).Invoke-Neo4j : Could not find java at…

解决方法:找到neo4j安装目录bin\mannagent 下的get-Java.ps文件夹,这里是我的该文件路径D:\ECNU\neo4j-community-3.5.5\bin\Neo4j-Management\Get-Java.ps1,修改其中**$javaPath**,如下:
原: process
{
$javaPath = ‘’
$javaCMD = ‘’

修改为
process
{
$javaPath = ‘C:\Program Files\Java\jdk-15.0.2’
$javaCMD = ‘’

把jdk路径添加进去即可。

(2) 跳过账号验证等

打开neo4j.conf配置文件,我的:D:\ECNU\neo4j-community-3.5.5\conf\neo4j.conf,将
dbms.security.auth_enabled=true取消注释并将true改为false。***
dbms.connectors.default_listen_address=0.0.0.0 也要取消注释。

2.neo4j同名节点合并问题

注意:此方法面向neo4j3.5.4版本及之后。
此方法采用的是Nodematcher方法,原理很简单,看一遍代码就明白了,这里简单说一下:

首先可以先创建若干个节点,然后对每个节点进行遍历,遍历之前会采用该方法先判断当前节点是否与已存在节点重复,如果重复则跳过创建节点步骤,直接创建关系。重点注意的是当节点存在时,创建关系需要用Nodelist[0]来代替该节点。,具体请参考一下代码。

test.csv内容如图:
在这里插入图片描述

from py2neo import Graph, Node, Relationship,NodeMatcher
import csv

# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474")
graph.delete_all()

node = Node('人物1',name= '毛泽东')
node2 = Node('人物2',name= '蔡和森')

graph.create(node)
graph.create(node2)

with open('test.csv', 'r') as f:
    reader = csv.reader(f)
    data = list(reader)
#遍历节点
for i  in  range(1,len(data)):
    matcher = NodeMatcher(graph)
    #nodelist[0]就代表当前遍历节点
    nodelist = list(matcher.match('人物1', name=data[i][0]))
    if len(nodelist) > 0:
        matcher = NodeMatcher(graph)
        nodelist1 = list(matcher.match('人物2', name=data[i][1]))
        if len(nodelist1)>0:
            print("两个都有")
            #尤为重要,采用nodelist[0]会跳过创建节点而直接建立联系,
            # 如果先node = ('人物1', name=data[i][0]),再Relationship(node, data[i][2], node2)还是会重复建立节点
            zhucong = Relationship(nodelist[0], data[i][2], nodelist1[0])
            graph.create(zhucong)

        else:
            cong = Node('人物2', name=data[i][1])
            graph.create(cong)
            zhucong = Relationship(nodelist[0], data[i][2], cong)
            graph.create(zhucong)
    else:
        zhu = Node('人物1', name=data[i][0])
        graph.create(zhu)
        matcher = NodeMatcher(graph)
        nodelist1 = list(matcher.match('人物2', name=data[i][1]))
        if len(nodelist1)>0:
            print('1没有2有')
            zhucong = Relationship(zhu, data[i][2], nodelist1[0])
            graph.create(zhucong)
        else:
            cong = Node('人物2', name=data[i][1])
            graph.create(cong)
            zhucong = Relationship(zhu, data[i][2], cong)
            graph.create(zhucong)

3.neo4j节点更换标签问题

示例:IDWEI 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如有疑问,欢迎留言。

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值