我的知识图谱和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")
相关推荐
两个人的幸福online32 分钟前
记录一次 用php 调用ai用stream返回
开发语言·php
漂流瓶6666661 小时前
Scala的模式匹配变量类型
开发语言·后端·scala
夏天吃哈密瓜1 小时前
Scala中的正则表达式01
大数据·开发语言·后端·正则表达式·scala
2401_833788051 小时前
Scala的模式匹配(2)
java·开发语言
Lbs_gemini06031 小时前
C++研发笔记14——C语言程序设计初阶学习笔记12
c语言·开发语言·c++·笔记·学习
MC何失眠2 小时前
vulnhub靶场【哈利波特】三部曲之Fawkes
网络·python·学习·网络安全
ac-er88882 小时前
GD库如何根据颜色生成纯色背景图
开发语言·php
被制作时长两年半的个人练习生3 小时前
【pytorch】pytorch的缓存策略——计算机分层理论的另一大例证
人工智能·pytorch·python
悠悠龙龙3 小时前
框架模块说明 #05 权限管理_03
java·开发语言·spring
卖个几把萌3 小时前
【06】Selenium+Python 定位动态ID
python·selenium·测试工具