知识图谱neo4j的相关使用

1. neo4j下载

neo4j下载地址及安装:https://neo4j.com/download/

下载社区版neo4j不支持创建多个数据库怎么办?

两种方法:

  1. 修改neo4j.conf配置文件中的#dbms.active_database=graph.db,将graph.db修改为新的数据库的位置(配置文件一般在neo4j\conf下);
  2. 更改原先的graph.db的文件夹名称(如改为graph_1.db),新建graph.db作为新的数据库。

2. neo4j简单使用

cypher语句:https://neo4j.com/developer/cypher/intro-cypher/

2.1创建节点及关系

在这里插入图片描述
同时创建多部电影

create (:film {
    
    name:'肖申克的救赎',type:'犯罪',score:9.7}),
(:film {
    
    name:'霸王别姬',type:'剧情',score:9.6}),
(:film {
    
    name:'辛德勒的名单',type:'历史',score:9.5}),
(:film {
    
    name:'盗梦空间',type:'剧情',score:9.3}),
(:film {
    
    name:'星际穿越',type:'剧情',score:9.3}),
(:film {
    
    name:'荆轲刺秦王',type:'历史',score:8.2}),
(:film {
    
    name:'绿里奇迹',type:'剧情',score:8.9})

一般create创建关系和节点,但需要注意的是create会产生一样的节点,只是id会不一样,因此当不确定已有的库中是否包含某个节点时,可以使用merge进行创建,因为merge是有去重功能的。

同时创建多个导演

在这里插入代码片create (:director {
    
    name:'弗兰克·德拉邦特'}),
(:director {
    
    name:'陈凯歌'}),
(:director {
    
    name:' 史蒂文·斯皮尔伯格'}),
(:director {
    
    name:'克里斯托弗·诺兰'})

同时创建多个演员

create (:actor {
    
    name:'蒂姆·罗宾斯'}),
(:actor {
    
    name:'张国荣'}),
(:actor {
    
    name:'连姆·尼森'}),
(:actor {
    
    name:'马修·麦康纳'}),
(:actor {
    
    name:'张丰毅'})

创建电影“肖申克的救赎”和导演“弗兰克·德拉邦特”关系

MATCH(a:director),(b:film)
WHERE a.name='弗兰克·德拉邦特' AND b.name='肖申克的救赎'
CREATE(a)-[r:direct]->(b)

创建电影和演员关系

MATCH(a:actor),(b:film)
WHERE a.name='张国荣' AND b.name='霸王别姬'
CREATE(a)-[r:play]->(b)

创建一个导演与多个电影的关系

MATCH(a:actor),(b:film)
WHERE a.name='张丰毅' AND (b.name='霸王别姬' or b.name='荆轲刺秦王')
CREATE(a)-[r:play]->(b)

2.2 查询节点及关系

查询某个电影

MATCH(a:film)
WHERE a.name='霸王别姬'
RETURN a

查询某个标签下的所有节点

MATCH(a:director)
RETURN a

查询两个节点间的关系

MATCH (:director {
    
    name:'弗兰克·德拉邦特'})-[r]->(:film{
    
    name:'肖申克的救赎'})
RETURN r 

通过函数type获取关系的类型

MATCH ()-[r]->(:film{
    
    name:'肖申克的救赎'})
RETURN type(r)

2.3 删除节点及关系

删除某个节点

MATCH(a:actor)
WHERE a.name='马修·麦康纳'
DELETE a

删除某个标签的所有节点

MATCH(a:actor)
DELETE a

删除所有节点

MATCH(n)
DELETE n

删除两个节点的关系

MATCH (:actor {
    
    name:'张国荣'})-[r]->(:film {
    
    name:'霸王别姬'})
DELETE r

删除某节点的关系

MATCH (:actor {
    
    name:'张国荣'})-[r]->()
DELETE r

删除某个标签全部的关系

MATCH ()-[r]->(:film) 
DELETE r

增加节点属性

MATCH(n:film) WHERE n.name='盗梦空间' SET n.language='english'

删除节点属性

MATCH(n:film) WHERE n.name='盗梦空间' REMOVE n.language

需要注意的是,在删除节点之前需要先将和节点相关的关系删除。

2.4 neo4j批量构建节点和关系

基于csv文件导入的方式批量构建节点
基于csv文件导入的方式批量构建关系

  1. 首先要把文件放到neo4j的对应数据库的import文件(和上文中的conf是同级目录)下
  2. 导入节点和关系
# 基于csv文件导入的方式批量构建交易所节点
load csv with headers from 'file:///exchange.csv' as line
create(:exchange{
    
    name:line.name,ch_name:line.ch_name,code:line.code})

# 基于csv文件导入的方式批量构建股票节点
load csv with headers from 'file:///stock_exchange.csv' as line
match (a:stock{
    
    code:line.stock_code}),(b:exchange{
    
    code:line.exchange_code})
create(a)-[r:交易所]->(b)

# 基于csv文件导入的方式批量构建节点关系
load csv with headers from 'file:///stock_exchange.csv' as line
match (a:stock{
    
    code:line.stock_code}),(b:exchange{
    
    code:line.exchange_code})
create(a)-[r:交易所]->(b)

3. py2neo的使用

import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
#账号密码
g = Graph('http://localhost:7474',user='neo4j',password='123456')
import pandas as pd
df = pd.read_csv('DreamOfRedChamber.csv')
from tqdm import tqdm
for i, row in tqdm(df.iterrows()):
    print(row['head'],row['tail'],row['relation'],row['label'])
    start_node = Node("Person",name=row['head'])
    g.create(start_node)
    end_node = Node("Person",name=row['tail'])
    g.create(end_node)
    relation = Relationship(start_node,row['label'],end_node)
    g.create(relation)
g.run("match(p:Person {name:'林黛玉'})-[k:丫鬟]-(r)return p,k,r")

4. 相关算法链接

lovain算法:
https://neo4j.com/docs/graph-data-science/current/algorithms/louvain/
Page-Rank算法:https://neo4j.com/docs/graph-algorithms/current/algorithms/page-rank/
基于pytorch的知识表示:
https://github.com/thunlp/OpenKE
图神经网络框架:
https://github.com/rusty1s/pytorch_geometric

猜你喜欢

转载自blog.csdn.net/dzysunshine/article/details/117992997