【图数据库实践教程】Ubuntu22.04-Neo4j中文版安装及导入owl文件(通用教程)

news2024/11/26 8:19:06

文章目录

    • 0. 环境准备
        • 0.1 静态配置IP:192.168.1.54,及网卡类型:NAT模式
        • 0.2 激活root用户:
        • 0.3 更改apt国内镜像源(下载快)
        • 0.4 关闭相关防火墙等保证网络顺畅
    • 1. 相关软件安装
        • 1.1 安装好服务器内的相关软件
        • 1.2 然后在压缩包目录下解压:
        • 1.3 配置环境变量
        • 1.4 确保JDK环境
    • 2. Neo4j的配置和使用
        • 2.1 修改neo4j配置文件
        • 启动或重启neo4j
        • 2.2 查看是否配置成功
    • 3. 将owl转换为rdf方可使用
        • 3.1 安装rdf2rdf
        • 3.2 解决办法实操
    • 4. Neo4j browser的使用
        • 4.1 导入转换后的rdf
        • 4.2 导入后的数据调整
        • 4.3 使用py2neo进一步对数据进行清洗
    • 5. 最终效果图

Ubuntu 22.04.2 LTS
如果你已经上手了服务器,你可以直接跳过第0步,第0步是为了有些从零开始的伙伴,对服务器的基础配置。

0. 环境准备

0.1 静态配置IP:192.168.1.54,及网卡类型:NAT模式

