知识图谱:py2neo将csv文件导入neo4j

文章目录

        • 安装py2neo
        • 创建节点-连线关系图
        • 导入csv文件
        • 删除重复节点并连接边

安装py2neo

安装python中的neo4j操作库:pip install py2neo
安装py2neo后我们可以使用其中的函数对neo4j进行操作。

图数据库Neo4j中最重要的就是结点和边(关系),结点之间靠边联系在一起,每个结点也有属于自己的属性。

也就是说我们在用pyhton操作Neo4j的时候只需要创造出节点(Node )和节点之间的关系:边(Relationship ),如果节点存在附加属性,可以再给结点附上一些属性。

注意: 在我们用python的时候我们必须启动Neo4j。如图所示,点击connect进行连接。

在这里插入图片描述

创建节点-连线关系图

下面我们就创建三个结点,每个结点有两个属性,两结点之间有一个关系。

from py2neo import Graph, Node, Relationship
# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", name="neo4j", password='xxx')
graph.delete_all() #清除neo4j中原有的结点等所有信息# 创建结点
node1 = Node('person', name = 'chenjianbo')   #该结点语义类型是person  结点名字是chenjianbo  也是它的属性
node2 = Node('major',name = 'software')       #该结点语义类型是major  结点名字是software  也是它的属性
node3 = Node('person',name = 'bobo')          #该结点语义类型是person  结点名字是bobo   也是它的属性#给结点node1 添加一个属性 age
node1['age'] = 18
#给结点node2 添加一个属性 college
node2['college'] = 'software college'
#给结点node3 添加一个属性 sex
node3['sex'] = '男'#把结点实例化 在Neo4j中显示出来
graph.create(node1)
graph.create(node2)
graph.create(node3)
# 创建关系
maojor = Relationship(node1, '专业', node2)
friends = Relationship(node1, '朋友', node3)
maojor1 = Relationship(node3, '专业', node2)
#把关系实例化 在Neo4j中显示出来
graph.create(maojor)
graph.create(maojor1)
graph.create(friends)

在这里插入图片描述

导入csv文件

该网站有大量汇总的知识图谱数据集,可供学习使用。
http://openkg.cn/dataset

在这里插入图片描述

周杰伦歌曲知识数据集csv,应用三元组的形式将歌曲歌手所属专辑联系在一起。

在这里插入图片描述

  • dataframe格式读入数据
import pandas as pddf = pd.read_csv('relation.csv',index_col=0)df
	Column1	Column2	Column3
id			
1	Dare for more	周杰伦	歌手
2	Dare for more	蔡依林	歌手
6	Mine Mine	惊叹号	所属专辑
7	Now You See Me	周杰伦	歌手
8	Now You See Me	方文山	作词
...	...	...	...
624	最后的战役	周杰伦	歌手
625	最后的战役	方文山	作词
626	最后的战役	八度空间	所属专辑
627	最长的电影	周杰伦	歌手
628	最长的电影	我很忙	所属专辑
  • 使用py2neoneo4j添加节点和边
graph.delete_all() #清除neo4j中原有的结点等所有信息for index,row in df.iterrows():node1 = Node('person',name=row[0])node2 = Node('person',name=row[1])graph.create(node1)graph.create(node2)each = Relationship(node1, row[2], node2)graph.create(each)

在这里插入图片描述
这样生成的知识图谱只是简单的节点-边的关系,存在大量冗余的实体entity

可以通过neo4j的删除方法将重复节点进行删除,之后将边重新连接。

删除重复节点并连接边

查询重复节点,如果有重复节点就不create。这样节点和边全部联系在一起,形成完整的没有冗余的知识图谱。

目前的缺点是节点Node的命名都是以person命名,所以节点暂时没有区分。

graph.delete_all() #清除neo4j中原有的结点等所有信息
from py2neo import NodeMatcher
entity = []for index,row in df.iterrows():if row[0] not in entity:entity.append(row[0])node1 = Node('person',name=row[0])graph.create(node1)else:node_matcher = NodeMatcher(graph) node1 = list(node_matcher.match('person').where(name=row[0]))[0]print(node1)if row[1] not in entity:entity.append(row[1])  node2 = Node('person',name=row[1])graph.create(node2)else:node_matcher = NodeMatcher(graph) node2 = list(node_matcher.match('person').where(name=row[1]))[0]print(node2)each = Relationship(node1, row[2], node2)graph.create(each)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

隐函数的求导【高数笔记】

1. 什么是隐函数? 2. 隐函数的做题步骤? 3. 隐函数中的复合函数求解法,与求导中复合函数求解法有什么不同? 4. 隐函数求导的过程中需要注意什么?

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写)

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写) [Tcp套接字编程]一.服务器端进程:1.创建套接字2.绑定网络信息3.设置监听状态4.获取新连接5.根据新连接进行通信 二.客户端进程:1.创建套接字2.连接服务器套接字3.连接成功后进行通信 三…

爱上JVM——常见问题(一):JVM组成

1 JVM组成 1.1 JVM由那些部分组成,运行流程是什么? 难易程度:☆☆☆ 出现频率:☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写&…

第三十三回 镇三山大闹青州道 霹雳火夜走瓦砾场-python分割字符串

