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

我的知识图谱和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 Graphgraph = 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.lryc.cn/news/497791.html

相关文章:

  • ASP.NET CORE API 解决跨域问题
  • sram测试注意讨论
  • Mybatis 支持延迟加载的详细内容
  • word文档使用技巧笔记
  • 使用docker-compose部署搜索引擎ElasticSearch6.8.10
  • bugku-web-login2
  • 【 AI技术赋能有限元分析与材料科学应用实践】Neo-Hookean 材料与深度学习结合的有限元分析
  • StarRocks关于ConcurrentModificationException 问题的解决
  • 网络安全防护指南:筑牢网络安全防线(5/10)
  • 替代FTP最佳跨网文件传输解决方案——FileLink
  • Cesium在vue2中的引入和注意事项
  • CentOS 9 配置静态IP
  • 深入解析 Webhook:从原理到实践的全面指南
  • 基于springboot+vue实现的创新创业学分管理系统 (源码+L文+ppt)4-111
  • 如何高效地架构一个Java项目
  • Scala的模式匹配(8)
  • nodejs30: CSS 剪辑路径clip-path导致伪元素不可见问题及解决方法
  • Git分布式版本控制工具 Git基本概念、Git工作流程、Git常用命令、Git远程仓库、IDEA操作Git
  • 十,[极客大挑战 2019]Secret File1
  • Android 获取数字键盘和输入类型
  • 8. 一分钟读懂“代理模式”
  • 【实战攻略】如何从零开始快速实现深度学习新想法?——四步走战略
  • Creating Server TCP listening socket *:6379: bind: No error
  • Go热加载工具air-使用说明-win11问题解决指南
  • 华为HarmonyOS 让应用快速拥有账号能力 -- 2 获取用户头像昵称
  • oracle表迁移至postgre
  • 【PlantUML系列】类图(一)
  • Unity AssetBundles(AB包)
  • 腾讯面试:如何解决哈希冲突?
  • 【动手学运动规划】 4.5 A*算法