KG知识图谱 学习 Part3 - 知识图谱存储

主要是知识的存储和数据库的选型
其实这部分的内容我在学习的时候觉得挺枯燥的,其实主要用到的是Neo4j图数据库,也就是第3部分往后的内容,其他的感觉不是很重要


综述


1.知识存储模型

1.知识存储模型

  • 关系型数据库——适用于体量比较小的知识图谱的存储
  • 三元组——因语义网而产生的,适用于体量比较小的,网页的
  • 图数据库——体量比较大的知识图谱的存储

2.存储模型选择原则一

注:如果一个对象本身,没有研究它与其他对象之间的关系,那就没有必要进行图谱存储; 统计类的,常规需要去计算的内容没有必要存储在图谱中,也就是不需要基于知识存储的模型来进行存储;

3.1.关系型数据库:三元组表

S为对象,P为属性,O为取值

读取对象多个属性的时候,会有大量的自连接操作

3.2.关系型数据库:属性表

属性表的优点:RDF的灵活性;缺点:要查询一个人(属性未定时),需要遍历所有的表

3.3.关系型数据库:垂直分割

垂直分割的缺点:一个属性就需要一个数据表;删除一个对象需要遍历所有的表

以上三种传统型数据库存储知识图谱,小数量的情况下没有问题,但是数据量规模大就不适用了

4.RDF三元组

RDF三元组是基于XML进行描述的

5.图数据库



2.图数据库选型

1.RDF数据库排行

https://db-engines.com/en/ranking/rdf+store

MarkLogic商用,Jena是基于Java的开源框架

2.Jena:开源Java框架,本体处理工具

通常使用Protege和Jena相结合来处理本体对象;基于本体对象构建知识图谱时,使用Protege进行本体对象的设计,用Jena进行开发

3.Neo4j:嵌入式、基于磁盘、可视化的图数据库

4.Titan:分布式图形数据库

工业级的应用或者大量级数据的应用一般使用Titan

3.Neo4j开发环境

官网下载客户端,本地启动服务即可

Hello World

收藏中有Hello World示例

database和message为两个节点,r为关系

  • Graph

  • Table

  • Text

  • Code



4.Neo4j-CQL语法基础

1.概念


实例

同一个类型的节点的属性可以是不一样的

2.关键字词汇表

3.DDL-创建节点

4.DDL-创建关系



5.语法实践

1.调出CQL语法

:play cypher

2.创建

// 创建一个人的节点,对他的属性赋值
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })

最后加RETURN和不加会有显示的区别

3.查询

// 查询名字叫Emil的人
MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;

如果想创建唯一的节点对象

// Create unique property constraint
// Replace:
// 'LabelName' with node label
// 'propertyKey' with property that should be unique
CREATE CONSTRAINT ON (n:) ASSERT n. IS UNIQUE

4.创建多个节点

MATCH (ee:Person) WHERE ee.name = "Emil"
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)


6.案例操作

1.内置案例movie graph

2.开始示例

  • Movie Graph 如何系统性地创建图谱的
  • Northwind Graph 如何从其他形式的内容转换过来的

3.创建各个节点和关系

// 创建节点
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
// 创建关系
CREATE
(Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
(Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix)

4.1.查询

查询所得对象的属性在下面显示

4.2.查询



7.系统监控(暂时没有用到)


你可能感兴趣的:(KG知识图谱 学习 Part3 - 知识图谱存储)