知识图谱Neo4j安装到实践全过程

news2024/11/20 2:19:16

在这里插入图片描述

前言: Hello大家好,我是Dream。 在本次实战中,我们将一起完成知识图谱Neo4j安装到实践全过程,探索其中的关系和属性。知识图谱是一种以三元组形式存储的数据结构,由实体、关系和属性组成,能够帮助我们更好地理解和分析复杂的知识关系,一起来看看吧~

一、语义网络写入图形数据库

实验目的
(1)了解向数据库中写入语义网络的方法。
(2)简单使用Neo4j呈现语义网络。
实验要求
本次实验后,能理解语义网络的 节点(Node)和关系(Relationship) 在数据库中是如何呈现的。
实验原理
将一个事实用语义网络表示,首先要找出它的节点,再描述它与其他节点的关系,最后用Python 写入数据库中。

实验准备

1.安装JDK

下载neo4j之前,首先要安装JDK。

1.1 下载

官网下载链接:https://www.oracle.com/java/technologies/javase-downloads.html
JDK版本的选择一定要恰当,建议jdk1.8 比较稳定 版本太高或者太低都可能导致后续的neo4j无法使用。
以下是安装路径:
在这里插入图片描述

1.2 配置环境变量

安装好JDK之后就要开始配置环境变量了。 配置环境变量的步骤如下:
在开始处直接搜索环境变量,打开后会出现如下界面,然后点击右下角处环境变量:

在这里插入图片描述

在下方的系统变量区域,新建环境变量,命名为JAVA_HOME,变量值设置为刚才JAVA的安装路径,我这里是D:\大机场\java\java1。
在这里插入图片描述
编辑系统变量区的Path,点击新建,然后输入 %JAVA_HOME%\bin
在这里插入图片描述
打开命令提示符CMD(WIN+R,输入cmd),输入 java -version,若提示Java的版本信息,则证明环境变量配置成功:
在这里插入图片描述

2. 安装neo4j

安装好JDK之后,就可以安装neo4j了。

2.1 下载

官方下载链接:https://neo4j.com/download-center/#community
在这里,我下载的是neo4j社区版5.8.0。
在这里插入图片描述
下载好之后,直接解压到合适的路径就可以了,无需安装:
在这里插入图片描述

2.2 配置环境变量

接下来要配置环境变量了,与刚才JAVA环境变量的配置方法极为相似,因此在这里只进行简单描述。
在系统变量区域,新建环境变量,命名为NEO4J_HOME,变量值设置为刚才neo4j的安装路径,我这里是D:\大机场\neo4j\neo4j1。

在这里插入图片描述
编辑系统变量区的Path,点击新建,然后输入 %NEO4J_HOME%\bin,最后,点击确定进行保存就可以了。
在这里插入图片描述

3. 启动neo4j

以管理员身份运行cmd。
在这里插入图片描述

然后,在命令行处输入neo4j.bat console
在这里插入图片描述
如出现此界面,则证明neo4j启动成功。
在浏览器中输入界面中给出的网址http://localhost:7474/,则会显示如下界面。
在这里插入图片描述
默认的用户名和密码均为neo4j
至此,neo4j安装完毕~

实验步骤

1.从neomodel包导入类。

from neomodel import StructuredNode, StringProperty, RelationshipTo, RelationshipFrom, config

2.连接Neo4j图形数据库。

config.DATABASE URL= 'bolt://neo4i:neo4ialocalhost:7687'

即将要构造的事实为“树和草都是植物。树和草都有叶和根。水早是早,且生长在水中。果树是树,日会结里、烈树是里树的一种,它会结梨”。

3.编写节点类。

植物、树、草、叶、根、水草、水、果树、结果、梨树、结架赵些节点英继承自StructuredNode类,包括节点属性和连接关系。

class Plant(StructuredNode):
    name = StringProperty(unique_index=True)
    has1 = RelationshipFrom("Tree", "AKO")
    has2 = RelationshipFrom('Grass', 'AKO')
    have1 =RelationshipTo('Leaf', 'Have')
    have2 = RelationshipTo('Root', 'Have')
