neo4j建立知识图谱-快乐家族

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangfengling1023/article/details/82528785

最近在研究知识图谱的东西,也在之前的博客中介绍过直接使用cypher进行建立知识图谱,今天又实践了一下怎样在python中使用cypher语言进行知识图谱的构建,网上这方面的资料也比较少,特此分享给大家,内容比较简单哦

原则:
1)cypher用于数据的更新和查询
2)一个cypher语句不能同时查询和更新
3)label没有属性
4)relationship:有方向、有类型
命名规范:
1)实体变量名:小写,属性名:小写
2)实体标签名:首字母大写
3)关系:大写
下面所举的例子在命名规范方面不是太恰当

快乐家族伴随我们这代人的很多时光,给了我们很多快乐的回忆(虽然现在不怎么看了,哈哈哈哈),以他们几个人为节点建立了一个简单的图谱,这样也比较好理解了

  • 1、导入相关的包
from py2neo import Graph,Node,Relationship,cypher

from pandas import DataFrame
  • 2、节点的创建
##Graph  图

test_graph = Graph('http://localhost:7474',username='neo4j',password='test')

xiena = Node('kuailejiazu',name = '谢娜')

test_graph.create(xiena)



hejiong = Node('kuailejiazu',name = '何炅')

test_graph.create(hejiong)



weijia = Node('kuailejiazu',name = '维嘉')

test_graph.create(weijia)



haitao = Node('kuailejiazu',name = '海涛')

test_graph.create(haitao )



wuxin = Node('kuailejiazu',name = '吴昕')

test_graph.create(wuxin )

运行之后的结果如下所示:

我们可以看出来,运行的结果是一个一个单独的节点,节点之间并没有关系,因此需要告诉彼此之间的关系是什么

注意:

当创建节点的程序代码运行之后,则节点生成,若再重新运行一次,则节点重新被创建,所以当建立关系时,可以将之前创建节点的代码进行注释掉,以避免重复创建节点

 

  • 3、节点之间关系的建立

有两种方式进行关系的建立

(1)在创建新节点的同时,将关系建立起来

zhangjie = Node('kuailejiazu',name='张杰')

test_graph.create(zhangjie)



xiaofang = Node('kuailejiazu',name=小方’)

test_graph.create(xiaofang)



r = Relationship(zhangjie,'朋友',xiaofang)

test_graph.create(r)

运行出的结果如下所示:

(2)在已有节点的基础之上进行关系的建立

test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'朋友',test_graph.data("MATCH(b:kuailejiazu{name:'何炅'}) return b ")[0]['b']))



test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'朋友',test_graph.data("MATCH(b:kuailejiazu{name:'维嘉'}) return b ")[0]['b']))



test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'朋友',test_graph.data("MATCH(b:kuailejiazu{name:'海涛'}) return b ")[0]['b']))



test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'朋友',test_graph.data("MATCH(b:kuailejiazu{name:'吴昕'}) return b ")[0]['b']))



test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'夫妻',test_graph.data("MATCH(b:kuailejiazu{name:'张杰'}) return b ")[0]['b']))



test_graph.create(Relationship(test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a'],'朋友',test_graph.data("MATCH(b:kuailejiazu{name:'小方'}) return b ")[0]['b']))

运行结果如下所示:

  • 4、节点的相关操作

(1)节点的查询

查询姓名为“张杰”的节点

a = test_graph.data("Match(n:kuailejiazu) where n.name = '张杰' return n")

print (a)

运行之后的结果:

[{'n': (d38a016:kuailejiazu {name:"张杰"})}]

使用DataFrame对结果进行输出

print (DataFrame(a))

运行之后的结果:

                n

0  {'name': '张杰'}

 

(2)针对上面的例子,查出所有和”谢娜”节点是朋友关系的节点

b = test_graph.data("MATCH(n:kuailejiazu)-[:朋友]->(end:kuailejiazu) where n.name='谢娜' return end")

print(DataFrame(b))

运行的结果如下所示:

(3)节点的删除

在不小心操作的过程中,多创建了一个节点

于是需要对其进行删除操作

下面的两种方式皆可进行节点的删除

test_graph.data("Match(n:kuailejiazu{name:'额'}) delete n")

test_graph.data("Match(n:kuailejiazu) where n.name='额' delete n")

(4)统计图谱中有多少节点

zongshu = test_graph.data("match(n:kuailejiazu) return count(n)")

print(zongshu)

运行结果:

[{'count(n)': 7}]

  • 5、属性的增加
a = test_graph.data("MATCH(a:kuailejiazu{name:'谢娜'}) return a ")[0]['a']

a['time'] = '1981/5/6'

print(a['name'])

print(a['time'])

运行的结果如下所示:

谢娜

1981/5/6

暂时先写这么多了,后续有深的体会、学到新的知识点时,会继续更新的

猜你喜欢

转载自blog.csdn.net/yangfengling1023/article/details/82528785