本文主要介绍怎样借助Neo4j构建知识图谱,主要分为软件安装、参数配置、知识图谱定义、图谱展示、案例介绍等环节,整理最近的工作的同时也方便新手快速搭建目标知识图谱。
本节内容主要参考在Windows环境中安装Neo4j。
在安装neo4j之前,需要安装Java JRE,并配置Java开发环境,然后安装neo4j服务。
1. 安装Java JRE
Neo4j是基于Java运行环境的图形数据库,因此,必须向系统中安装JAVA SE(Standard Editon)的JRE。从Oracle官方网站下载 Java SE JRE,常见版本是JRE 8(本文使用,建议使用),后面更新的是JRE11和JRE14(最新,但是可能不全)。
说明:JDK和JRE是有区别的,JDK(Java Development Kit)是包括Java运行环境(JRE)和Java开发工具;而JRE(Java Runtime Environment)是运行Java程序时必须安装的环境。如果只是运行Java程序,那么只需要安装JRE即可;如果希望开发Java程序,那么必须安装JDK。(本文直接安装JDK即可)*
配置Java的环境变量,Windows系统有系统环境变量和用户环境变量,都配置,配置环境变量分两步进行:
第一步:新建JAVA_HOME变量,变量值填写jdk的安装目录,默认的安装目录是: C:\ProgramFiles\Java\jdk1.8.0_211. (本文JDK版本与下载链接略有不同,但是这两个版本都不影响后续的操作)
第二步:编辑Path变量,在Path变量值的最后输入:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 检查配置是否成功,运行cmd,输入java -version,如果显示java的版本信息,说明Java的安装和配置成功。
2.安装Neo4j
从Neo4j官网下载最新版本Neo4j 3.4 社区(Community)版本 “neo4j-community-3.4.5-windows.7z”,解压到指定目录,“D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows”。 Neo4j应用程序有如下主要的目录结构:
bin目录:用于存储Neo4j的可执行程序; conf目录:用于控制Neo4j启动的配置文件; data目录:用于存储核心数据库文件; plugins目录:用于存储Neo4j的插件;
创建Neo4j的环境变量 创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。
点击组合键:Windows+R,输入cmd,启动DOS命令行窗口,切换到主目录,以管理员身份运行命令提示符。
通过控制台启动Neo4j程序以管理员权限启用DOS命令行窗口,输入以下命令,通过控制台启用neo4j程序
neo4j.bat console如果看到以下消息,说明neo4j已经开始运行: 注意:如果这个环节报错,可能是之前开启neo4j,需要先运行:
neo4j stop 把Neo4j安装为服务安装和卸载服务(Windows Services):
bin\neo4j install-service bin\neo4j uninstall-service启动服务,停止服务,重启服务和查询服务的状态:
bin\neo4j start bin\neo4j stop bin\neo4j restart bin\neo4j statusNeo4j服务器具有一个集成的浏览器,在启动neo4j服务之后,可以使用neo4j集成的浏览器管理图数据库。
在一个运行neo4j服务器主机上访问 “http://localhost:7474/”,显示以下的界面(本文是设置好用户名密码之后的界面):默认的host是bolt://localhost:7687,默认的用户是neo4j,默认的密码是:neo4j,第一次成功connect到Neo4j服务器之后,需要重置密码。
需求分析:在小组实验中,我们需要对《毛选》中的几本书进行知识图谱结构化。已有的文本为《中国社会各阶级的分析》、《实践论》、《矛盾论》等内容,在前几周的讨论中已经对文本内容进行了简单的总结归纳,我们的近期目标是结合文本内容形成观点然后结构化。
这里的知识图谱可能并没有严格分类,里面的节点和关系并不是非常严格,在实际中可以严格定义,这样的后续调整中工作量会小一些。而本文主要考虑的是快速构建,姑且先简单定义。
知识图谱首要的是模式层的定义,也就是对知识图谱中类别和关系的定义,例如我们想把学生上课这个过程定义清楚,我们需要定义类<学生>、<导师>,关系为<指导>,模式定义为:导师—指导—>学生,实例为:王导师—指导—>jesse;李导师—指导—>Steven;……。模式只有一个,但是实例可以有多个。回归到本研究的需求,即把《毛选》中的内容进行知识图谱化。
第一步:定义模式层
这个步骤是知识图谱中最难一步,好的知识图谱一般需要专家智慧的参与,也就是由专家定义好知识图谱中的类与关系,在实际中,我们可能并不是专家,但是实现基本的知识图谱结构还是可以的。例如,构建一个人物知识图谱,那么类别可以定义为、、,关系可以定义为<属于>、<拥有>。对于书籍的话,类别可以简单定义为、,关系定义为<作者>。
第二步:建表填充数据
在模式层定义中,定义了几个类就对应着几个实体表,同理,定义了几个关系,也要有几个关系表,根据模式层定义三个表:peo.csv(实体表)、book.csv(实体表)、peo_book.csv(关系表)。 ***注意:***表的格式为csv,UTF-8,在windows中默认是ANSI,我一般将csv重命名为txt,然后用windows中自带的记事本打开,另存为的时候改成utf-8的格式,同时把后缀改成csv。此外,只要修改csv文件就得重新设置一下utf-8格式,不然导入neo4j中就会有乱码。
实体表头格式为:
*_id:ID(表示实例的ID,ID不能重复);name(表示知识图谱显示的节点,建议不超过4个字,不然在neo4j中容易盖住);:Lable(表示节点的类型,一般同一种Lable颜色一样)
关系表头格式: 如上表所示,关系表头::START_ID(表示实例的ID);:END_ID(表示指向的实例ID);:TYPE(表示关系的类型)。
注 意:以上的表头冒号要用英文;实体表的ID不能重复;关系表的每一行要唯一,不能出现重复的行,否者会报错。
第三步:配置文件与命令行编写
配置文件:Neo4j集成的浏览器会用默认的数据库,当我们需要自定义数据库时,要把配置文件中的数据库改过来。例如,在本例中,我们使用book.db,我们首先需要在conf文件夹下找到neo4j.conf文件,用notopad++打开,大概在第十行的位置去掉开始的#号,然后数据改成目标数据库名字,这个名字按需求改就好了,只要做到和后续命令行指定的名字一致就好。
命令行:完成上面的步骤后就需要写命令行导入数据库了,不过在这之前还需要把建好的csv表添加到neo4j软件的impot目录里,例如我的目录是:
D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data我的表建的比较多,在测试中,大家可以只建三个表。
命令行的格式是:
neo4j-admin import --mode=csv --database=book.db --nodes 实体表的绝对路径 --relationships 关系表的绝对路径本文的实体表有8个,关系表有7个,因此写了8个–nodes,7个–relationships。命令行还需注意的是–database参数要和在上述conf文件修改的一样,例如我们都是用book.db。
neo4j-admin import --mode=csv --database=book.db --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\yuzhouguan.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\thing.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\xianshiyiyi.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\tedian.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\peo.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\book.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\opinion.csv --nodes D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\jieji.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\peo_book.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\book_opinion.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\opinion_jieji.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\jieji_tedian.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\book_xianshiyiyi.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\xianshiyiyi_thing.csv --relationships D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\import\book_data\jieji_yuzhouguan.csv第四步:命令行配置
准备工作完成后就到了最后可视化过程了。
1、用管理员身份运行命令行;
2、切到neo4j软件的bin目录下,即:(D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\bin); 3、 输入neo4j start;
4、输入neo4j-admin import --mode=csv --database=book.db --nodes 实体表的绝对路径 --relationships 关系表的绝对路径,输入自己的csv的路径,如果已经存在会报错: 这时候我们可以将
D:\SoftWares\ProgramMingSoftWare\Neo4J\software\neo4j-community-3.4.5-windows\neo4j-community-3.4.5\data\databases里的book.db删除掉,如果删除不了,就现在命令行里执行命令"neo4j stop" 再次删除后就可以了,然后再执行导入节点命令:
neo4j-admin import --mode=csv --database=book.db --nodes 实体表的绝对路径 --relationships 关系表的绝对路径。
本文的是上面的一长串,这里就不再贴了,要是读者只有book.csv、peo.csv、peo_book.csv三个表就比较简单。
导入之后的显示: 这里表明导入之后有37个节点(点),75个关系(边),74个属性(也就是上述TYPE内容的数目)。
导入之后记得开启neo4j的服务,即命令"neo4j start"
至此就可以开始在浏览器中显示了!
第五步、浏览器显示
在浏览器中输入:“http://localhost:7474/browser/”,显示如下2. 节点大小颜色的调整
点击第一排的节点,然后在最底下一排更改颜色和大小,还可以在面板中随意拉动节点调整位置。
至此,整个知识图谱的构建的过程就完成了,本文在再附上几个其他形式的知识图谱以供参考。
1. 新冠疫情的知识图谱
这个知识图谱主要根据一份11页的各国对新冠的研究进展来的,涉及的实体有药物、组织、病毒等;关系为:研究、有作用等。
2. 股票公司知识图谱
这个主要参考"爬虫获取数据并利用neo4j展示同花顺数据",很遗憾原文链接已不可见。基本流程如下:
本文主要介绍了如何利用Neo4j平台构建一个目标知识图谱的过程,主要的难点在于理清楚实体和实体关系之间的联系,其他难点在于bug及时调整,例如一些细节的处理:CSV要UTF-8格式、删除数据库是要先neo4j stop。此外,本文还列出了用爬虫获取结构化数据并显示的案例(很遗憾原文链接失效),在实际中,人工构建数据表太费劲,因此,还是尽量用爬虫或者机器学习的方法处理数据,以便快速构建大规模节点的知识图谱!
知识图谱是个非常复杂的工程,学术上有命名实体识别、实体关系抽取等概念类的研究,也有构建各种领域知识图谱的研究,还有利用知识图谱应用的研究,例如问答系统、推荐系统。其中难点是如何从无结构化的文本中构建出目标的知识图谱,也就是我们提到的模式定义。
一般而言,如何定义良好的实体、关系、属性类别是第一步; 如何抽取出高质量的实例样本是第二步; 如何将知识图谱应用在实际任务中是第三步。
作为刚接触的小白,先从基本概念、基本操作开始!另外,本文撰写时间仓促,有些内容自己也没完全搞清楚,有错漏之处还望指正!