class Tree(StructuredNode):
    name = StringProperty(unique_index=True)
    ako = RelationshipTo('Plant', 'AKO')
    have = RelationshipFrom('Fruiter', 'AKO')
class Grass(StructuredNode):
    name = StringProperty(unique_index=True)
    ako = RelationshipTo('Plant' , 'AKO')
    has = RelationshipFrom('Waterweeds', 'AKO')
class Leaf(StructuredNode):
    name = StringProperty(unique_index=True)
    have = RelationshipFrom('Plant', 'Have')
class Root(StructuredNode):
    name = StringProperty(unique_index=True)
    have = RelationshipFrom('Plant', 'Have')
class Waterweeds(StructuredNode):
    name = StringProperty(unique_index=True)
    ako = RelationshipTo('Grass' , 'AKO')
    live = RelationshipTo('Water', 'Live')
class Water(StructuredNode):
    name = StringProperty(unique_index=True)
    have = RelationshipFrom('Waterweeds', 'Live')

class Fruiter(StructuredNode):
    name = StringProperty(unique_index=True)
    ako = RelationshipTo('Tree', 'AKO')
    can = RelationshipTo('Bear', 'Can')
    have = RelationshipFrom('Pear','AKO')

class Bear(StructuredNode):
    name = StringProperty(unique_index=True)
    have = RelationshipFrom('Fruiter' , 'Can')

class Pear(StructuredNode):
    name = StringProperty(unique_index = True)
    ako = RelationshipTo('Fruiter', 'AKO')
    can = RelationshipTo('BearPear', 'Can')

class BearPear(StructuredNode):
    name = StringProperty(unique_index=True)
    have = RelationshipFrom('Pear', 'Can')



plant =Plant(name="植物").save()
tree = Tree(name="树").save()
grass = Grass(name="草" ).save()
leaf = Leaf(name= "叶" ).save()
root = Ro

4.根据类生成实例。

leaf = Leaf(name= "叶" ).save()
root = Root(name="根").save()
waterweeds = Waterweeds(name="水草").save()
water = Water(name="水" ).save()
fruiter = Fruiter(name="果树").save()
bear = Bear(name="结果").save()
pear = Pear(name="梨树").save()
bearpear = BearPear(name="结梨").save()

5.创建实例之间的连接关系。

pear.ako.connect(fruiter)
pear.can.connect(bearpear)
fruiter.ako.connect(tree)
fruiter.can.connect(bear)
waterweeds.ako.connect(grass)
waterweeds.live.connect(water)
plant.have1.connect(leaf)
plant.have2.connect(root)
tree.ako.connect(plant)
grass.ako.connect(plant)

实验结果

在这里插入图片描述

二、水浒传知识图谱构建

启动neo4j

以管理员身份运行cmd,
在命令行处输入neo4j.bat console
在这里插入图片描述

如出现此界面,则neo4j启动成功
在浏览器中输入界面中给出的网址http://localhost:7474/,即可打开neo4j的可视化界面。

打开jupyter notebook

1.进入 jupyter notebook:

在命令行中输入"jupyter notebook"命令并回车后,会自动跳转到jupyter notebook的工作区页面。这样,我们就可以开始进行知识图谱的构建了。
在这里插入图片描述

2.数据集下载

数据集:triples.csv
链接:https://pan.baidu.com/s/19vrJ1vkEf2lgchBkF8OALQ?pwd=gn8o
提取码:gn8o
数据说明:构建知识图谱需要把数据处理成三元组<实体1,关系,实体2>或<实体,属性,属性值>的形式,每个三元组(triples)可看成是由subject(主语)、predicate(谓语)和object(宾语)组成。知识图谱中的三元组主要包含两种,一种是关系三元组relation triples,另一种是属性三元组attribute triples,relation triples中的subject和object均是实体,而predicate通常被称为关系。attribute triples中的subject是实体,而object则是取值(value),该值通常是一个数值或者文本,其predicate通常称为属性。
数据又分为非结构化数据(例如:文本、文档、图片等),半结构化文本(如:日志文件、XML文档、JSON文档等)和结构化数据,本实验使用的数据集是结构化的三元组数据,无需做额外处理,可以直接使用。

3.安装第三方库

为了能够顺利进行知识图谱构建,我们需要安装一些必要的第三方库:

  • 安装py2neo库:用于与neo4j图数据库进行交互。
  • 安装pyahocorasick,numpy和pandas库:用于处理数据集和进行相关操作。

!pip install py2neo pyahocorasick numpy pandas
在这里插入图片描述

!pip install pytest-cov==2. 0
在这里插入图片描述

!pip install pytest-filter-subpackage==0. 1
在这里插入图片描述

!pip install typed ast== 1. 4. 0
在这里插入图片描述

4.导包

在jupyter notebook中,我们需要导入一些必要的库来进行知识图谱的构建。在代码开始的地方加入以下代码即可:

import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher

5.连接图数据库

为了能够与neo4j图数据库进行交互,我们需要先连接到该数据库。接下来,我们可以使用以下代码来连接图数据库:
auth的值分别为neo4j登录时的账号和密码,一定要使用安装时更改之后的密码,否则无法连接到图数据库。

g=Graph("neo4j://localhost:7687", auth=("neo4j", "mima"))

6.图谱构建

import csv
with open(r"D:\PycharmProjects\知识表示\triples.csv",'r', encoding='utf-8') as f:
    reader=csv.reader(f)
    for item in reader:
        if reader.line_num==1:
            continue
        print('当前行数:',reader.line_num,"当前内容:",item)
        start_node=Node("Person" ,name=item[0])
        end_node=Node("Person", name=item[1])
        relation=Relationship(start_node,item[3],end_node)
        g.merge(start_node,"Person", "name")
        g. merge(end_node,"Person","name")
        g.merge(relation,"Person","name")

这段代码将逐行读取数据集文件,并将每行数据转换为三元组的形式进行图谱构建。
运行代码后,可以在控制台上看到当前行数和对应的内容。

结果显示:

结果显示:
运行成功后,我们可以在neo4j的可视化界面中查看已经构建好的知识图谱。
在这里插入图片描述

图谱可视化结果

我们可以在neo4j的可视化界面中,通过查询相关节点和关系,来查看已经构建好的水浒传知识图谱的可视化结果。
在界面中输入相应的Cypher查询语句即可。

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

西部AI小镇-构建自主虚拟世界

背景 未来曜文有接入市场上所有面向chatGPT开发的应用&#xff0c;例如开源聊天组件&#xff0c;西部小镇等 内容介绍 生成代理起床&#xff0c;做早餐&#xff0c;然后去上班&#xff1b;艺术家作画&#xff0c;作家写作&#xff1b;他们形成意见、互相关注并发起对话&…

window如何实时刷新日志文件

1 安装windows git 下载地址&#xff1a;Git - Downloading Package (git-scm.com) 2 打开git bash 输入tail.exe -f 日志文件路径

yo!这里是Linux权限入门理解

目录 前言 权限概念 权限管理 分类 1.用户 2.文件&&目录 表示 设置 1.chmod指令 2.chown指令 3.chgrp指令 4.umask指令 粘滞位 后记 前言 对于Linux基本指令&#xff0c;基本上就是操作文件或者目录&#xff0c;但是&#xff0c;是谁可以操作文件或目录&…

8个月打磨,打造出的全能工具箱,让你事半功倍!

这款工具叫即时工具&#xff0c;目前有网页端和客户端可以下载至本地离线使用&#xff0c;区别在于客户端采用原生适配性能更好&#xff0c;网页端需要上传至服务器或浏览器内部处理。 体验地址&#xff1a;点击直达 一、为什么会开发这个工具 综合性和多功能性&#xff1a;…

MySQL数据库 索引、事务、储存引擎

