知识图谱:Neo4j数据库的基本使用——创建张学良的关系谱

news2024/9/28 11:20:28

一、知识图谱及Neo4j数据库介绍

        知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,是结构化的语义知识库,用于以符号形式描述物理世界中的概念及其相互关系,其基本组成单位是“实体—关系—实体”三元组,以及实体及其相关属性—值对,实体间通过关系相互联结,构成网状的知识结构。

        Neo4j 是一种开源的、基于 Graph 数据库的工具,具有简单的图形用户界面 (GUI) 和命令行界面 (CLI)

 图1 neo4j

二、知识图谱制作

首先需要启动neo4j:在cmd内输入neo4j.bat console即可启动neo4j 进入7474端口节即可进入neo4j

图2 启动neo4j 

创建节点

create (n:person{name:"张学良"})

图3 创建张学良节点

        其中create是创建操作,n没有具体意义,只代表某个标签。Person是label标签名,代表节点类型;花括号{}代表节点的属性,属性可以为name,age等等。这条语句的含义就是创建一个标签为Person的节点,该节点具有一个name属性,值是张学良。还可以给该节点定义其他属性,通常一个label包含若干个属性。单击table可以看到。

图4 查看张学良节点

create (zcg:relatives {name:"赵春桂"}),
(yfz:relatives {name:"于凤至"}),
(gry:relatives {name:"谷瑞玉"}),
(zyd:relatives {name:"赵一荻"}),
(zlying:relatives {name:"张闾瑛"}),
(zlx:relatives {name:"张闾珣"}),
(zlyv:relatives {name:"张闾玗"}),
(zlq:relatives {name:"张闾琪"}),
(zll:relatives {name:"张闾琳"}),
(zxj:relatives {name:"张学浚"}),
(zxm:relatives {name:"张学铭"}),
(zxs:relatives {name:"张学思"}),
(zxsh:relatives {name:"张学栓"}),
(zjx:relatives {name:"张居信"}),
(zzl:relatives {name:"张作霖"}),
(zxc:relatives {name:"张学曾"}),
(zxch:relatives {name:"张学成"})

图5 创建其他人物节点

由Neo4j 数据库中的关系型数据库创建的图形数据库模型,其中包含一些人物及其亲戚关系。每个节点 (人) 都包含一个名称属性,而每个边 (关系) 都包含一个属性,用于描述两个节点之间的关系。

在这个模型中,人物赵春桂、于凤至、谷瑞玉、赵一荻、张闾瑛、张闾珣、张闾玗、张闾琪、张闾琳、张学浚、张学铭、张学思、张学栓、张居信、张作霖、张学曾和张学成都有自己的亲戚关系。这些亲戚关系是通过边连接这些节点的,例如,赵春桂和张闾琳是亲戚关系,因为赵春桂是张闾琳的祖母。

创建张学良属性节点

create (sexm:property{property:"男"}),
(sexw:property{property:"女"}),
(alias:property{property:"双喜、小六子、张汉卿、张少帅"}),
(nationality:property{property:"中国"}),
(nation:property{property:"汉"}),
(Birthdate:property{property:"1901年6月3日(辛丑年)"}),
(dateOfDeath:property{property:"2001年10月14日(辛巳年)"}),(graduateInstitution:property{property:"东北陆军讲武堂"}),
(job:property{property:"军人"}),
(birthplace:property{property:"辽宁省鞍山市台安县"}),
(militaryRank:property{property:"国民党陆军一级上将"})

图6 创建属性节点

创建节点 (person) 节点表示人物。

给节点添加属性 (property),其中 sexm 表示节点为男性,sexw 表示节点为女性,alias 表示节点的别名,nationality 表示节点的国籍,nation 表示节点的民族,Birthdate 表示节点的生日,dateOfDeath 表示节点的死亡日期,graduateInstitution 表示节点的毕业院校,job 表示节点的职业,birthplace 表示节点的出生地,militaryRank 表示节点的军衔。

