Wikidata数据结构及本地部署——支持SPARQL查询

这篇具有很好参考价值的文章主要介绍了Wikidata数据结构及本地部署——支持SPARQL查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Wikidata 本地部署

Github:https://github.com/NP-NET-research/wdel 欢迎来 star && fork && issue ~~

有问题可以通过邮箱:xuzhengfei-email@qq.com 联系我~~

1、Wikidata 简介

Wikidata(维基数据)是一个由维基媒体基金会支持的开放内容项目,旨在创建一个免费、开放、协作的多语言知识图谱。它于2012年推出,并成为维基媒体项目的一部分。Wikidata的目标是收集、组织和连接全球范围内的结构化数据,使其能够在维基百科和其他维基媒体项目以及其他应用程序中使用。

1.1 Wikidata 数据结构

wikidata数据是怎么构造的,自然语言处理,大数据处理,知识图谱,人工智能

Wikidata的数据结构是基于实体-属性-值(Entity-Property-Value)的三元组模型。下面是一些关键的概念:

  • 实体(Entity):实体代表现实世界中的一个独特事物,如人物、地点、概念等。每个实体都有一个唯一的标识符,称为QID(如Q42)。实体可以关联各种属性和值。
  • 属性(Property):属性定义了实体和其值之间的关系。它描述了实体的某个方面或特征。每个属性都有一个唯一的标识符,称为PID(如P31表示“实例/类别”)。属性可以有不同的数据类型,包括字符串、数字、日期等。
  • 值(Value):值是与实体的属性相关联的信息。这些值可以是简单的数据类型(如字符串或数字),也可以是其他实体的引用。例如,一个人物实体的出生日期属性的值可以是一个日期。
  • 语句(Statement):语句是描述实体、属性和值之间关系的基本单位。每个语句由实体、属性和值组成,形成一个三元组。语句还可以包含其他信息,如参考文献、来源等。
  • 引用(Reference): 引用提供了关于语句数据来源的额外信息。它包括引用的来源、时间戳等详细信息,有助于确保数据的可靠性和透明度。
  • 限定修饰符(Qualifier):限定修饰符是用于修改语句的额外信息。它们提供了对语句中特定值的进一步描述,例如,为出生日期提供精确到天的信息。
  • 数据类型: Wikidata支持不同的数据类型,包括字符串、数量、日期、坐标等。这些数据类型有助于确保数据的一致性和可查询性。

Wikidata在RDF格式中表示语句(Statement)有两种形式:truthy(真实的)语句和full(完整的)语句。

  1. Truthy Statements(真实的语句):

    • Truthy语句表示具有给定属性的最佳非弃用级别的语句。如果存在属性P2的首选语句,那么只有P2的首选语句将被视为真实的。否则,所有P2的正常级别语句都被视为真实的。
    • Truthy语句的谓词(predicate)使用前缀wdt:,后接属性名称(例如,wdt:P2)。对象是语句的简单值,忽略限定修饰符(qualifiers)。
    • 如果值具有简单值规范化(目前仅适用于外部ID),则规范化值将在wdtn:前缀下列出,例如,wdtn:P2
  2. Full Statements(完整的语句):

    • Full语句表示系统中关于语句的所有数据。Full语句被表示为单独的节点,使用前缀wds:和语句的ID(例如,wds:Q3-4cc1f2d1-490e-c9c7-4560-46c3cce05bb7)。语句ID的格式和含义没有保证。
    • 语句与实体的关联使用带有前缀p:和属性名称的谓词(例如,p:P2)。

在这两种形式中,Truthy语句更关注于表示具有最佳级别的、非弃用的语句,而Full语句则提供了有关语句在系统中的所有数据的更全面的信息。这些语句的表示方式和使用的前缀有助于在RDF格式中区分它们。

1.2 Wikidata数据转储

Wikidata的数据可以通过不同的方式进行转储(dump),使其以文件形式可供下载和使用。这些数据转储是以某个特定的时间点创建的快照,通常以定期发布的形式提供。以下是一些常见的Wikidata数据转储:

  1. JSON格式转储: Wikidata提供了以JSON格式存储的数据转储,其中包含所有实体、属性和语句的信息。这是一个结构化的文本格式,易于解析和处理。你可以从Wikidata的数据转储页面下载这些文件。

  2. RDF格式转储: Wikidata数据也以RDF(Resource Description Framework)格式进行转储,符合W3C的标准。这些转储文件包括truthy和full语句,以及其他与语句相关的详细信息。你可以在Wikidata的数据转储页面找到RDF格式的转储文件。

  3. SQL格式转储: Wikidata还提供了以SQL格式存储的转储文件,使用的是MySQL数据库格式。这允许用户将Wikidata的数据导入到本地MySQL数据库中。相关的文件可以在Wikidata的数据转储页面找到。

  4. 其他格式: Wikidata还提供了其他格式的转储文件,例如Turtle格式等。这些不同的格式允许用户选择适合其需求和技术栈的数据文件。

本文主要使用 RDF格式的三元组转储,文件后缀为.nt,例如latest-truthy.nt.bz2 表示只包含Truthy语句信息的所有实体数据。