索引 索引的概念 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址&#xff08;类似于C语言的链表通过指针指向数据记录的内存地址&#xff09;。 使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找…

harbor升级后镜像项目访问无权限问题

一、问题背景 将环境中现运行的harbor版本升级到2.6.2版本&#xff0c;相关同事升级完&#xff0c;发现有部分镜像项目点进去报无权限问题&#xff0c;镜像项目无法使用&#xff0c;但是也有部分项目是可以正常提供使用的。 二、问题处理过程 1、根据报错反馈没权限&#xff…

【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息

【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息 文章目录 一、前言二、安装和基本使用三、实际业务中的用法四、完整示例五、总结 一、前言 在这篇博客中&#xff0c;我将为你介绍一个非常实用的 Flutter 插件&#xff1a;device_info_plus。这个插件…

基于SSM+vue框架的校园代购服务订单管理系统源码和论文

基于SSMvue框架的校园代购服务订单管理系统源码和论文070 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 在新发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&am…

调查问卷平台哪家好?

在如今的数字化时代&#xff0c;问卷调查已成为企业和组织了解顾客需求、员工满意度以及市场趋势的重要工具。然而&#xff0c;在众多的在线调查工具中&#xff0c;为什么我们要选择Zoho Survey&#xff1f; 一、强大的功能和灵活的问卷设计 1、多种问卷题型&#xff1a; Zo…

浪潮信息 KeyarchOS 助力 IT 企业安全管理业务完成 CentOS 迁移替换 | 龙蜥案例

前言 安全稳定是操作系统永恒的追求&#xff0c;某知名 IT 企业的安全管理业务服务于公司多个业务&#xff0c;涵盖代码安全管理平台、数字签名平台以及内部使用的多个研发平台&#xff0c;其底层运行着 CentOS 7 操作系统。随着 CentOS 各操作系统版本陆续停服&#xff0c;将…

掌握指针和数组:经典笔试题攻略(万字详解)

&#x1f341;博客主页&#xff1a;江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言刷题专栏 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa;我的社区&#xff1a;GeekHub &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文章目录 前…

最新docker多系统安装技术

在Ubuntu操作系统中安装Docker 在Ubuntu操作系统中安装Docker的步骤如下。 1&#xff0e;卸载旧版本Docker 卸载旧版本Docker的命令如下&#xff1a; $ sudo apt-get remove docker docker-engine docker.io 2&#xff0e;使用脚本自动安装 在测试或开发环境中&#xff0…

聊聊敏捷实践的“个体与交互”

这是鼎叔的第七十二篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。 敏捷宣言有重要的一句话&#xff1a;个体和交互胜过过程和工具。作为工程师&#xff0c;…

【实训项目】“享学”APP设计

1.设计摘要 随着高等教育普及化程度提高&#xff0c;国家对大学生的要求也越来越高&#xff0c;在学习过程中总会遇到各种各样的阻碍&#xff0c;很多学生苦于找不到资料&#xff0c;苦于找不到适合自己的资料&#xff0c;苦于找不到能让自己提高的资料。不善交际&#xff0c;…

基于Java+SpringBoot+Vue前后端分离校园失物招领系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

简单js逆向案例(1)

文章目录 声明模块分析完整代码python实现js扣代码实现 结尾 声明 本文章中所有内容仅供学习交流&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 模块 pip install Py…

Properties 中文配置乱码问题解决

file->setting->editor-> file encoding -> 选择Default encoding for properties files-> ISO-8859-1

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4

一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…

HTML的label标签有什么用?

当你想要将表单元素&#xff08;如输入框、复选框、单选按钮等&#xff09;与其描述文本关联起来&#xff0c;以便提供更好的用户界面和可访问性时&#xff0c;就可以使用HTML中的<label>标签。<label>标签用于为表单元素提供标签或标识&#xff0c;使用户能够更清…

ssm端游游戏账号销售管理系统源码和论文

ssm端游游戏账号销售管理系统源码和论文069 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面…