知识图谱之py2neo

py2neo介绍

  • 介绍

Py2neo是一个客户端库和工具包,用于从Python应用程序和命令行使用Neo4j(Neo4j Graph Data Platform | Graph Database Management System)。该库同时支持 Bolt 和 HTTP,并提供高级 API、OGM、管理工具、交互式控制台、Pygments 的 Cypher 词法分析器以及许多其他功能。

  • 安装

pip install py2neo

注:Neo4j也需要安装,地址https://neo4j.com/

py2neo基本使用

  • 启动Neo4j

  • 连接代码

from py2neo import Graph, Node, Relationship
 
graph = Graph("http://localhost:7474//browser", name='neo4j', auth=("neo4j", "12345678"))
print(graph.run("show databases"))

基于xsls文件的demo

  • demo效果

  • xls文件内容

  • sheet 结构

  • "关系"sheet内容如下

id

from

to

type

1

令狐冲

宁中则

师娘

2

仪琳

令狐冲

倾慕

3

任盈盈

令狐冲

爱慕

4

令狐冲

岳林珊

小师妹

5

岳林珊

岳不群

父亲

6

任盈盈

任我行

父亲

7

岳不群

宁中则

夫妻

#8

林平之

岳林珊

夫妻

  • 下面的表格分别对应"恒山派"、"华山派"、"日月教"sheet中的内容()

id

title

1

令狐冲

2

仪清

3

仪和

4

仪琳

id

title

1

岳不群

2

宁中则

3

岳林珊

4

林平之

id

title

1

任我行

2

任盈盈

3

向问天

  • demo依赖

pip install pandas
pip install openpyxl

Neo4j和py2neo也是需要的。

  • demo主要代码块

import os

import pandas as pd
from py2neo import Graph, Node, Relationship


sheetNameList = [
    {'sheet':'恒山派',     'type':'Node'},
    {'sheet':'华山派',     'type':'Node'},
    {'sheet':'日月教',     'type':'Node'},
    {'sheet':'关系',       'type':'Relationship'},
]
def __init__(self, filename=None):
    self.filename = filename

    self.nodeList             = []
    self.relationshipList     = []

    self._loadfile()
    self._buildGraph()
 def _loadfile(self):
    if not os.path.exists(self.filename):
        print('_loadfile', 'file not exist')
        return False

    for sheetName in sheetNameList:
        sheetData = pd.read_excel(self.filename, index_col=None, comment='#', sheet_name=sheetName['sheet'])

        if sheetName['type'] == 'Node':
            keys=[]
            for index, row in sheetData.iterrows():
                if not row['title']:
                    continue
                keys.append(row['title'])
            
            keyval = dict(zip(keys, keys))
            node = Node(sheetName['sheet'], name=sheetName['sheet'], **keyval)
            self.nodeList.append(node)

            for index, row in sheetData.iterrows():
                if not row['title']:
                    continue
                subNode = Node(sheetName['sheet'], name=row['title'])
                self.nodeList.append(subNode)
                rel = Relationship(node, '属性', subNode)
                self.relationshipList.append(rel)

        elif sheetName['type'] == 'Relationship':
            startNode = None
            endNode   = None
            for index, row in sheetData.iterrows():
                if not row['from'] or not row['to']:
                    continue

                for node in self.nodeList:
                    if node['name'] == row['from']:
                        startNode = node
                    elif node['name'] == row['to']:
                        endNode   = node
                    else:
                        pass
                rel = Relationship(startNode, row['type'], endNode)
                self.relationshipList.append(rel)
        else:
            pass
def _buildGraph(self):
    graph = Graph("http://localhost:7474//browser", name='neo4j', auth=("neo4j", "12345678"))
    graph.delete_all()

    for node in self.nodeList:
        graph.create(node)

    for rel in self.relationshipList:
        graph.merge(rel)
        pass

    graph.begin()

参考

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值