2. SPARQL引擎

2.1 Qlever

QLever 是一个开源的 SPARQL 引擎,可以在单个标准 PC 或服务器上高效地索引和查询包含超过 1000 亿个三元组的超大型知识图。特别是,对于涉及大量中间或最终结果的查询,QLever 速度很快,而这对于 Blazegraph 或 Virtuoso 等引擎来说是出了名的困难。QLever 还支持搜索与知识库相关的文本以及 SPARQL 自动补全。QLever 项目地址:https://github.com/ad-freiburg/qlever

QLever相比与其他图数据库,能够快速地构建索引。再次之前我们尝试使用 Apache Jena fuseki 导入到 jena 数据引擎,数据导入持续了7天,且随着导入数据的增多,导入速度持续衰减,最终衰减到预计半年才能导入。2022年ISWC论文 Getting and hosting your own copy of Wikidata也报告了这一现象。相反地QLever只需要约17h就能构建好Wikidata的索引,完成数据导入。

2.2 qlever-control

QLever 官方提供了一个工具用以方便地配置和使用QLever。建议使用 Docker运行QLever ,这样将不必下载任何 QLever 代码(Docker 将拉取所需的映像)同时能够避免本地编译QLever 和复杂的编译环境配置。

pip install qlever

3. Wikidata导入QLever

使用Qlever将Wikidata数据的三元组数据导入到本地数据库,并进行查询。QLever的使用方法可以参考qlever-control的文档qlever-control,通过Qleverfile实现对Wikidata数据的导入和配置,本项目使用的Qleverfile如下,需要将Qleverfile文件放在对应数据目录下:

# Qleverfile for Wikidata, use with https://github.com/ad-freiburg/qlever-control
#
# qlever get-data    downloads two .bz2 files of total size ~40 GB
# qlever index       takes ~17 hours and ~40 GB RAM
# qlever start       starts the server (takes around 30 seconds)

[data]
NAME              = wikidata
GET_DATA_URL      = https://dumps.wikimedia.org/wikidatawiki/entities
GET_DATA_CMD      = curl -LO -C - ${GET_DATA_URL}/latest-truthy.nt.bz2 ${GET_DATA_URL}/latest-lexemes.nt.bz2
INDEX_DESCRIPTION = "Full Wikidata dump from ${GET_DATA_URL} (latest-truthy.nt.bz2 and latest-lexemes.nt.bz2)"

[index]
FILE_NAMES      = wikidata-20231222-lexemes.nt.bz2 wikidata-20231222-truthy.nt.bz2 
CAT_FILES       = bzcat ${FILE_NAMES}
SETTINGS_JSON   = { "languages-internal": ["en"], "prefixes-external": [ "<http://www.wikidata.org/entity/statement", "<http://www.wikidata.org/value", "<http://www.wikidata.org/reference" ], "locale": { "language": "en", "country": "US", "ignore-punctuation": true }, "ascii-prefixes-only": false, "num-triples-per-batch": 10000000 }
WITH_TEXT_INDEX = false
STXXL_MEMORY    = 10g

[server]
PORT                  = 7001
ACCESS_TOKEN          = ${data:NAME}_832649627
MEMORY_FOR_QUERIES    = 100G
CACHE_MAX_SIZE        = 100G

[docker]
USE_DOCKER = true
IMAGE      = adfreiburg/qlever

[ui]
PORT   = 7000
CONFIG = wikidata

其中需要下载最新的Wikidata dump: latest-truthy.nt.bz2 和 latest-lexemes.nt.bz2,转储格式为三元组。2023年12月的Wikidata转储中包含约14.78B个三元组,导入Qlever(构建索引)大约需要17h,占用硬盘空间约400GB。

Qlever 运行方法:

# cd 到目标目录
cd target_folder
# 创建并保存Qleverfile
touch Qleverfile
# 下载数据, 也可以使用 python src/wikidata_process/qlever-control/qlever get-data
wget https://dumps.wikimedia.org/wikidatawiki/entities/latest-truthy.nt.bz2
wget https://dumps.wikimedia.org/wikidatawiki/entities/latest-lexemes.nt.bz2
# (非必需)重命名文件,与Qleverfile中文件名称一致即可
mv latest-truthy.nt.bz2 wikidata-20231222-truthy.nt.bz2 
mv latest-lexemes.nt.bz2 wikidata-20231222-lexemes.nt.bz2
# 数据导入qlever
qlever index
# 启动qlever
qlever restart
# 启动SPARQL Web页面
qlever ui

4. Wikidata SPARQL查询

通过命令行进行Wikidata数据查询,命令模板如下,返回tsv格式文件:

curl -s http://127.0.0.1:7001 
    -H "Accept: text/tab-separated-values" \
    -H "Content-type: application/sparql-query" \
    --data "$sparql_query_command_line" > "$save_fpath.tsv"

eg. 查询德国各个城市的名称和人口

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?name ?population WHERE {
  ?city wdt:P31/wdt:P279* wd:Q515 .
  ?city wdt:P17 wd:Q183 .
  ?city wdt:P1082 ?population .
  ?city rdfs:label ?name .
  FILTER (LANG(?name) = "de")
}
ORDER BY DESC(?population)

