相关文章推荐
打盹的地瓜  ·  【第 23 話】DKOM 隱藏 ...·  9 月前    · 
刀枪不入的豆芽  ·  c# - How do I select ...·  1 年前    · 
刚毅的皮带  ·  Python基础 | ...·  1 年前    · 
首发于 知识图谱

Neo4j的使用②| 使用Python操作Neo4j | 更新中

使用Python操作Neo4j

本文主要讲解了py2neo的使用方法,主要面向对象为大二本科生,旨在让同学们能初步使用该工具,完成一些简单的任务,因此没有过多讲授py2neo的复杂用法。
如果想学习后续的高级用法可以关注本文,后面我们会持续更新。

首先补充一个知识点,清空一张图的命令。

 MATCH (n) DETACH DELETE n

py2neo的介绍

简单来说就是python与neo4j的接口,安装了py2neo就可以使用python操作Neo4j了。
我们也就可以在线处理大规模的数据,实现知识图谱的自动构建了。

安装方法非常简单,直接在cmd中输入下列命令即可,

 pip install py2neo

py2neo使用方法

1. 连接数据库

首先 确保 你已经运行了你的数据库,也就是说在浏览器中是可以打开 http://localhost:7474 的。
用户名密码分别是neo4j和12345678
 from py2neo import Node, Relationship, Graph, NodeMatcher, RelationshipMatcher#导入我们需要的头文件
# 连接neo4j 数据库
test_graph = Graph('http://localhost:7474',auth=('neo4j','12345678'), name = 'neo4j')

2. 创建实体

在这里还是以清华大学EDUKG的一个图谱片段为例子给大家进行演示。
下列代码创建了2个类型分别为概念和属性的实体,它包含3个属性分别是 name,chapter,ID ,也可以根据自己需要 定义更多的属性。
EduKG片段
A = Node("概念", name="向量", chapter = 1 , ID = 100)
B = Node("属性", name="向量叉积", chapter = 2 , ID = 99)
test_graph.create(A)
test_graph.create(B)

我们运行这一行代码,会发现已经创建好了这样2个实体,并且用不同的颜色已经做好了区分。

2个实体

3. 创建关系

test_graph.create(Relationship(B, "下属于", A))
创建好关系

现在让我们 一次性创建大量实体以及关系 ,实际上下列数据都应该存放于csv文件中,为了方便演示我将其写成了列表。

 # 下列数据均为相对于“向量”实体的关系
 #################### 说明 ###########################
 # 强相关于 strong_related
 # 相关于 related
 # 下属于 belong_to   [概念上的,如平面向量 下属于 向量]
 # 部分于 part_to     [性质上的,如起点 部分于 向量]
 #################### 说明结束 #######################
 part_to  =["方向","起点","内积","模","终点","数量积"]
 strong_related = ["几何表示","向量模的性质","数轴上向量的坐标运算","向量共线的性质","单位向量的定义",
                   "运算律""坐标表示","向量的长度的定义","向量的数量积的定义","向量的投影的定义","三角形法则",
                   "向量的模的定义","要素","向量正交分解的定义","第一分配率","向量平行的性质","第二分配率","向量的性质",
                   "坐标运算","线性运算","平行四边形法则","零向量的性质","向量的减法的定义","平面几何中的向量方法",
                   "向量内积的性质","向量的夹角的定义","向量的数乘的定义","向量垂直的性质","向量在物理中的应用",
                   "向量的定义","取值范围","向量的加法的定义","向量的起点的定义","向量的终点的定义","结合律",]
 related = ["复合变换的定义","立体几何中的向量方法","单位正交基底的定义","向量共线的性质","几何表示",
            "空间直角坐标系的定义","向量平行的性质","基本定理","坐标表示","向量的终点的定义","坐标运算",
            "列向量的性质","要素","共面向量的定义","向量的数乘运算的定义","零向量的性质","相等向量的定义",
            "向量形式","向量的定义","向量的投影的定义","数列与向量综合","平面几何中的向量方法","相反向量的定义",
            "单位向量的定义","平面向量基本定理","复数的模的定义","数列与解析几何综合","向量的数乘的定义",
            "向量的起点的定义","线性运算","数列与立体几何综合","向量正交分解的定义","空间向量线性运算的性质",
            "向量在物理中的应用","三角形法则","向量的长度的定义","方向向量","矩阵特征向量的性质","共面向量定理",
            "向量的模的定义","平行四边形法则","空间向量的性质","空间向量模的性质","向量的加法的定义","取值范围",
            "向量的性质","数轴上向量的坐标运算","零向量的定义","向量的夹角的定义","向量的减法的定义","几何意义",
            "向量的基底的定义","行向量的性质",]
 belog_to = ["平面向量","法向量","非零向量","共面向量","单位向量",
             "平行向量","零向量","基底","相反向量","相等向量","空间向量","共线向量"]

接下来我们进行关系的创建。

# 为了便于演示,后面的ID和chapter都是任意赋值的,无实际意义。
ID = 100
for i in belog_to:
    ID += 1
    temp = Node("概念", name = i, chapter = 2, ID = ID)
    test_graph.create(Relationship(temp, "下属于", A))
for i in part_to:
    ID += 1
    temp = Node("属性", name = i, chapter = 3, ID = ID)
    test_graph.create(Relationship(temp, "部分于", A))
for i in related:
    ID += 1
    temp = Node("属性", name = i, chapter = 4, ID = ID)
    test_graph.create(Relationship(temp, "相关于", A))