当前位置: 首页 > article >正文

我的知识图谱和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:domain 和 rdfs:range:用于指定属性的应用范围。rdfs:domain指定了属性的主体应该属于哪个类,而rdfs:range则规定了属性的客体应该是什么类型的资源。

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

  • 定义类 Person 和 Activity
    • <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语句中,且别名可以随意变,也可以没有,只是在同一语句中唯一表示该节点)
花括号内是该节点的属性

创建关系

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

match是匹配

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

查询

有的
MATCH (n) return (n);
询所有节点的数量
MATCH (n) return count(n);
询所有的Person节点
MATCH (n:Person) return (n);
询名字为Alice的Person节点
MATCH (n:Person{name:'Alice'}) return (n)
MATCH (n:Person{name:'Alice'}) RETURN (n.age)
查询Alice与Bob的关系(没有指定边的类型)
MATCH (a:Person{name:“Alice"}) -[r]-> (b:Person{name:"Tom"}) return type(r);

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

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

删除

移除属性

MATCH (n:Person{name:'Alice'}) REMOVE (n.age)

删除节点

MATCH (n:Person{name:'Alice'}) DELETE n

删除边 

MATCH ()-[r:KNOWS]->() DELETE r

更改

更改属性

MATCH (n:Person {name: 'Alice'}) SET n.age = 31

新增属性

MATCH (n:Person {name: 'Alice'}) SET n.gender='女'

Py2neo

连接数据库

from py2neo import Graph

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

创建节点

graph.run("CREATE (n:Person {name: $name, age: $age})", name="Alice", age=30)

创建关系

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

查询

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

更新

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

删除

graph.run("MATCH (n:Person {name: $name}) DETACH DELETE n", name="Alice")


http://www.kler.cn/a/421463.html

相关文章:

  • Python的秘密基地--[章节2]Python核心数据结构
  • Navicat连接SQL Server及SpringBoot连接SQL Server(jtds)
  • Rust学习笔记_12——闭包
  • 基于Vue实现的移动端手机商城项目 电商购物网站 成品源码
  • 开源ISP介绍(1)——开源ISP的Vivado框架搭建
  • 使用CertD全自动申请和部署SSL证书至服务器
  • AI×5G 市场前瞻及应用现状
  • 深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
  • win10-Docker打不开this can prevent Docker from starting. Use at your own risk.
  • 【C++】LeetCode:LCR 022. 环形链表 II
  • 数字图像处理(13):图像裁剪
  • 银河麒麟V10-SP1设置redis开机自启
  • Web安全基础实践
  • 论文阅读:Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris
  • 【docker】Overlay网络
  • 【分页查询】.NET开源 ORM 框架 SqlSugar 系列
  • ceph的用户管理和cephx认证
  • 代理动态代理
  • Web开发基础学习——HTML, CSS, JavaScript 的区别和联系
  • Java 整合图片处理相关一套:传输、保存、重命名、删除、AI图片文字识别、图片映射、vue3裁剪、设置黑白色、设置负片、提高照片品质
  • 【版本控制】SVN安装到使用一条路讲解
  • 全球【风电叶片专用环氧树脂】市场集中度较高,环氧树脂主要产地在中国、欧洲和美国
  • PyTorch 2.5.1: Bugs修复版发布
  • 论文阅读——量子退火Experimental signature of programmable quantum annealing
  • 常见的数据结构---队列、树与堆的深入剖析
  • 宝塔 8888端口访问被拒绝 腾讯云