$ cat /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      dhcp4: no
      addresses: [192.168.1.54/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [114.114.114.114, 8.8.8.8]

0.2 激活root用户:

sudo passwd root

完成输入用户密码相关步骤,即可被激活。

0.3 更改apt国内镜像源(下载快)

# 备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

# 打开 /etc/apt/sources.list 文件(vim也行)
sudo nano /etc/apt/sources.list

# 在编辑器中,将原来的软件源列表注释掉,然后添加新的国内软件源
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

保存文件退出后,重新运行以下命令以更新软件包列表:

sudo apt-get update

0.4 关闭相关防火墙等保证网络顺畅

关闭防火墙:

使用以下命令停止防火墙服务:sudo systemctl stop ufw
禁用防火墙服务开机自启动:sudo systemctl disable ufw

禁用AppArmor:

sudo systemctl stop apparmor
sudo systemctl disable apparmor

1. 相关软件安装

1.1 安装好服务器内的相关软件

neo4j中文版的安装链接

中文版官方文档

下载neosemantics链接
注意一下:(下载的neosemantics版本必须和你的neo4j版本相匹配)可以和我一样的版本。

安装好后:
在这里插入图片描述
通过Xftp 7将软件传入服务器里:
关于那个.jar包你可以等解压后再用xtfp传,也可以一次性传过去,待会解压后,在服务器里用mv命令将.jar包传到plugins目录下
在这里插入图片描述

1.2 然后在压缩包目录下解压:

tar -zxvf /home/jiang/neo4j-chs-community-4.4.18-unix.tar.gz

成功查看:

root@jiangda:~$ ls
neo4j-chs-community-4.4.18-unix  neo4j-chs-community-4.4.18-unix.tar.gz
root@jiangda:~$ pwd
/home/jiang

root@jiangda:~$ cd neo4j-chs-community-4.4.18-unix/plugins/
root@jiangda:~/neo4j-chs-community-4.4.18-unix/plugins$ ls
apoc-4.4.0.7-all.jar  neosemantics-4.4.0.1.jar  README.txt  rs-4.0.0.jar  rs-license.Trial.20231231.txt 

注意这里我顺便对neosemantics-4.4.0.1.jar进行了权限管理(为了实验一路畅通):

chmod 777 neosemantics-4.4.0.1.jar
chmod root:root neosemantics-4.4.0.1.jar

在这里插入图片描述

1.3 配置环境变量

vim ~/.bashrc

然后在文件末尾添加:(路径根据自己的进行修改)

export NEO4J_HOME=/home/jiang/neo4j-chs-community-4.4.18-unix
export PATH=$PATH:$NEO4J_HOME/bin

保存退出后
重载配置:

source ~/.bashrc

1.4 确保JDK环境

在Ubuntu上安装OpenJDK 11:

sudo apt update
sudo apt install openjdk-11-jdk

验证JDK是否正确安装:

java -version

设置JAVA_HOME环境变量:
查找JDK的安装路径:

sudo update-alternatives --config javac

#我得到的是
root@jiangda:/home/jiang# sudo update-alternatives --config javac
There is only one alternative in link group javac (providing /usr/bin/javac): /usr/lib/jvm/java-11-openjdk-amd64/bin/javac
Nothing to configure.

把 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac截取出来

sudo nano /etc/environment

(请注意,您可以使用任何其他文本编辑器代替nano)
在打开的文件中,添加以下代码行,并将其粘贴刚刚复制的JDK路径:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/javac"

等号右边即你刚刚截取的路径。

保存并关闭文件。
生效:

source /etc/environment

测试是否正确设置:

root@jiangda:/home/jiang# echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64/bin/javac

2. Neo4j的配置和使用

2.1 修改neo4j配置文件

conf/neo4j.conf就是专门配置neo4j的文件,包括网络,插件,存储等配置。

root@jiangda:~# cd /home/jiang/neo4j-chs-community-4.4.18-unix/conf/

vim neo4j.conf 

在末行加入允许插件启动:

dbms.unmanaged_extension_classes=semantics.extension=/rdf

如果你后面发现并没有导入成功,则可能是java环境或者配置文件问题。
我个人也出现了类似的问题,接下来我贴一下我对配置文件关于插件修改了的部分:
在这里插入图片描述
在这里插入图片描述
根据自身问题做出以上修改:

dbms.directories.data=/home/jiang/neo4j-chs-community-4.4.18-unix/data
dbms.directories.plugins=/home/jiang/neo4j-chs-community-4.4.18-unix/plugins
dbms.directories.logs=/home/jiang/neo4j-chs-community-4.4.18-unix/logs
dbms.directories.lib=/home/jiang/neo4j-chs-community-4.4.18-unix/lib
dbms.directories.run=/home/jiang/neo4j-chs-community-4.4.18-unix/run
dbms.directories.licenses=/home/jiang/neo4j-chs-community-4.4.18-unix/licenses
dbms.directories.transaction.logs.root=/home/jiang/neo4j-chs-community-4.4.18-unix/data/transactions
dbms.connectors.default_listen_address=192.168.1.54

dbms.connectors.default_advertised_address=192.168.1.54

启动或重启neo4j

配置完后保存退出并重启neo4j:

root@jiangda:/home/jiang/neo4j-chs-community-4.4.18-unix/conf# neo4j restart
Stopping Neo4j....... stopped.
Directories in use:
home:         /home/jiang/neo4j-chs-community-4.4.18-unix
config:       /home/jiang/neo4j-chs-community-4.4.18-unix/conf
logs:         /home/jiang/neo4j-chs-community-4.4.18-unix/logs
plugins:      /home/jiang/neo4j-chs-community-4.4.18-unix/plugins
import:       /home/jiang/neo4j-chs-community-4.4.18-unix/import
data:         /home/jiang/neo4j-chs-community-4.4.18-unix/data
certificates: /home/jiang/neo4j-chs-community-4.4.18-unix/certificates
licenses:     /home/jiang/neo4j-chs-community-4.4.18-unix/licenses
run:          /home/jiang/neo4j-chs-community-4.4.18-unix/run
Starting Neo4j.
Started neo4j (pid:7618). It is available at http://localhost:7474
There may be a short delay until the server is ready.

2.2 查看是否配置成功

好的,一切顺利,打开浏览器,默认端口为7474
输入url:http://192.168.1.54:7474
请添加图片描述
账号密码都是默认neo4j
根据提示的步骤完成

进来后在顶端窗口输入
输入以下命令可查看所有导入的功能

call dbms.procedures()

查看是否有n10s.开头的安装包,有的话就成功了
在这里插入图片描述
没有的话说明你的配置文件有问题,或者版本不对,没关系,再试一下。

3. 将owl转换为rdf方可使用

在protege中做到owl文件,我们需要转换为rdf格式后,才可在neo4j browser导入并操作。因为需要对java版本的变动,我这里不赘述,
这里可以看我好朋友的文章,写的很详细
https://zhuanlan.zhihu.com/p/622406724
我可以大概给个步骤,即将owl --> rdf

3.1 安装rdf2rdf

rdf2rdf这个插件可以把owl直接转为rdf文件,需要有java环境,下载后可以直接用
下载链接:
https://sourceforge.net/projects/rdf2rdf/

下载完成后,把这个插件和你的owl文件放在同一个文件夹下(只是为了方便不写绝对路径而已),执行如下命令:(假设我需要转换的是wj.owl文件,下载的插件为rdf2rdf-1.0.2-2.3.1.jar)

java -jar rdf2rdf-1.0.2-2.3.1.jar jd.owl jd.rdf

这样你就得到了一个关于你的知识图谱的rdf文件。

这个插件不支持高版本的java JDK,只支持JDK8!

因此需要自己找一个java8的环境后才能把自己的owl文件转换为rdf格式,否则有如下报错,转换后的文件内容也是空的

JDK不匹配报的错:
在这里插入图片描述

3.2 解决办法实操

因为系统之前有java11的环境,于是直接先卸掉java11和对应的包

# 在Terminal下输入以下命令来删除OpenJDK包
sudo apt-get purge openjdk*
# 然后卸载 OpenJDK 相关包
sudo apt-get purge icedtea-* openjdk-*
# 检查所有 OpenJDK包是否都已卸载完毕:
dpkg --list | grep -i jdk

一般apt安装的话,环境变量也不需要动

如果发现还是没有卸干净或者别的问题,可以回头检查一下你的bashrc文件里的环境变量配置

接下来是安装java8:

sudo apt-get install openjdk-8-jdk

安装好后可以通过java -version查看对应的版本是否正确

想要换回来JDK11的话再次卸掉重装吧,反正操作也不多,类似这样:

sudo apt-get install openjdk-11-jdk-headless

4. Neo4j browser的使用

4.1 导入转换后的rdf

在窗口中依次输入:
在这里插入图片描述
一步一步地执行下面命令,自己改一下路径:

// 图初始化,这一步必须有,没有就导不进去
all n10s.graphconfig.init(); 

// 这一步可能也要,如果报错了的话也不用担心直接执行下一步
CREATE CONSTRAINT n10s_unique_uri ON (r:Resource) ASSERT r.uri IS UNIQUE; 

 // 导入数据
call n10s.rdf.import.fetch( "file:home/jiang/neo4j-chs-community-4.4.18-unix/jd.rdf", "RDF/XML");

4.2 导入后的数据调整

导入数据后我们可以发现,很多数据类似长成了这样:
显示的节点名称是uri

无论是哪个节点或者关系,属性名称前面多了一个ns0__字符串,看着很不顺心

解决方法,使用cypher语法,举个例子:

例如把uri前面的链接去掉:

MATCH (n)
SET n.uri = REPLACE(n.uri, "http://www.semanticweb.org/86137/ontologies/2023/3/untitled-ontology-6#", '')
RETURN n

运行完后,效果很棒:
请添加图片描述

4.3 使用py2neo进一步对数据进行清洗

cypher写法非常不熟悉,就用自己熟悉的python连接图数据库来修改吧。
打开Pycharm,安装相关库:

pip install py2neo neo4j-driver

安装好后,依次运行程序进行清洗(大佬的代码):

代码及说明:
1.可替换刚刚的cypher语句,即一样的功效

"""
@date: 2023/4/25
@file: py2neo-test
@author: Jiangda
@desc: test

"""

from py2neo import Graph, NodeMatcher

# 连接到数据库
sever = "http://192.168.1.54:7474"  # 你的网址
graph = Graph(sever, user="neo4j", password="jd123456")

# 创建 NodeMatcher 实例
matcher = NodeMatcher(graph)
nodes = matcher.match()

# 遍历属性查找符合条件的并修改
for node in nodes:
    for key in list(node.keys()):
        if key.startswith('ns0__'):
            new_key = key[len("ns0__"):]
            node[new_key] = node[key]
            del node[key]
    graph.push(node)

2.匹配的关系名称中不能有中文的特殊字符,需要为英文,不然就需要你进行手动的异常处理一下。

"""
@date: 2023/4/25
@file: py2neo-test
@author: Jiangda
@desc: test

"""

from py2neo import Graph, NodeMatcher

# 连接到数据库
sever = "http://192.168.1.54:7474"  # 你的网址
graph = Graph(sever, user="neo4j", password="jd123456")

# 查询所有关系类型
relationship_types_query = "CALL db.relationshipTypes() YIELD relationshipType RETURN relationshipType"
relationship_types = graph.run(relationship_types_query).to_data_frame()

# 遍历所有关系类型,去掉 'ns0' 前缀并更新关系名称
for index, row in relationship_types.iterrows():
    old_type = row['relationshipType']
    if old_type.startswith("ns0__"):
        new_type = old_type[len("ns0__"):].replace("“","").replace("”","")
        update_query = f"""
        MATCH (a)-[r:{old_type}]->(b)
        CREATE (a)-[r_new:{new_type}]->(b)
        SET r_new = r
        WITH r
        DELETE r
        """
        graph.run(update_query)

3.节点属性中还是包含ns0,例如上图的“ns0__法师”,他们其实不是属于节点的属性而是属于标签(label)

"""
@date: 2023/4/25
@file: py2neo-test
@author: Jiangda
@desc: test

"""

from py2neo import Graph, NodeMatcher

# 连接到数据库
sever = "http://192.168.1.54:7474"  # 你的网址
graph = Graph(sever, user="neo4j", password="jd123456")

# 查询所有节点及其标签
query = "MATCH (n) RETURN n"
result = graph.run(query)

# 遍历所有节点
for record in result:
    node = record["n"]
    labels = node.labels

    # 删除所有标签中的ns0__字符
    for label in labels:
        if "ns0__" in label:
            print(label)
            new_label=label.replace("ns0__", "")
            node.add_label(new_label)
            node.remove_label(label)
    graph.push(node)

    # 删除所有标签中的owl__字符
    for label in labels:
        if "owl__" in label:
            print(label)
            new_label=label.replace("owl__", "")
            node.add_label(new_label)
            node.remove_label(label)
    graph.push(node)

前提是运行都没出错:
在这里插入图片描述

5. 最终效果图

请添加图片描述
请添加图片描述
得到了大佬的夸赞,非常开心,向他请教了很多!

在这里插入图片描述

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

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

相关文章

FL Studio2023中文版数字音频工作站(DAW)软件

FL Studio21水果软件能支持制作各种音乐类型,除了最擅长的电子音乐,还可以任意创作流行音乐、古典音乐、民族音乐、乡村音乐、爵士乐等等,没有音乐类型的限制,让你的音乐突破想象力的限制。 FL Studio 2023中文版是数字音频工作站…

LINUX的系统管理与维护命令

文章目录 一、LINUX的系统管理与维护命令总结 一、LINUX的系统管理与维护命令 - Linux ls命令:显示指定工作目录下的内容 Linux pwd命令:显示当前工作目录 Linux cd命令:切换工作目录 Linux date命令:显示或设置系统时间 Linux su命令:切换用户 Linux clear命令:清除屏幕 Li…

5种简单快速的方法解除PDF文件密码保护

PDF 文件已经成为了我们日常工作、学习中广泛使用的文档格式之一。为了对重要的 PDF 文件进行保护,我们有时需要添加密码保护功能来防止未授权访问或修改。但是,如果您的 PDF 文件已经有了密码保护,而您需要快速访问和编辑它们,那…

机器人工程师与孔乙己文学

本文内容严格按创作模板发布: 孔乙已是鲁迅笔下人物,穷困流倒还穿着象征读书人的长衫,迁腐、麻木。最近,大家自我调佩是“当代孔乙己”,学历成为思想负担,找工作时高不成低不就。你可以从以下几个角度说说…

static_cast、dynamic_cast和reinterpret_cast区别和联系

其实网上相关的资料不少,但是能够说清楚明白这个问题的也不多。 于是,我尝试着问了一下AI,感觉回答还可以,但是需要更多的资料验证。 让我们先看看AI是怎么回答这个问题的。 static_cast、dynamic_cast和reinterpret_cast都是C中…

“SCSA-T学习导图+”系列:路由技术之OSPF入门

本期引言: 路由技术是网络环境中,为不同的节点传输数据提供传输路径的技术,企业网络的拓扑一般会比较复杂,不同的部门或者总部和分支可能处于不同的网段中,此时就需要使用路由协议来连接不同的网段,实现数…

Parker机电产品(运动控制/伺服电机/直线电机)在FPD行业应用

Parker新控制器-PAC PAC集高级逻辑控制,多轴运动,信号处理和webpublished可视化功能。 采用工业主流的EtherCAT运动控制协议,I/O扩展和第三方设备链接,结合应用开发软件PARKERAutomation Manager , PAC能为OEM需要的…

微信仿真平台的设计和实现(设计+源码)_kaic

摘要 现如今,科技的发展带动着环保方式的更新,Internet是一个不断的开展和不停的扩充数据潮流,有了它,我们可以快速、容易地在世界的任何角落进行沟通,获取更多的信息与资料。Internet可以提供大量信息资源和文案数据库…

临近五一,游玩地点想好了吗,Python帮你查找旅游景点的详细数据

前言 好不容易没有了疫情,三年整整三年,都要把我憋死了,想到去年暑假的时候,准备去厦门,攻略做好了,厦门疫情来了,想着转去济南也是这样,去三亚,结果收到好几万人都被留…

5G网络切片路由选择策略介绍

终端保存的NSSP(Network Slice Selection Policy)策略来源于网络侧。 NSSP规则是将应用程序匹配到S-NSSAI(Single network slice selection assistance information),并将应用程序绑定到现有PDU会话或发起新的PDU会话。 NSSP功能 NSSP的作用就是为应用程序选择S-NSSAI和…

HashMap如何解决哈希冲突

HashMap如何解决哈希冲突 Hash算法和Hash表Hash冲突解决哈希冲突的方法开放地址法链式寻址法再hash法建立公共溢出区 Hash算法和Hash表 Hash算法就是把任意长度的输入通过散列算法编程固定长度的输出。这个输出结果就是一个散列值。 Hash表又称为“散列表”,它是通…

LVS负载均衡群集部署——DR直接路由

目录 一、LVS-DR模式二、LVS-DR模式的特点三、LVS-DR中的ARP问题 二、LVS负载均衡群集-DR模式部署1.配置nfs共享(192.168.154.10)2.部署第一台nginx服务(192.168.154.11)3.部署第二台nginx服务(192.168.154.12&#xf…

React入门学习

参考资料:https://bright-boy.gitee.io/technical-notes/#/react/React%E5%85%A5%E9%97%A8 https://github.com/xzlaptt/React react学习01: https://docs.qq.com/doc/DSG1jdUJtQ3FYR1V1 react学习02: https://docs.qq.com/doc/DSGhGZk9PUm1KVldv React简介 框架定…

滚动数组-动态规划之-不同路径 II_20230421

DP动态规划之-滚动数组 前言 在学习 不同路径II 的动态规划过程中,从介绍资料中了解到 滚动数组可以进一步降低动态规划解空间的复杂度,更高效利用计算机的储存空间。动态规划中的滚动数组究竟能发挥哪些作用,在常规的动态规划中&#xff0…

SpringBoot+Vue 前后端分离 微服务项目 打包部署全流程(原始部署/宝塔部署)

前端打包部署 前端项目为vue项目,使用vue admin template作为后台管理模板进行开发。 前端打包 了解开发环境、生产环境,修改生产环境的配置 在开发的时候,往往使用本地电脑进行开发。但是项目上线的时候,需要部署到云服务器中…

基于二阶锥规划(SOCP)松弛和线性离流的配电网规划(DNP)方法示例(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 配电网最优潮流 Optimal Power Flow, OPF) 问题是指在满足一定约束条件的情况下,通过控制配电网中的可控变量&…

内网Nexus代理docker-ce(yum) 源私有仓库 + 内网设备配置(centos)

配置docker-ce源 这里也是以阿里云的docker-ce源为例。 源地址为:https://mirrors.aliyun.com/docker-ce/linux/centos 1、在nexus上配置代理 Nexus上创建Blob Stores 创建Repositories 点击设置 - -> Repositories -- > Create repository --> yum(p…

分布式消息队列Kafka(二)- 生产者

1.生产者消息发送流程 (1)消息发送原理 ​ 在消息发送的过程中,涉及到了两个线程——main线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator,Sender 线程不断…

刘浩:当谈到RTO < 8s时,OceanBase究竟在说什么?

本文为 OceanBase 高级技术专家刘浩在第一届 OceanBase 开发者大会带来的分享。欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 3 月 25 日,第一届 OceanBase 开发者大会在北京举行,OceanBase 高级技术专家刘浩为大家带来了…

VuePress打包后没有样式或者没有图片或者js加载失败

原因是没有部署到服务器上!!! 这可能是我们打包后的东西 直接点击index.html 变成这样了!!什么样式都没有了,怎么办那? 很简单,找个服务器部署以下就什么都有了!&…