自然语言学习20-Neo4j构建知识图谱

安装

  • bin 目录:用于存储 Neo4j 的可执行程序;
  • conf 目录:用于控制 Neo4j 启动的配置文件;
  • data 目录:用于存储核心数据库文件;
  • plugins 目录:用于存储 Neo4j 的插件。

cmd切换目录至安装路径

安装命令

bin\neo4j install-service

启动服务、停止服务、重启服务和查询服务的状态

bin\neo4j start
bin\neo4j stop
bin\neo4j restart
bin\neo4j status

Neo4j 的配置文档存储在 conf 目录下,Neo4j 通过配置文件 neo4j.conf 控制服务器的工作。默认情况下,不需要进行任意配置,就可以启动服务器。

Neo4j 服务器具有一个集成的浏览器,在一个运行的服务器实例上访问: http://localhost:7474/,打开浏览器,显示启动页面

默认的 Host 是 bolt://localhost:7687,默认的用户是 neo4j,其默认的密码是 neo4j,第一次成功登录到 Neo4j 服务器之后,需要重置密码。访问 Graph Database 需要输入身份验证,Host 是 Bolt 协议标识的主机。

登录界面

在 Neo4j 浏览器中创建节点和关系

使用 Cypher 命令,在浏览器中通过 Neo4j 创建两个节点和两个关系。

在 $ 命令行中,编写 Cypher 脚本代码,点击 Play 按钮完成创建

CREATE (n:Person { name: 'Andres', title: 'Developer' }) return n;

作用是创建一个 Person,幷包含属性名字和职称。

下面这条语句也创建了一个 Person 对象,属性中只是名字和职称不一样。

CREATE (n:Person { name: 'Vic', title: 'Developer' }) return n;

通过下面两行命令进行两个 Person 的关系匹配

match(n:Person{name:"Vic"}),(m:Person{name:"Andres"}) create (n)-[r:Friend]->(m) return r;
match(n:Person{name:"Andres"}),(m:Person{name:"Vic"}) create (n)-[r:Friend]->(m) return r;

 

在创建完两个节点和关系之后,查看数据库中的图形:

 

Py2neo 库完成对 Neo4j 的操作

安装 Py2neo

pip install py2neo

图关系构建

from py2neo.data import Node, Relationship
a = Node("Person", name="Alice")
b = Node("Person", name="Bob")
ab = Relationship(a, "KNOWS", b)

首先引入 Node 和 Relationship 对象,紧接着,创建 a 和 b 节点对象,最后一行匹配 a 和 b 之间的工作雇佣关系

通过 print 打印出 ab 的内容

print(ab)

用 Neo4j 构建一个简单的农业知识图谱

基于 Neo4j 来创建知识图谱的过程:

  • 环境准备
  • 语料准备
  • 语料加载
  • 知识图谱查询展示

语料是已经处理好的数据,包含6个 csv 文件,文件内容和描述如下。

  • attributes.csv:文件大小 2M,内容是通过互动百科页面得到的部分实体的属性,包含字段:Entity、AttributeName、Attribute,分别表示实体、属性名称、属性值。文件前5行结构如下:
Entity,AttributeName,Attribute
密度板,别名,纤维板
葡萄蔓枯病,主要为害部位,枝蔓
坎德拉,性别,男
坎德拉,国籍,法国
坎德拉,场上位置,后卫
  • hudong_pedia.csv:文件大小 94.6M,内容是已经爬好的农业实体的百科页面的结构化数据,包含字段:title、url、image、openTypeList、detail、baseInfoKeyList、baseInfoValueList,分别表示名称、百科 URL 地址、图片、分类类型、详情、关键字、依据来源。文件前2行结构如下:
"title","url","image","openTypeList","detail","baseInfoKeyList","baseInfoValueList"
"菊糖","http://www.baike.com/wiki/菊糖","http://a0.att.hudong.com/72/85/20200000013920144736851207227_s.jpg","健康科学##分子生物学##化学品##有机物##科学##自然科学##药品##药学名词##药物中文名称列表","[药理作用] 诊断试剂 人体内不含菊糖,静注后,不被机体分解、结合、利用和破坏,经肾小球滤过,通过测定血中和尿中的菊糖含量,可以准确计算肾小球的滤过率。菊糖广泛存在于植物组织中,约有3.6万种植物中含有菊糖,尤其是菊芋、菊苣块根中含有丰富的菊糖[6,8]。菊芋(Jerusalem artichoke)又名洋姜,多年生草本植物,在我国栽种广泛,其适应性广、耐贫瘠、产量高、易种植,一般亩产菊芋块茎为2 000~4 000 kg,菊芋块茎除水分外,还含有15%~20%的菊糖,是加工生产菊糖及其制品的良好原料。","中文名:","菊糖"
"密度板","http://www.baike.com/wiki/密度板","http://a0.att.hudong.com/64/31/20200000013920144728317993941_s.jpg","居家##巧克力包装##应用科学##建筑材料##珠宝盒##礼品盒##科学##糖果盒##红酒盒##装修##装饰材料##隔断##首饰盒","密度板(英文:Medium Density Fiberboard (MDF))也称纤维板,是以木质纤维或其他植物纤维为原料,施加脲醛树脂或其他适用的胶粘剂制成的人造板材。按其密度的不同,分为高密度板、中密度板、低密度板。密度板由于质软耐冲击,也容易再加工,在国外是制作家私的一种良好材料,但由于国家关于高密度板的标准比国际标准低数倍,所以,密度板在中国的使用质量还有待提高。","中文名:##全称:##别名:##主要材料:##分类:##优点:","密度板##中密度板纤维板##纤维板##以木质纤维或其他植物纤维##高密度板、中密度板、低密度板##表面光滑平整、材质细密性能稳定"
  • hudong_pedia2.csv:文件大小 41M,内容结构和 hudong_pedia.csv 文件保持一致,只是增加数据量,作为 hudong_pedia.csv 数据的补充。

  • new_node.csv:文件大小 2.28M,内容是节点名称和标签,包含字段:title、lable,分别表示节点名称、标签,文件前5行结构如下:

title,lable
药物治疗,newNode
膳食纤维,newNode
Boven Merwede,newNode
亚美尼亚苏维埃百科全书,newNode
  • wikidata_relation.csv:文件大小 1.83M,内容是实体和关系,包含字段 HudongItem1、relation、HudongItem2,分别表示实体1、关系、实体2,文件前5行结构如下:
HudongItem1,relation,HudongItem2
菊糖,instance of,化合物
菊糖,instance of,多糖
瓦尔,instance of,河流
菊糖,subclass of,食物
瓦尔,origin of the watercourse,莱茵河
  • wikidata_relation2.csv:大小 7.18M,内容结构和 wikidata_relation.csv 一致,作为 wikidata_relation.csv 数据的补充。

语料加载

将csv文件放入 D:\neo4j-community-3.5.12\import 路径下

利用 Neo4j 的 LOAD CSV WITH HEADERS FROM... 功能进行加载

// 将hudong_pedia.csv 导入
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia.csv" AS line  
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

将 hudong_pedia.csv 和 hudong_pedia2.csv 导入 Neo4j 作为结点,然后对 titile 属性添加 UNIQUE(唯一约束/索引)。

// 新增了hudong_pedia2.csv
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia2.csv" AS line  
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})

// 创建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE

 

error

Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316))
"ASSERT c.title IS UNIQUE"

Neo.ClientError.Statement.SyntaxError: Invalid input 'N': expected 'p/P' (line 6, column 20 (offset: 316)) "ASSERT c.title IS UNIQUE" ^

 

 

 

 

z

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章