知识图谱(1)知识存储与检索

news2024/10/5 11:27:13

目录

  • Neo4j在win系统安装
  • Neo4j基础语法
    • 知识图谱创建
    • 知识图谱查询
    • 知识图谱属性增减
  • python与neo4j

Neo4j在win系统安装

图数据库(graph database)是一种特殊的数据库,用于存储丰富的关系数据,neo4j是目前最流行的图数据库,支持完整的事务。在属性图中图由顶点,边,和属性组成,顶点和边都可以设置属性,顶点也称作节点,边称作关系,每个节点和关系都可以有一个或多个属性。neo4j创建的图是用顶点和边构成的有向图,查询语言为cypher。
fig0

一般的关系数据库只对单个Join操作进行优化查询,多重Join操作查询的性能会显著下降,图数据库适合查询关系数据,由于图遍历的局部性,不管图中有多少节点和关系,根据遍历规则,Neo4j只访问与遍历相关的节点,不受总数据集大小的影响,遍历的节点越多,遍历速度越慢,但这种速度是线性的变慢。


在关系数据库中,Join操作用于将多个表中的数据合并在一起,以创建一个包含多个表的结果集。


首先安装JDK,需要创建Oracle账号才能下载JDK:https://www.cnblogs.com/huzixia/p/10402200.html

在cmd中测试java是否安装成功:

C:\Users\Administrator>java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)

然后下载Neo4j Desktop,下载的同时保存Neo4j Desktop Activation Key用于安装激活:https://neo4j.com/deployment-center/

安装成功并激活后打开Neo4j Desktop,新建一个Project,并在其中添加DBMS,比如名称为Graph DBMS,先start再open该数据库。在数据库中创建节点:

create(n:技术论坛{name:'CSDN'})

上面语句的语法为:

CREATE (<node-name>:<label-name>)

