当前位置: 首页 > news >正文

使用 Neo4j 图数据库可视化(网络安全)知识图谱

目录

一、安装 Java 环境

1、下载 Java 包并解压到指定目录下

2、配置环境变量

a)添加系统变量 CLASS_PATH 和 JAVA_HOME

b)  在已有的系统变量 Path 中添加(新建)环境变量

3、测试 java 环境

二、安装 Neo4j-3.5.5

1、下载 neo4j 软件包并解压到指定目录下

2、配置环境变量

a)添加系统变量 NEO4J_HOME

b)  在已有的系统变量 Path 中添加(新建)环境变量

3、测试 neo4j 服务是否可以正常开启

4、访问 Neo4j 图数据库系统

三、使用 Neo4j 数据库并可视化(网络安全)知识图谱

1、使用示例数据库

2、生成我们自己的 CSV 数据,并为文件导入配置环境

a)构建并生成我们的数据(节点文件和边文件)

b)为文件的导入配置环境

3、使用 neo4j 可视化(网络安全)知识图谱

附录

一、Neo4j 简介及其数据结构

二、关系型数据库和非关系型数据库

1. 关系型数据库

2. 非关系型数据库


说明:本文前两节提到的 Java 和 neo4j 的安装包可以通过如下链接免费下载:

Neo4j可视化知识图谱所需的所有软件包-自然语言处理文档类资源-CSDN下载Neo4j可视化知识图谱所需的两个软件包:java.rar和neo4j-community-3更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_40506723/86754696


一、安装 Java 环境

1、下载 Java 包并解压到指定目录下

子目录如下图所示:


2、配置环境变量

a)添加系统变量 CLASS_PATH 和 JAVA_HOME


b)  在已有的系统变量 Path 中添加(新建)环境变量

根据自己的 jdk 所在目录添加,我的操作如下图所示: 


3、测试 java 环境

win + R  输入 “cmd”  回车,输入 java -version,如下图所示:

如果看到版本信息,说明环境配置成功。


二、安装 Neo4j-3.5.5

1、下载 neo4j 软件包并解压到指定目录下

子目录如图所示:


2、配置环境变量

a)添加系统变量 NEO4J_HOME


b)  在已有的系统变量 Path 中添加(新建)环境变量


3、测试 neo4j 服务是否可以正常开启

win + R  输入 “cmd”  回车,输入 neo4j.bat console,如下图所示则说明一路安装正确:

注意:此终端(服务)不要关闭,否则不能访问 Neo4j 图数据库系统


4、访问 Neo4j 图数据库系统

地址:http://localhost:7474/

访问后,显示以下界面,说明此小节以上工作全部成功完成:

当连接成功的同时,终端也发生变化:

 我们输入默认登录密码 neo4j ,点击 Connect,跳出更改密码的界面,如下图所示:

更改后,就成功进入主界面,如下图所示:


三、使用 Neo4j 数据库并可视化(网络安全)知识图谱

1、使用示例数据库

点击左侧边栏的小星星,再点击 Example Graph --> Movie Graph,界面如下:

点击右侧的执行按钮,显示以下界面:

明显这是一个电影相关的图数据库,我们使用给定的查询命令试一试:

点击执行,这样我们就图数据库中查询到我们想要的结果的可视化结果,如下图所示,我们也可以得到表或代码等形式的返回结果,大家可以自行尝试:

 其他命令大家可以自行尝试...


2、生成我们自己的 CSV 数据,并为文件导入配置环境

a)构建并生成我们的数据(节点文件和边文件)

需要两个文件,一个是 entity.csv(数据格式:e1,兔子,my_entity)(节点文件),一个是 triples.csv(数据格式:e1,e2,爱吃)(边文件,因为边不能脱离实体存在,所以这个文件中既有实体,也有关系),可以用下面这段代码,替换数据集(训练集、验证集和测试集;它们的数据格式:兔子        胡萝卜        爱吃 )及上述两个目标文件的路径,用下面代码可以直接生成:

import csv

# 把每一行的实体加入列表进行编号(e1,e2,e3...),并存入字典
entity_dic = {}
# 为实体计数, 从 0 开始
ent_count = 0