在节点上创建属性值 (value)。例如,在节点 nationality 上创建了一个属性值 "中国"。

创建关联 (relation)。例如,在节点 nationality 上创建了一个关联 "belongTo" 给节点 nation。

创建节点间的关系

//建立节点之间的关系
match(n:person),(sexm:property) where n.name="张学良" and sexm.property="男" create(n)-[r:sex]- >(sexm);

match(n:person),(alias:property) where n.name="张学良" and alias.property="双喜、小六子、张汉卿、张少帅" create(n)-[r:alias]- >(alias);

match(n:person),(nationality:property) where n.name="张学良" and nationality.property="中国" create(n)-[r:nationality]- >(nationality);

match(n:person),(nation:property) where n.name="张学良" and nation.property="汉" create(n)-[r:nation]->(nation);

match(n:person),(Birthdate:property) where n.name="张学良" and Birthdate.property="1901年6月3日(辛丑年)" create(n)-[r:Birthdate]->(Birthdate);

match(n:person),(dateOfDeath:property) where n.name="张学良" and dateOfDeath.property="2001年10月14日(辛巳年)" create(n)-[r:dateOfDeath]->(dateOfDeath);

match(n:person),(graduateInstitution:property) where n.name="张学良" and graduateInstitution.property="东北陆军讲武堂" create(n)-[r:graduateInstitution]->(graduateInstitution);

match(n:person),(job:property) where n.name="张学良" and job.property="军人" create(n)-[r:job]->(job);

match(n:person),(birthplace:property) where n.name="张学良" and birthplace.property="辽宁省鞍山市台安县" create(n)-[r:birthplace]->(birthplace);

match(n:person),(militaryRank:property) where n.name="张学良" and militaryRank.property="国民党陆军一级上将" create(n)-[r:militaryRank]->(militaryRank);

//张学良的亲属
match(n:person),(zcg:relatives) where n.name="张学良" and zcg.name="赵春桂" create(n)-[r:mother]- >(zcg);

match(n:person),(yfz:relatives) where n.name="张学良" and yfz.name="于凤至" create(n)-[r:ex_wife]- >(yfz);

match(n:person),(gry:relatives) where n.name="张学良" and gry.name="谷瑞玉" create(n)-[r:ex_wife]- >(gry);

match(n:person),(zyd:relatives) where n.name="张学良" and zyd.name="赵一荻" create(n)-[r:wife]- >(zyd);

match(n:person),(zly:relatives) where n.name="张学良" and zly.name="张闾瑛" create(n)-[r:daughter]- >(zly);

match(n:person),(zlx:relatives) where n.name="张学良" and zlx.name="张闾珣" create(n)-[r:son]- >(zlx);

match(n:person),(zlyv:relatives) where n.name="张学良" and zlyv.name="张闾玗" create(n)-[r:son]- >(zlyv);

match(n:person),(zlq:relatives) where n.name="张学良" and zlq.name="张闾琪" create(n)-[r:son]- >(zlq);

match(n:person),(zll:relatives) where n.name="张学良" and zll.name="张闾琳" create(n)-[r:son]- >(zll);

match(n:person),(zxj:relatives) where n.name="张学良" and zxj.name="张学浚" create(n)-[r:youngerBrother]- >(zxj);

match(n:person),(zxm:relatives) where n.name="张学良" and zxm.name="张学铭" create(n)-[r:youngerBrother]- >(zxm);

match(n:person),(zxs:relatives) where n.name="张学良" and zxs.name="张学思" create(n)-[r:youngerBrother]- >(zxs);

match(n:person),(zxsh:relatives) where n.name="张学良" and zxsh.name="张学栓" create(n)-[r:youngerBrother]- >(zxsh);

match(n:person),(zxc:relatives) where n.name="张学良" and zxc.name="张学曾" create(n)-[r:youngerBrother]- >(zxc);

match(n:person),(zjx:relatives) where n.name="张学良" and zjx.name="张居信" create(n)-[r:grandson]- >(zjx);

match(n:person),(zzl:relatives) where n.name="张学良" and zzl.name="张作霖" create(n)-[r:father]- >(zzl);

match(n:person),(zxch:relatives) where n.name="张学良" and zxch.name="张学成" create(n)-[r:cousin]- >(zxch);



match(zzl:relatives),(n:person) where zzl.name="张作霖" and n.name="张学良" create(zzl)-[r:son]- >(n);

match(zzl:relatives),(sexm:property) where zzl.name="张作霖" and sexm.property="男" create(zzl)-[r:sex]- >(sexm);

match(zzl:relatives),(nation:property) where zzl.name="张作霖" and nation.property="汉"  create(zzl)-[r:nation]- >(nation);

 

图7 最终结果

        以上就为创建neo4j知识图谱的基本应用,适合初学者使用。后续可爬取CSV文件直接导入关系与节点。

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

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

相关文章

4.1派生类的概念

:为什么使用继承 所谓继承就是从先辈处得到属性和行为特征。类的继承就是新的类从已有类那里得到已有特征。这样做的目的是:减少代码的重复。 派生类的声明 声明派生类的一般公式 : class 派生类名:[继承方式] 基类名 { 派生类新增的数据成…

Java并发基石_CAS原理实战02_CAS实现原理

文章目录什么是CAS?CAS的实现原理是什么?cmpxchg指令怎么保证多核心下的线程安全?什么是ABA问题?如何解决ABA问题呢?什么是CAS? CAS,全称CompareAndSwap,比较并替换。 CAS包含了三个…

MyBatis --- 缓存、逆向工程、分页插件

一、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1、…

MySQL高级第十二篇:数据库事物概述和隔离级别

MySQL高级第十二篇:数据库事物概述和隔离级别一、数据库事物概述1. SHOW ENGINES 查看存储引擎2. 事物ACID特性原子性(atomiity)一致性(consistency):隔离性(isolation)持久性&#…

使用java实现自动扫雷

写在前面 本项目已在github开源,链接https://github.com/QZero233/JavaAutoMinesweeper 本文的写作风格可能会有些奇怪,这是笔者的一次全新的尝试,后续会换回写blog的文风的 摘要 本文提出了一个全自动完成扫雷游戏的解决方案,…

【Kubernetes】 多云管理策略解析

文章目录Kubernetes 多云的实现1. 前言1.1 Kubernetes 多云的现实需求2. Kubernetes 多云的架构设计2.1 跨云 Kubernetes 的挑战2.1.1 不同云厂商的接口不兼容2.1.2 多云环境中的安全问题2.1.3 跨云环境中的网络问题2.2 Kubernetes 多云的架构设计2.2.1 统一网络管理2.2.2 使用…

新能源汽车高压配电管理(PDU/BDU)

一、概念与组成 PDU(Power Distribution Unit),即高压配电单元,功能是负责新能源车高压系统中的电源分配与管理,为整车提供充放电控制、高压部件上电控制、电路过载短路保护、高压采样、低压控制等功能,保护和监控高压系统的运行…

MacOS系统启动React前端项目时报错Error: EMFILE: too many open files, open解决方法

错误场景 最近在开发React的前端微应用,启动时模块构建报错Module build failed, Error: EMFILE: too many open files, 如下图所示: Error: EMFILE: too many open files的错误,经排查是因为单个微应用项目较大,发…

【Linux安装数据库】Ubuntu安装mysql并连接navicat

Linux系统部署Django项目 文章目录Linux系统部署Django项目一、mysql安装二、mysql配置文件三、新建数据库和用户四、nivacat链接mysql一、mysql安装 linux安装mysql数据库有很多教程,根据安装方式不同,相关的步骤也不同。可以参考:【Linux安…

前端基础(HTML、CSS、JS、jQuery)

文章目录一、HTML基础1.1 常用标签(表格、表单、按钮等)1.2 其他一些标签(书签、显示效果、缩写等)二、CSS基础2.1 CSS引入方式2.2 CSS选择器2.3 CSS常用属性三、JavaScript3.1 JS使用方式3.2 变量和数据类型3.3 函数、作用域、条…

Unity基础框架从0到1(五)延时任务调度模块

索引 这是Unity基础框架从0到1的第五篇文章,前面的文章和对应的视频我一起列到这里: 文章 Unity基础框架从0到1 开篇 Unity游戏框架从0到1 (二) 单例模块 Unity基础框架从0到1(三)高效的全局消息系统 Unity基础框架从0到1&a…

CentOS 7 DNS服务器架设

CentOS 7 DNS服务器部署 项目背景和要求 要保证即能够解析内网域名linuxidc.local的解析,又能解析互联网的域名。 主DNS服务器:ZZYH1.LINUXIDC.LOCAL 辅助DNS服务器:ZZYH2.LINUXIDC.LOCAL 包含以下域的信息: 1、linuxidc.lo…

mybatis多表联查(一对一、一对多/多对一、多对多)

mybatis多表联查(一对一、一对多/多对一、多对多) 在开发过程中单表查询往往不能满足需求分析的很多功能,对于比较复杂业务来说,关联的表有几个,甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务,就必须进…

Java 并发工具合集 JUC 大爆发!!!

并发工具类 通常我们所说的并发包也就是 java.util.concurrent (JUC),集中了 Java 并发的各种工具类, 合理地使用它们能帮忙我们快速地完成功能 。 1. CountDownLatch CountDownLatch 是一个同步计数器,初始化的时候 传入需要计数的线程等待数…

Monaco Editor编辑器教程(二七):集成多个GitLab编辑器颜色样式主题

前言 在开发编辑器时,未来满足开发者的审美需求,有时需要设计多套颜色主题,最基础的是黑色主题和白色主题。如果用户愿意出钱的话,可以加上一些其他花里胡哨的颜色主题,在vscode中是可以搜到。今天就来教大家一些,如何借助现成的资源来为自己的monaco编辑器增加丰富的颜…

JavaScript控制语句及搭建前端服务器

目录 一、for in 二、for of 三、try catch 四、搭建前端服务器 (1)安装nvm (2)检查npm (3)搭建前端服务器 一、for in 主要用来遍历对象 let father {name:张三, age:18, study:function(){}};f…

Linux常用的网络命令有哪些?快速入门!

在Linux系统中,有许多常用的网络命令可以用来进行网络配置和故障排除。这些命令可以帮助我们了解网络的状态和性能,并且可以快速诊断和解决网络问题。在本文中,我们将介绍一些常用的Linux网络命令,并提供一些案例来帮助您更好地理…

高数基础2

目录 函数的极限: 自变量趋向于有限值时函数的极限 左右极限 需要分左右极限的三种问题: 例题: 极限性质: 函数的保号性: 函数的保号性: 例题: 极限值与无穷小的关系 极限存在准则&#…

FRRoute 路由信息采集 + MPLS VPN隧道信息采集与识别

FRRoute 路由信息采集 MPLS VPN隧道信息采集与识别FRRoute数据库-表路由信息采集命令输出字段 -> 映射到 -> 数据库字段数据结构 算法show int brroute -nshow interfaces loMPLS VPN隧道信息采集与识别step 1 : 采集mpls邻居表step 2 : MPLS 隧道识别FRRoute 数据库-…

RK3568平台开发系列讲解(Linux系统篇)线程 pthread 详解

🚀返回专栏总目录 文章目录 一、POSIX 线程模型二、pthread_create()创建线程三、线程属性3.1、初始化线程对象属性3.2、销毁一个线程属性对象3.3、线程的分离状态3.4、线程的调度策略3.5、线程的优先级3.6、线程栈四、线程退出五、回收已终止线程的资源沉淀、分享、成长,让…