CREATE (
   <node-name>:<label-name>
   {    
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)

创建后,neo4j会为节点自动添加属性<id>,然后再创建一个节点:

create(n:课程{name:'知识图谱'})

再创建关系,比如 技术论坛 开设 课程:

match(a:技术论坛),(b:课程)create(a)-[r:开设]->(b)

Neo4j基础语法

知识图谱创建

下面通过手动创建一个简单的电影知识图谱来熟悉neo4j,该图谱包括:创建电影节点,创建导演节点,创建演员节点,创建电影和导演的关系,创建电影和演员的关系。

电影信息为:
fig1

首先创建Movie DBMS,进入数据库创建一个电影:

create(n:film{name:'肖申克的救赎',type:'犯罪',score:'9.7'})

也可以同时创建多个电影,注意此时需要不指定node-name,让系统自动添加不同的node-name:

create(: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'})

fig2
然后同时创建多个导演:

create(:director{name:'弗兰克·德拉邦特'}),
(:director{name:'陈凯歌'}),
(:director{name:'史蒂⽂·斯⽪尔伯格'}),
(:director{name:'克⾥斯托弗·诺兰'})

fig3
同时创建多个演员:

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='肖申克的救赎' 
CREATE(a)-[r:play]->(b)

创建电影和演员的关系:

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

fig4

知识图谱查询

然后是知识图谱的检索,即查询关系与节点:查询某个电影,查询某个类别下的所有节点,查询两个节点之间的关系,通过函数type获取关系的类型。

比如查询某个电影:

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

查询某个类别下的所有节点:

MATCH(a:director) 
RETURN a

查询两个节点之间的关系:

MATCH (:director {name:'弗兰克·德拉邦特'})-[r]->(:film{name:'肖申克的救赎'}) 
RETURN r
# 返回如下:
╒═════════╕
│r        │
╞═════════╡
│[:direct]│
└─────────┘

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

MATCH ()-[r]->(:film{name:'肖申克的救赎'}) 
RETURN type(r)
# 返回如下:
╒════════╕
│type(r) │
╞════════╡
│"direct"│
├────────┤
│"play"  │
└────────┘

知识图谱属性增减

增加节点属性:

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

删除节点属性:

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

python与neo4j

需要安装py2neo:

pip install py2neo

这里以红楼梦构造知识图谱,创建RedChamber数据库,在创建时记住数据库密码,然后打开logs看到:Remote interface available at http://localhost:7474/,之后我们就可以用py2neo连接该数据库,username统一为neo4j。

通过py2neo连接数据库:

import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
# username默认neo4j,密码为数据库创建时的密码,name为数据库中的graph name
g = Graph('http://localhost:7474',user='neo4j',password='12341234',name='neo4j')

这里使用的信息来自http://www.openkg.cn/home,DreamOfRedChamber.csv内容为(见我的资源):
fig5
读取该信息:

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)

来到 http://localhost:7474/browser/查询所有人物:

MATCH(a:Person) 
RETURN a

fig6
放大后可以更清晰看到关系:
fig7
我们可以用py2neo运行neo4j的命令:

g.run("match(p:Person {name:'林黛玉'})-[k:丫鬟]-(r)return p,k,r")

fig8

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

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

相关文章

RedHat7 配置国内清华大学yum源

1.前置准备工作 #导入gpg key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org #在/etc/yum.repos.d/下安装elrepo.repo 文件 yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm2.vim未安装可以先安装一下 sudo yum install vim3.编辑…

微信小程序scroll-view隐藏滚动条参数不生效问题

如题&#xff0c;先来看看问题是怎么出现的。 先看文档如何隐藏滚动条&#xff1a; 再根据文档实现wxml文件&#xff1a; <scroll-view show-scrollbar"{{false}}" enhanced><view wx:for"{{1000}}">11111</view> </scroll-view>…

Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos

Nacos使用(上)&#xff1a;Nacos安装 Nacos使用(中)&#xff1a;Java项目和Spring项目使用Nacos Nacos使用(下):SpringBoot和SpringCloud项目中使用Nacos 3.3 SpringBoot SDK 父工程指定springboot版本&#xff1a; <dependencyManagement><dependencies><depe…

AI:05 - 基于深度学习的道路交通信号灯的检测与识别

随着人工智能的快速发展,基于深度学习的视觉算法在道路交通领域中起到了重要作用。本文将探讨如何利用深度学习技术实现道路交通信号灯的检测与识别,通过多处代码实例展示技术深度。 道路交通信号灯是指示交通参与者行驶和停止的重要信号。准确地检测和识别交通信号灯对于智…

【MySQL】JDBC

目录 1.JDBC 2.Java代码操作MySQL 2.1前置条件 2.2常用操作 2.2.1插入 2.2.2删除 2.2.3查询 1.JDBC 概念&#xff1a;JDBC&#xff0c;即Java Database Connectivity( java数据库连接 )。是一种用于执行SQL语句的Java API&#xff0c;它是Java中的数据库连接规范。这个A…

2611B数字源表

Keithley 2611B源表使精密DC、脉冲和低频交流源测量测试比以前更快、更容易、更经济。吉时利2611B的I-V功能测试速度是竞争产品的2到4倍&#xff0c;它结合了: 吉时利的高速第三代源测量单元(SMU)设计嵌入式测试脚本处理器(TSP)TSP-Link&#xff0c;一种快速触发和单元间通信总…

1775_树莓派3B键盘映射错误解决

全部学习汇总&#xff1a; GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 入手树莓派3B之后用了没有多长时间&#xff0c;最初的这段时间感觉想让它代替我的PC机是不肯能的。性能先不说&#xff0c;我完全没有找到当初在我的笔记本上使…

java基础-----第三篇

系列文章目录 文章目录 系列文章目录前言一、final二、String、StringBuffer、StringBuilder前言 一、final 最终的 修饰类:表示类不可被继承 修饰方法:表示方法不可被子类覆盖,但是可以重载 修饰变量:表示变量一旦被赋值就不可以更改它的值。 (1)修饰成员变量 如果fina…

【Go 基础篇】Go语言结构体实例的创建详解

在Go语言中&#xff0c;结构体是一种强大的数据类型&#xff0c;允许我们定义自己的复杂数据结构。通过结构体&#xff0c;我们可以将不同类型的数据字段组合成一个单一的实例&#xff0c;从而更好地组织和管理数据。然而&#xff0c;在创建结构体实例时&#xff0c;有一些注意…

用深度强化学习来玩Flappy Bird

目录 演示视频 核心代码 演示视频 用深度强化学习来玩Flappy Bird 核心代码 import torch.nn as nnclass DeepQNetwork(nn.Module):def __init__(self):super(DeepQNetwork, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(4, 32, kernel_size8, stride4), nn.ReLU(inp…

java八股文面试[数据库]——MySql聚簇索引和非聚簇索引区别

聚集索引和非聚集索引 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致。 1、聚集索引 聚集索引表记录的排列顺序和索引的排列顺序一致&#xff08;以InnoDB聚集索引的主键索引来说&#xff0c;叶子节点中存储的就是行数据&#xff0c;行数据在…

【Go 基础篇】Go语言结构体之间的转换与映射

在Go语言中&#xff0c;结构体是一种强大的数据类型&#xff0c;用于定义和组织不同类型的数据字段。当我们处理复杂的数据逻辑时&#xff0c;常常需要在不同的结构体之间进行转换和映射&#xff0c;以便实现数据的转移和处理。本文将深入探讨Go语言中结构体之间的转换和映射技…

Folx 5适用Mac的BT客户端下载器

Mac 上免费的网络下载管理器Folx Mac 下载器有一个支持 Retina 显示的现代界面。提供独特的系统排序、存储下载内容与预览下载文件。Folx 是具有真正 Mac 风格界面的 macOS 免费下载管理器。它提供了方便的下载管理,灵活的设置等。Folx 专业版是 Mac 上一个出色的种子下载器&am…

Solidity 小白教程:4. 函数输出 return

Solidity 小白教程&#xff1a;4. 函数输出 return 这一讲&#xff0c;我们将介绍Solidity函数输出&#xff0c;包括&#xff1a;返回多种变量&#xff0c;命名式返回&#xff0c;以及利用解构式赋值读取全部和部分返回值。 返回值 return 和 returns Solidity有两个关键字与…

1773_把vim的tab键设置为4个空格显示

全部学习汇总&#xff1a; GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 有时候自己觉得自己很奇怪&#xff0c;看着Linux的命令窗口就觉得很顺眼。那些花花绿绿的字符以及繁多的方便命令工具&#xff0c;确实是比Windows强不少。不过&a…

电脑前置耳机没声音怎么办

有很多小伙伴反映在将自己的耳机连接到主机前面时没有声音&#xff0c;这是怎么回事呢&#xff0c;遇到这种情况应该怎么解决呢&#xff0c;下面小编就给大家详细介绍一下电脑前置耳机没声音的解决方法&#xff0c;有需要的小伙伴可以来看一看电脑前面耳机没声音。 解决方法&a…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

Web安全——信息收集上篇

Web安全 一、信息收集简介二、信息收集的分类三、常见的方法四、在线whois查询在线网站备案查询 五、查询绿盟的whois信息六、收集子域名1、子域名作用2、常用方式3、域名的类型3.1 A (Address) 记录&#xff1a;3.2 别名(CNAME)记录&#xff1a;3.3 如何检测CNAME记录&#xf…

yolov5自定义模型训练二

前期准备好了用于训练识别是否有火灾的数据集后就可以开始修改yolo相关文件来进行训练 数据集放到yolov5目录里 在data目录下新建yaml文件设置数据集信息如下 在model文件夹下新增新的model文件 开始训练 训练出错 确认后是对训练数据集文件夹里的文件名字有要求&#xff0c;原…

YOLO目标检测——人脸数据集下载分享

目标检测人脸数据集在人脸识别、监控和安防、社交媒体、情感分析、医疗诊断等多个领域都具有广泛的应用潜力。 数据集点击下载&#xff1a;YOLO人脸数据集7000图片.rar