首页 > 编程语言 >neo4j,python,批量建立节点时,会重复建立相同名称节点。去重。

neo4j,python,批量建立节点时,会重复建立相同名称节点。去重。

时间:2023-05-31 23:56:04浏览次数:46  
标签:node name python graph create label neo4j 节点

前提

经过度娘得知,可以使用第三方包去重,但只管去重,你后面关系乱了人家第三方包不管。=-=

或者

直接在neo4j里面使用数据库语言去重,但关系还是得重新建立。况且,我想用python去重。

干货来了

后来,我换了个思路,那么就是合并节点。(虽然跟去重差不多)
但总归总做出来了
使用NodeMatcher函数,注意3.5.4才推出的函数

解释一下思路
for循环录入节点关系
使用NodeMatcher判断是否重复
重复的情况下

直接建立关系(干货!)(新节点如何与旧节点建立关系)
就是 node一下旧节点的内容 但不提交!!!
直接新旧节点建立关系(记得提交新节点)

cong = Node(‘水利局’, name=data[i][1])
graph.create(cong)
zhu = Node(‘省份’, name=data[i][0])
zhucong = Relationship(cong,‘属于’,zhu)
graph.create(zhucong)

继续
不重复的情况下
建立新节点
又一轮新的if NodeMatcher判断水利局是否建立过

代码

def createMapping(contents,institutions):
    # 创建知识图谱节点
    graph = Graph('http://localhost:7474', user='neo4j', password='123456')
    graph.delete_all()  # 清除neo4j里面的所有数据
    # 确保相同名称的结点被视为同一个结点
    label_1 = '意见'
    label_2 = '解决部门'

    # 将每一个机构的关键词都与机构对应上
    for i in range(len(institutions)):
        # 将一个关键词去重
        keys[i] = list(set(keys[i]))
		# ===============================================
		# =====================去重关键代码==================================
        # 创建索引
        matcher = NodeMatcher(graph)
        nodelist = list(matcher.match(label_2,name=institutions[i]))
        # 已经有机构了
        if len(nodelist)>0:
            # 创建关键词节点
            for j in range(len(keys[i])):
                matcher = NodeMatcher(graph)
                nodelist = list(matcher.match(label_1,name=keys[i][j] ))
                if len(nodelist)>0:
                    print("已经有了")
                else:
                    node_1 = Node(label_1, name=keys[i][j])
                    graph.create(node_1)
                    node_2 = Node(label_2, name=institutions[i])
                    rel = Relationship(node_1, "请求", node_2)
                    graph.create(rel)

        else:
            # 创建机构节点
            node_2 = Node(label_2, name=institutions[i])
            graph.create(node_2)
            # 创建关键词节点
            for j in range(len(keys[i])):
                node_1 = Node(label_1, name=keys[i][j])
                graph.create(node_1)
                rel = Relationship(node_1,"请求",node_2)
                graph.create(rel)
    return

标签:node,name,python,graph,create,label,neo4j,节点
From: https://www.cnblogs.com/java-six/p/17447717.html

相关文章

  • ES部署+Kibana部署+IK分词器(单节点)
    一、Elasticsearch7.9.1官网下载地址:ElasticsearchES7.9.1,内置了JDK,我是centos系统,下载LINUXX86_64下载、解压、放到/usr/es/下二、配置cd/usr/es&&llvi/elasticsearch/config/elasticsearch.yml#打开节点名称node.name:node-1#这里的node-1为node-name配置的值clus......
  • Python进行多输出(多因变量)回归:集成学习梯度提升决策树GRADIENT BOOSTING,GBR回归训练
    原文链接: http://tecdat.cn/?p=25939最近我们被客户要求撰写关于多输出(多因变量)回归的研究报告,包括一些图形和统计输出。在之前的文章中,我们研究了许多使用多输出回归分析的方法。在本教程中,我们将学习如何使用梯度提升决策树GRADIENTBOOSTINGREGRESSOR拟合和预测多输出回归......
  • Python基于粒子群优化的投资组合优化研究|附代码数据
    全文链接:http://tecdat.cn/?p=6811最近我们被客户要求撰写关于粒子群优化的研究报告,包括一些图形和统计输出。粒子群优化(PSO)在PSO中,群中的每个粒子表示为向量。在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资本。矢量转换为多维搜索空间中的位置。每个粒子也会记......
  • 简述Python的作用域以及Python搜索变量的顺序
    Python作用域简单说就是一个变量的命名空间。代码中变量被赋值的位置,就决定了哪些范围的对象可以访问这个变量,这个范围就是变量的作用域。在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域。Python的变量名解析机制也称为LEGB法则:本地作用域(Local)→当前作......
  • Python3 环境下使用 MySQLdb 库
    方法一:可以使用mysqlclient库安装:pipinstallmysqlclient 可能还需要下面对应的库,或者其它库#apt-getinstallmysql-dev或者#yuminstallmysql-devel使用:importMySQLdb 方法二:使用pymsql,这个需要做程序改造了......
  • Python判断一个数据结构是否为空的方法
    《EffectivePython》,里面提到判断字符串或者集合是否为空的原则。意思是:不要通过取字符串或者集合的长度来判断是否为空,而是要用not关键字来判断,因为当字符串或集合为空时,其值被隐式地赋为False.test_str=''test_tuple=()test_list=[]test_dict={}test_set=set()ifnot(test......
  • python内置库--logging
    关于logging利用logging,我们在代码里面输出日志信息,这些日志信息可以包括代码中的数据、日志所在模块/文件/行、记录时间、日志级别等等,这些信息可以判断代码运行状态、查看具体代码信息以帮助我们定位问题。在代码量大、模块多时,建议用logging来替代print,输出信息更加方便阅......
  • python list 转 字典,父节点包含子节点
    list转字典,父节点包含子节点classData:def__init__(self,id,p_id,name):self.id=idself.p_id=p_idself.name=namedefconvert_to_dict(data_list):result_dict={}fordataindata_list:ifdata.p_i......
  • python字符串操作
    python字符串操作字符串定义可用单引号、双引号、三引号来定义字符串#eg:var1='HelloWorld!'var1="HelloWorld!"var1="""HelloWorld!"""字符串相关的一些操作1.input()name=input("请输入你的名字:")#输入张三print(name)#张三print(type(n......
  • python离线下载安装第三方包
    下载离线安装包#dpackages选项表示将多个文件保存在packages文件夹下例:下载requestspipdownloadrequests-dpackages-ihttps://pypi.tuna.tsinghua.edu.cn/simple安装离线包#--find-links=路径选项来指定寻找依赖的路径,--no-index选项表示不要检查PyPI,以requests包......