黄信和刘知寨押解宋江和花荣向青州走,碰到了燕顺等三人来劫囚车,黄信逃走了,刘知寨被抓住,被花荣一刀杀了。 黄信把情况报给青州知府,派来了青州兵马秦统制,人称霹雳火的秦明。秦明与花荣打,花…

计算机二级之sql语言的学习(数据模型—概念模型)

概念模型 含义: 概念模型用于信息世界(作用对象)的建模,是实现现实世界到信息世界(所以万丈高楼平地起,不断地学习相关的基础知识,保持不断地重复才能掌握最为基础的基础知识)的概念抽象&#…

错误处理 ssh登陆提示:server unexpectedly closed network connection

干了一天的活,因为对etc做权限操作,导致ssh不能连接,差点奔溃 记这次处理经验 因修改/etc/ssh权限导致的ssh不能连接异常解决方法 现象: $ssh XXX192.168.5.21 出现以下问题 Read from socket failed: Connectionreset by peer …

QtApplets-线程池

QtApplets-线程池 ​ 今天咱们稍微看下Qt的线程池。QThreadPool,浅浅搞一下。 文章目录 QtApplets-线程池QThreadPoolQThreadPool 与 QThread 区别替代方案Qt Concurrent QThreadPool 与 Qt Concurrent 区别Demo运行效果 ☞ 源码 关键字: Qt、QRunnable…

leetcode hot100不同路径Ⅱ

本题和之前做的不同路径类似,区别是本题中加入了障碍,遇到障碍之后需要避开(注意,这里依旧是只能向下向右移动),那么也就是说,有障碍的点是到达不了的,并且 ,我在初始化的…

Gitee入门之工具的安装

一、gitee是什么? Gitee(码云)是由开源中国社区在2013年推出的一个基于Git的代码托管平台,它提供中国本土化的代码托管服务。它旨在为个人、团队和企业提供稳定、高效、安全的云端软件开发协作平台,具备代码质量分析、…

力扣1732. 找到最高海拔(前缀和)

Problem: 1732. 找到最高海拔 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.求取数组gain的大小 n n n; 2.定义一个大小为 n 1 n 1 n1的数组preSum; 3.先求取前 n n n个元素的前缀和,再最后单独处理preSum[n];其中preSum[n] preSum[n - 1] gai…

网络安全最典型基础靶场-DVWA-本地搭建与初始化

写在前面: 之前也打过这个 DVWA 靶场,但是是在虚拟机环境下的一个小块分区靶场; 本篇博客主要介绍在本地搭建 DVWA 靶场以及靶场的初始化,后续会陆续更新通关教程。 由于我们是在本地搭建,则需要基于你已经装好 phpstu…

【Java程序员面试专栏 Java领域】Java集合 核心面试指引

关于Java 集合部分的核心知识进行一网打尽,主要包括Java各类集合以及Java的HashMap底层原理,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 集合基本概念和比较 关于集合的基本分类和知识 Java集合有哪些种类 Java 集合, 也叫作容器…

云计算基础-计算虚拟化-CPU虚拟化

CPU指令系统 在CPU的工作原理中,CPU有不同的指令集,如下图,CPU有4各指令集:Ring0-3,指令集是在服务器上运行的所有命令,最终都会在CPU上执行,但是CPU并不是说所有的命令都是一视同仁的&#xf…

跟着pink老师前端入门教程(JavaScript)-day02

三、变量 (一)变量概述 1、什么是变量 白话:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器,通过变量名获取数据,甚至数据可以修改 2、变量在内存中的存储 本质:变量是程序在内存…

HarmonyOS一杯冰美式的时间 -- 验证码框

一、前言 像是短密码、验证码都有可能需要一个输入框,像是如下: 恰好在写HarmonyOS的时候也需要写一个验证码输入框,但是在实现的时候碰了几次灰,觉得有必要分享下,故有了此篇文章。 如果您有任何疑问、对文章写的不…

Unity 2D Spine 外发光实现思路

Unity 2D Spine 外发光实现思路 前言 对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现。 但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼的外发光效果呢? 理论基础 我们要知道&a…

书生·浦语-模型评测opencompass

大预言模型评测 模型评测包括主管评测与客观评测 测试模型对提示词的敏感性,或通过提示词获得更准确地答案 主流评测框架 opencompass评测平台 作业

智慧公厕:让智慧城市的公共厕所焕发“智慧活力”

智慧城市的建设已经进入了一个新的阶段,不仅仅是智慧交通、智慧环保,如今甚至连公厕都开始迎来智慧化时代。智慧公厕作为智慧城市的神经末梢,正在通过信息化、数字化和智慧化的方式,实现全方位的精细化管理。本文以智慧公厕源头专…

Flink理论—Flink架构设计

Flink架构设计 Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop YARN,但也可以设置作为独立集群甚至库运行,例如Spark 的 Standalone Mode 本节概述了 Flink 架构&…

初识最短路径

一.最短路径的介绍 最短路径是图论和网络分析中一个重要的概念,它指的是在一个图或网络中连接两个节点或顶点的路径中,具有最小权重总和的路径。这个权重可以表示为路径上边或弧的长度、耗费、时间等,具体取决于问题的背景和应用场景。 如果你…