我的知识图谱和Neo4j数据库的使用

知识图谱概述

知识图谱的含义

RDF与RDFS

RDF(Resource Description Framework,资源描述框架)和RDFS(RDF Schema,RDF模式)是构建知识图谱的基础技术之一。它们提供了一种标准的方式来表示信息,使得数据可以在Web上被共享和重用。下面是关于这两个概念的详细介绍:

RDF (Resource Description Framework)

定义: RDF是一种用于表达Web资源之间关系的数据模型。它允许你以一种结构化的方式描述事物及其之间的关联。RDF的基本单位是三元组(Triple),每个三元组由三个部分组成:

  • 主体(Subject):描述的是哪个资源。
  • 谓词(Predicate):描述了主体与客体之间的关系。
  • 客体(Object):是主体通过谓词所关联到的值或另一个资源。

示例: 假设我们想要表达"爱丽丝喜欢阅读",可以使用以下RDF三元组来表示:

  • 主体: 爱丽丝
  • 谓词: 喜欢
  • 客体: 阅读

在实际应用中,这些元素通常会用URI(统一资源标识符)来表示,以便在全球范围内唯一识别。例如:

  • 主体: http://example.org/people/Alice
  • 谓词: http://example.org/vocab/likes
  • 客体: http://example.org/activities/reading

这个三元组可以写作:<http://example.org/people/Alice> <http://example.org/vocab/likes> <http://example.org/activities/reading>

RDFS (RDF Schema)

定义: RDFS是RDF的一个扩展,它提供了一组预定义的类(Class)和属性(Property),用来对RDF中的资源进行分类和描述。RDFS使得我们可以定义资源的类型、属性的范围和域等,从而增加了语义信息。

主要概念:

  • rdfs:Class :表示一个类,所有实例都属于这个类。比如,Person 可以是一个类,所有的人都可以是它的实例。
  • rdfs:subClassOf:表示类之间的继承关系。如果A rdfs:subClassOf B,则A的所有实例也都是B的实例。
  • rdf:type:用于说明某个资源是某个类的实例。例如,Alice rdf:type Person 表示Alice是Person类的一个实例。
  • rdfs:Property:表示一个属性,即三元组中的谓词。
  • rdfs:domainrdfs:range :用于指定属性的应用范围。rdfs:domain指定了属性的主体应该属于哪个类,而rdfs:range则规定了属性的客体应该是什么类型的资源。

示例: 如果我们想定义一个"人"(Person)类,并且说每个人都喜欢某种活动(Activity),可以用RDFS这样描述:

  • 定义类 PersonActivity
    • <http://example.org/classes/Person> rdf:type rdfs:Class .
    • <http://example.org/classes/Activity> rdf:type rdfs:Class .
  • 定义属性 likes,其主体是 Person 类的成员,客体是 Activity 类的成员:
    • <http://example.org/vocab/likes> rdf:type rdf:Property ;
    • rdfs:domain <http://example.org/classes/Person> ;
    • rdfs:range <http://example.org/classes/Activity> .

然后,当我们说"爱丽丝喜欢阅读"时,就可以利用这些定义来更具体地描述这条信息,同时也为机器提供了更多理解上下文的能力。

通过RDF和RDFS,我们可以创建丰富的语义网络,使计算机能够更好地理解和处理人类知识。这对于构建智能应用、搜索引擎优化、数据集成等有着重要的意义。

RDF图模型

属性图模型

知识抽取

知识抽取的挑战:知识的不明确性,知识的不完备性,知识的不一致性

Cypher语言

创建节点

复制代码
CREATE (p1:Person {name: 'Alice', age: 30})
CREATE (p2:Person {name: 'Tom', age: 30})

create 表示新建
小括号内是节点信息,节点的标签 label 是Person ,p1,p2 是其别名 (别名只用在Cypher语句中,且别名可以随意变,也可以没有,只是在同一语句中唯一表示该节点)
花括号内是该节点的属性

创建关系

Go 复制代码
MATCH (p1:Person{name:"Alice"}), (p2:Person{name:"Tom"})
CREATE (p1)-[:Friend{name:"小学朋友"}]->(p2);

match是匹配

Friend是关系类型,花括号里面是关系边的属性

查询

查 询 所 有的 节 点

Go 复制代码
MATCH (n) return (n);

查 询所有节点的数量

Go 复制代码
MATCH (n) return count(n);

查 询所有的Person节点

Go 复制代码
MATCH (n:Person) return (n);

查 询名字为Alice的Person节点

Go 复制代码
MATCH (n:Person{name:'Alice'}) return (n)
Go 复制代码
MATCH (n:Person{name:'Alice'}) RETURN (n.age)

查询Alice与Bob的关系(没有指定边的类型)

Go 复制代码
MATCH (a:Person{name:"Alice"}) -[r]-> (b:Person{name:"Tom"}) return type(r);

查询Alice的朋友关系(指定边的类型)

Go 复制代码
MATCH (a:Person{name:'Alice'}) -[r:Friend]-> (b:Person) return (b);

删除

移除属性

Go 复制代码
MATCH (n:Person{name:'Alice'}) REMOVE (n.age)

删除节点

Go 复制代码
MATCH (n:Person{name:'Alice'}) DELETE n

删除边

Go 复制代码
MATCH ()-[r:KNOWS]->() DELETE r

更改

更改属性

Go 复制代码
MATCH (n:Person {name: 'Alice'}) SET n.age = 31

新增属性

Go 复制代码
MATCH (n:Person {name: 'Alice'}) SET n.gender='女'

Py2neo

连接数据库

python 复制代码
from py2neo import Graph

graph = Graph("http://localhost:7474", auth=("neo4j", "password"))

创建节点

python 复制代码
graph.run("CREATE (n:Person {name: $name, age: $age})", name="Alice", age=30)

创建关系

python 复制代码
graph.run("""
  MATCH (a:Person {name: $name1}), (b:Person {name: $name2})
  CREATE (a)-[:KNOWS]->(b)
""", name1="Alice", name2="Bob")

查询

python 复制代码
results = graph.run("MATCH (n:Person) WHERE n.name = $name RETURN n.age", name="Alice").data()
print(results)

更新

python 复制代码
graph.run("MATCH (n:Person {name: $name}) SET n.age = $age", name="Alice", age=31)

删除

python 复制代码
graph.run("MATCH (n:Person {name: $name}) DETACH DELETE n", name="Alice")
相关推荐
databook4 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar5 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780516 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_6 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机12 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机13 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机13 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机13 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i14 小时前
drf初步梳理
python·django
每日AI新事件14 小时前
python的异步函数
python