实战 Wikipedia 与 Wikidata 知识图谱数据获取 (8)
内容预告
今天,我们深入探索如何从 Wikipedia 和 Wikidata 这两大公共知识图谱平台上提取数据。文章将首先解析 Wikidata 背后的复杂数据模型,通过具体案例来阐释其工作原理,继而详细指导您如何运用 SPARQL 语言,从 Wikidata 和 Wikipedia 获取所需数据。文末特别赠送一本精选的知识图谱开源书籍 📚。
DBpedia 历史简介

简要概述:DBpedia 的数据源自 Wikipedia 的信息框和文章,而 Wikidata 的数据则基于 DBpedia,进一步为 Wikipedia 提供信息支持。通过社区成员的持续贡献,这两个平台每年都在不断地丰富和更新数据。In short: Wikipedia → \rightarrow → DBPedia → \rightarrow → Wikidata。WikiData 的数据质量整体要比 DBpedia 上的要好。
很多同学不知道如何从 WikiData 上获取数据主要有两个难点:
- 不了解 WikiData 的数据模型
- 因为 WikiData 奇怪的命名实体和属性的方式,让我们摸不着头脑
难点一:WikiData 数据模型

前缀命名空间介绍:wd: Wikidata. 用于命名实体 URI 。比如 wd:Q317521 (埃隆马斯克)。wdt: Wikidata Truth. 用于命名属性。比如 wdt:P26 (配偶)。
p: property. 用于命名某个属性(property) 的 Statement 节点 (Wikidata Statement 节点来连接所有跟某个属性相关的信息。相当于属性的注解)。比如 p:P26 (配偶的 Statement 节点)。ps: property statement. 用于命名 Statement 节点值的属性,也就是用 wdt 为前缀的属性的值。比如 ps:P26 (配偶 Statement 节点的值,跟 wdt:P26 获取的值一样)。pq: property qualifier. 用于命名描述 Statement 节点值的属性。
prov:wasDerivedFrom: 用于获取 Statement 节点的参考节点。也就是说这个 Statement 是根据什么网上的信息得来的。pr: property reference. 用于命名参考节点信息的属性,比如参考链接 pr:P854。
埃隆马斯克例子
我在埃隆马斯克 (他的 URI 是 wd:Q317521) 的 wikidata page: https://www.wikidata.org/wiki/Q317521 中截取了一段关于他第一任老婆 贾丝廷·威尔逊 (后改姓 Musk) 的信息。
SPARQL 查询从 Wikidata 获取埃隆马斯克所有老婆的信息
Wikidata 的查询入口: https://query.wikidata.org
SELECT ?spouseName ?marriageStartTime ?marriageEndTime ?referenceURL ?referenceRetrievedTime WHERE {
wd:Q317521 p:P26 ?marriageStatement.
?marriageStatement ps:P26 ?spouse.
?spouse rdfs:label ?spouseName.
OPTIONAL { ?marriageStatement pq:P580 ?marriageStartTime. }
OPTIONAL { ?marriageStatement pq:P582 ?marriageEndTime. }
OPTIONAL {
?marriageStatement prov:wasDerivedFrom ?refNode.
OPTIONAL { ?refNode pr:P854 ?referenceURL. }
OPTIONAL { ?refNode pr:P813 ?referenceRetrievedTime. }
}
FILTER(LANG(?spouseName) = "en")
}
查询结果如下:
难点二:不知道属性的 URI
这里有三个方法帮助找到你想要的属性 URI
- 用 Propbrowse 查询 https://hay.toolforge.org/propbrowse/. 这个工具可以根据你给的关键猜你想要的属性 URI。比如 end time (
P582)。这个方法比较宽泛。
- 用 Wikidata Graph Builder https://angryloki.github.io/wikidata-graph-builder/. 输入 Wiki page link 后,可以像上面方法一样去根据关键词检索可用的属性 URI。这个方法可以针对具体的实体。

- 用 SPARQL 直接搜。比如搜索所有以 埃隆马斯克 为主语,并且 prefix 为
wdt的属性 URI。
SELECT DISTINCT ?p WHERE {
wd:Q317521 ?p ?o .
FILTER(STRSTARTS(STR(?p), STR(wdt:)))
}
SPARQL 查询获取 DBPedia 数据
DBPedia 的查询入口: https://dbpedia.org/sparql
首先搜索到埃隆马斯克的 DBpedia 页面 https://dbpedia.org/page/Elon_Mus.
可以推出他的 URI 是 http://dbpedia.org/resource/Elon_Musk
DBpedia 上的实体都是以 dbr 做为 prefix,属性都是以 dbo 或者 dbp 作为 prefix
这里可以直接看到他所有可用的属性 URI. 比 WikiData 来说,写 SPARQL 的难度低了很多。随便写一个,查找他的出生地和教育 :
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbr: <http://dbpedia.org/resource/>
SELECT ?birthPlace ?edu WHERE {
dbr:Elon_Musk dbo:birthPlace ?birthPlace .
dbr:Elon_Musk dbo:education ?edu
}

这里提示下,在 WikiData 和 DBpedia 上的查询,如果你使用它们的默认 prefix 名可以省略 PREFIX 语法. 这意味下面这个查询可以直接在 DBpedia 上执行。
SELECT ?birthPlace ?edu WHERE {
dbr:Elon_Musk dbo:birthPlace ?birthPlace .
dbr:Elon_Musk dbo:education ?edu
}
文末送书 (开源的)
分享一本2021发布的好书 《Knowledge Graph》by Aidan Hogan 等。包含了知识图谱基础,知识图谱 deductive 和 inductive Inference,知识图谱创建和质量评估等内容。这是一本 open source 的书,大家可在公众号回复: 20240112 领取,省去科学上网。
之前的文章
知识图谱 (1)
本体论介绍 (2)
动手构建你的第一个知识图谱 by RDF (3)
图数据模型介绍 (4) 数学符号警告
SPARQL查询:如何高效检索Web数据 (5)
深入探索 SPARQL,复杂查询和聚合函数 (6)
用逻辑降维打击 SPARQL 查询:无痛写 NOT EXISTS (7)
不定期更新专业知识和有趣的东西,欢迎反馈、点赞、加星
您的鼓励和支持是我坚持创作的最大动力!ღ( ´・ᴗ・` )
参考
- https://en.wikibooks.org/wiki/SPARQL/WIKIDATA_Qualifiers,_References_and_Ranks
- Scientific Data Management & Knowledge Graph, by Maria-Esther Vidal
- DBPedia Endpoint: https://dbpedia.org/sparql
- Wikidata Endpoint: https://query.wikidata.org
- Wikidata Property Browser: https://tools.wmflabs.org/hay/propbrowse/
- Wikidata Graph Builder: https://angryloki.github.io/wikidata-graph-builder/
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)