Web页面查询:
wikidata数据是怎么构造的,自然语言处理,大数据处理,知识图谱,人工智能

参考文献:文章来源地址https://www.toymoban.com/news/detail-841906.html

  1. Wikibase/Indexing/RDF Dump Format
  2. Getting and hosting your own copy of Wikidata
  3. wikidata dump
  4. https://github.com/ad-freiburg/qlever

到了这里,关于Wikidata数据结构及本地部署——支持SPARQL查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError ‘Tensor‘ object has no attribute ‘todense‘

    将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError: ‘Tensor’ object has no attribute ‘todense’ 实例来源于《PyTorch深度学习和图神经网络 卷1》实例26:用图卷积神经网络为论文分类 出错部分p284页 原代码: 错误提示: ​ 找了一圈没有一样的解决方案,但

    2024年02月13日
    浏览(43)
  • 图数据库Neo4j——Neo4j简介、数据结构 & Docker版本的部署安装 & Cypher语句的入门

    MySQL是一种开源的关系型数据库管理系统,使用SQL作为其查询语言,常见的关系型数据库有MySQL、Oracle、SQL Server、PostgreSQL等。相关博客文章如下: 【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身 PostgreSQL数据库——Docker版本的postgres安装 Navicat连接方式

    2024年02月06日
    浏览(58)
  • ChatGPT本地部署(支持中英文,超级好用)!

    今天用了一个超级好用的Chatgpt模型——ChatGLM,可以很方便的本地部署,而且效果嘎嘎好,经测试,效果基本可以平替内测版的文心一言。 目录 一、什么是ChatGLM? 二、本地部署 2.1 模型下载 2.2 模型部署 2.3 模型运行 2.3.1 直接在命令行中输入进行问答 2.3.2 利用 gradio 库

    2023年04月14日
    浏览(53)
  • 不需要GPU就可以玩转模型,同时支持本地化部署

            简单一款不需要GPU就可以在Win 机器跑的模型:Ollama;用于本地运行和部署大型语言模型(LLMs)的开源工具 关于Ollama的简要介绍 平台兼容性 :Ollama支持多种操作系统,包括macOS、Linux和Windows,这使得它在不同用户之间具有较好的可访问性。 模型支持 :它能够支持

    2024年04月16日
    浏览(47)
  • docsify快速部署搭建个人知识库(支持本地、服务器、虚拟机运行)

    🏠 服务器与网站部署知识体系目录 我们先在本地运行体会与获取 docsify 结构,后面再部署到服务器上运行。 部署一个个人知识库只需要按照本文的指令直接 cv 即可。但请注意打开服务器防火墙的 80 端口。 Docsify即时生成您的文档网站。与 GitBook 不同,它不会生成静态 htm

    2024年02月04日
    浏览(44)
  • 本地化部署离线开源免费语音识别API,支持多模态AI能力引擎

    思通数科作为一家专注于多模态AI能力开源引擎平台,其技术产品涵盖了自然语言处理、情感分析、实体识别、图像识别与分类、OCR识别以及语音识别等多个领域。在语音识别这一细分市场,思通数科的技术产品中的音频文件转写服务有着相似的应用场景和功能特点。 思通数

    2024年04月12日
    浏览(62)
  • Tecplot数据结构——结构数据(结构网格)与非结构数据(非结构网格)

    结构数据可以是一维、二维或三维的,下面以二维的数据格式为例。 在记事本中写入以下字符,并将文件以.plt或.dat为后缀命名。 其中数据总数为I*J=20,结构数据顺序为point格式,顺序为:(I,J)=(1,1), (I,J)=(2,1), … (I,J)=(Imax,1), (I,J)=(1,2), (I,J)=(2,2), (I,J)=(Imax,2), … (I,J)=(Imax,Jmax).

    2024年02月15日
    浏览(54)
  • 数据结构与算法——数据结构有哪些,常用数据结构详解

    数据结构是学习数据存储方式的一门学科,那么,数据存储方式有哪几种呢?下面将对数据结构的学习内容做一个简要的总结。 数据结构大致包含以下几种存储结构: 线性表,还可细分为顺序表、链表、栈和队列; 树结构,包括普通树,二叉树,线索二叉树等; 图存储结构

    2024年02月15日
    浏览(60)
  • 算法 数据结构分类 数据结构类型介绍 数据结构线性非线性结构 算法合集 (一)

     数据结构分为:                            a.线性结构                            b.非线性结构  a.线性结构:                       数据与结构存在一对一的线性关系; a . 线性结构 存储 分为:                                   顺序存储

    2024年02月10日
    浏览(49)
  • 结构化数据、非结构化数据、半结构化数据

    结构化的数据一般是指可以使用关系型数据库表示和存储,可以用二维表来逻辑表达实现的数据。例如:需要多少个属性,每个属性什么类型,每个属性的取值范围等等,类似下图所示, 提前定义好了一个二维矩阵的元数据 ,包含有列名称、列的类型、列的约束等:   可见

    2024年02月09日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包