def read_dataset(ds_path):
    """
    输入:数据集的路径
    返回:数据集中的数据构成的列表
    """
    ds_list = []
    with open(ds_path, 'r', encoding='UTF-8') as f:
        reader = csv.reader(f)
        lines = [row for row in reader]
        for item in lines:
            temp = []
            item = item[0].split("\t")
            temp.append(item[0])
            temp.append(item[1])
            temp.append(item[2])
            ds_list.append(temp)
        f.close()
    return ds_list


# 训练集、验证集和测试集的数据格式:兔子 胡萝卜 爱吃
train_data = read_dataset('D:/TSEE/datasets/neo4j_data/train.txt')
valid_data = read_dataset('D:/TSEE/datasets/neo4j_data/valid.txt')
test_data = read_dataset('D:/TSEE/datasets/neo4j_data/test.txt')
# 叠加三个数据集,用于后边对所有实体的编号
all_data = train_data + valid_data + test_data


def generate_entity_csv():
    """
    输出:entity.csv文件(即实体与编号的对应文件)
    数据格式:e1,兔子,my_entity
    e2,胡萝卜,my_entity
    """
    # 使用global关键字,在执行函数时,可以更改全局变量,防止再次创建同名的局部变量
    global ent_count
    for item in all_data:
        if item[0] not in entity_dic.keys():
            entity_dic[item[0]] = "e" + str(ent_count)
            ent_count += 1
        if item[1] not in entity_dic.keys():
            entity_dic[item[1]] = "e" + str(ent_count)
            ent_count += 1
    with open('D:/TSEE/datasets/neo4j_data/entity.csv', 'w', encoding='utf-8') as o:
        # print(item_dic)
        o.write("entity:ID"+",")
        o.write("name"+",")
        o.write(":LABEL"+"\n")
        for item in entity_dic:
            # print(item)
            o.write(entity_dic[item] + ",")
            o.write(item + ",")
            o.write("my_entity" + "\n")
        o.close()


def generate_triples_csv():
    """
    输出:triples.csv文件(即所有三元组数据)
    数据格式:e1,e2,爱吃
    """
    triples = []
    for item in all_data:
        temp_list = []
        temp_list.append(entity_dic[item[0]])
        temp_list.append(entity_dic[item[1]])
        temp_list.append(item[2])
        triples.append(temp_list)
    with open("D:/TSEE/datasets/neo4j_data/triples.csv", 'w', encoding='utf-8') as o:
        o.write(":START_ID" + ",")
        o.write(":END_ID" + ",")
        o.write(":TYPE" + "\n")
        for item in triples:
            o.write(str(item[0]) + ",")
            o.write(str(item[1]) + ",")
            o.write(str(item[2]) + "\n")
        o.close()


generate_entity_csv()
generate_triples_csv()

最终两个文件(数据的部分截图)如下图所示,其中第一行边的类型千万别忘了加(不管你是用脚本构造或者是手动创建)。如果忘加,Neo4j 不能有效识别文件,就会直接报错:

entity.csv 文件(节点文件):

triples.csv 文件(边文件):


b)为文件的导入配置环境

1)把如下图所示的默认的数据库,也就是 graph.db 目录给删掉:

 2)打开如下我展示的目录下的文件:

如下图所示,把 dbms.active_database=graph.db 这一行的 “#” 去掉;

并将 graph.db 更为任意名,我起的名字是 zax.db(不更改也可以,但上一步的 graph.db 目录删掉,要不然影响要导入自己数据所执行的命令的运行):


3、使用 neo4j 可视化(网络安全)知识图谱

关闭 neo4j 的运行窗口,再在 D:\neo4j-community-3.5.5\bin 下右键打开终端,执行以下命令:

.\neo4j-import.bat --into D:\\neo4j-community-3.5.5\\data\\databases\\zax.db --id-type string --nodes D:\\neo4j-community-3.5.5\\entity.csv --relationships D:\\neo4j-community-3.5.5\\triples.csv

如图所示: 

可以看到我们的两个 csv 文件已经成功导入,我们再重新打开 neo4j 服务,如下:

进入界面,点击左侧边栏的数据库图标,可以看到,我们已经成功可视化(网安)知识图谱:

大家也可以根据自己的数据来可视化知识图谱...


附录

一、Neo4j 简介及其数据结构

Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。简单来说Neo4j是一个开源的基于Java开发,运行于JVM之上。

在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过 Relationships 所定义的关系相连起来,形成关系型网络结构。


二、关系型数据库和非关系型数据库

1. 关系型数据库

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。主流的关系型数据库有Oracle、DB2、MySQL、SQL Server等。推荐了解java中级程序员学习线路图。

2. 非关系型数据库

非关系型数据库,也称为NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。常见的非关系型数据库按照分类有:

键值(Key-Value): Redis、Memcached、Oracle BDB

列存储数据库:Cassandra、HBase、 Riak

文档型数据库:MongoDB、SequoiaDB

图形数据库:Neo4J、JanusGraph、TigerGraph


其中上述一、二节摘自:

什么是Neo4j?如何通过Neo4j构建《人民的名义》的关系图谱?


因此我们也可以在 Neo4J 中使用 NoSQL 命令创建结点和关系,直接可视化知识图谱:

NoSQL 简介 | 菜鸟教程NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd’s提出的关系模型的论文 'A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。通..https://www.runoob.com/mongodb/nosql.html当然,这也只是在数据量较小的情况下才可行,如果构建大型知识图谱,还得像我们之前那样,通过导入的方式来可视化知识图谱。


补充:WARN  The client is unauthorized due to authentication failure. 错误的解决办法:

描述:当你导入其他数据库(如A.db)后,再导入另一个数据库(如B.db),并可视化后,你更改B 的图谱上的节点颜色或大小改不了,会在命令窗口报这个错,也就是授权问题。

我的理解:A 数据库在可视化图谱后,你的操作会保存在一个配置文件中(具体是哪个文件没必要管)。但当你可视化 B 数据库时,就会导入 A 的配置,当你针对 B 的图谱修改时,就对这个配置文件的内容作出了修改,但这没有经过 A 的允许 ,就会报错

解决办法:到 D:\neo4j-community-3.5.5\conf 目录下修改 neo4j.conf 文件 

去掉 下面这行 的 “ # ”,保证不进行任何授权验证

相关文章:

  • STM32新建工程
  • MABSA(Multimodal Aspect-Based Sentiment Analysis)2022ACL 预训练
  • MySQL中in(‘1,2,3‘)只取第一个id为1对应的数据
  • 专注于自媒体短视频领域四年后的运营问题汇总-第一集
  • 网络安全系列-三十四: 基于网络流量的设备识别
  • 第3章 栈和队列 编程题
  • Redis面试
  • python正则表达式(三)
  • 雷达信号处理算法:静态杂波滤除(附MATLAB代码和数据)
  • Doing It in User Space
  • Vue2:网易云播放音乐并实现同步一次显示一行歌词
  • 这四个问题处理好,无人机集群编队研究会有新突破
  • 【JavaSE】之JVM入门(上)
  • 《计算机视觉基础知识蓝皮书》第7篇 模型优化方法及思路
  • java毕业设计牙科诊所管理系统Mybatis+系统+数据库+调试部署
  • Angular 4.x 动态创建组件
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Java|序列化异常StreamCorruptedException的解决方法
  • Java应用性能调优
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux快速复制或删除大量小文件
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • tensorflow学习笔记3——MNIST应用篇
  • 程序员最讨厌的9句话,你可有补充?
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 读懂package.json -- 依赖管理
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 配置 PM2 实现代码自动发布
  •  一套莫尔斯电报听写、翻译系统
  • 湖北分布式智能数据采集方法有哪些?
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #DBA杂记1
  • #define 用法
  • #pragma once与条件编译
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)(1.13) SiK无线电高级配置(五)
  • (11)MATLAB PCA+SVM 人脸识别
  • (13):Silverlight 2 数据与通信之WebRequest
  • (23)Linux的软硬连接
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 中什么样的类是可使用 await 异步等待的?
  • /etc/fstab 只读无法修改的解决办法
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @test注解_Spring 自定义注解你了解过吗?
  • @WebServiceClient注解,wsdlLocation 可配置
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [1204 寻找子串位置] 解题报告
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured