1

我使用Wikipedia dumps extracts 来处理 Wikipedia 而不是 Wikipedia API,因为我想快速运行大量查询。

我想将维基百科页面连接到它们各自的维基数据页面。我的理解是iwlinks表包含这些信息。然而,虽然我已经能够为某些 Wikipedia 页面验证这一点,但我也能够验证其他人的情况并非如此。

例如,如果我们在 iwlinks 表中查找Metallica 的 Wikipedia 页面,我们会得到:

iwl_from, iwl_prefix, iwl_title
'18787', 'c', 'Special:Search/Metallica'
'18787', 'd', 'Q15920'
'18787', 'q', 'Special:Search/Metallica'

iwl_namespace 列中包含“d”的行包含有关在哪里可以找到Metallica Wikidata 页面的信息(即 Q15920)。

但是,如果我们使用以下命令查找Tom Selleck 的 Wikipedia 页面的 iwlinks 表:

SELECT * FROM iwlinks WHERE iwl_from = 277451;

我们得到:

iwl_from, iwl_prefix, iwl_title
'277451', 'commons', 'Tom_Selleck'
'277451', 'q', 'Special:Search/Tom_Selleck'

这些行都不包含关于他的 Wikidata 页面的信息。但是,他的 Wikipedia 页面包含指向他的 Wikidata 页面的“Wikidata item”链接,因此推测它必须存储在某个地方,但我找不到它。

我非常感谢您能想到的任何建议。

PS 如果您能指出正确的方向以找出许可证信息在维基百科中每个图像的存储位置,则可以加分。

4

2 回答 2

3

我不太确定,如果你的方法有前途。首先,我了解您想要实现的目标:

  • 鉴于您在 Wikipedia 上有一个页面
  • 你想得到对应的维基数据项
  • 您可能希望获得与此项目相关的其他页面?

如果这是正确的,我认为你最好的选择是wb_items_per_site维基数据表。为什么选择维基数据而不是维基百科?Wikibase(Wikidata 背后的软件)的当前架构需要访问客户端(又名 Wikipedia)和 repo(又名 Wikidata)数据库,因为有关页面的信息保存在客户端数据库中,而有关连接的信息项目(包括页面连接到项目的信息保存在 repo 数据库中。此信息保存在wb_items_per_site表中(至少这是我会使用的,我不是 Wikibase 的开发人员,所以这也可能不是最好的解决方案)。

例如,如果您想获取 Wikipedia 文章的 Wikidata 项,我会发出以下查询:

select * from wb_items_per_site where ips_site_id = "enwiki" and ips_site_page = "Tom Selleck" limit 1;

(请注意,您需要将下划线 ( _) 替换为空格。这是由TitleMediaWiki 中的类完成的逻辑。输出如下所示:

ips_row_id     ips_item_id     ips_site_id     ips_site_page
540761088      213706          enwiki          Tom Selleck

(参考https://quarry.wmflabs.org/query/43884

要从此 Wikidata 项目中获取其他连接的页面,您可以发出第二个查询:

select * from wb_items_per_site where ips_item_id = 213706;

(看这里的输出,这里粘贴太大了:P)

对于您的“奖金问题”:

不幸的是,许可证信息保存在 wikitext 中。这意味着,对于保存在 en.wikipedia.org 上的图像,您需要解析 Wikitext 以获取相关的许可信息。

这里的一个好点是:大多数图像不是托管在 en.wikipedia.org 上,而是托管在 Wikimedia Commons 项目中。在那里,有一个项目,称为结构化图像数据左右,其目标是以结构化、机器可读的方式提供此类信息(许可证、标题、作者和资料)。不幸的是,几乎所有保存在那里的图像和媒体都没有以结构化的方式提供这些信息。因此,后备始终是解析 wikitext。

Wikipedia 安装了一个扩展,它为您部分接管了这个解析部分。该信息例如用在 MediaViewer 功能中。该信息可通过 api 获得: https ://en.wikipedia.org/w/api.php?action=query&titles=File:Albert%20Einstein%20Head.jpg&prop=imageinfo&iiprop=extmetadata

在那里你得到License

"License": {
    "value": "pd",
    "source": "commons-templates",
    "hidden": ""
}

和许可证简称:

"LicenseShortName": {
    "value": "Public domain",
    "source": "commons-desc-page",
    "hidden": ""
}

对您来说不幸的是,因为我假设您想从转储中获取此信息,因此该信息不可用。该信息由来自 wikitext 的 API 在 API 请求上“即时”解析。

于 2020-04-13T10:13:10.703 回答
2

您可以在表格中找到 wikidata 项目page_propsiwlinks包含出现在文本中的链接(查看 Metallica 文章的底部,您会看到一个小姐妹项目框,它只是一个 wikitext 模板;这就是生成这些iwlinks条目的原因)。侧边栏上的链接过去来自langlinks,但 Wikidata 已在很大程度上取代了跨语言链接系统,因此现在这些关联存储在 Wikidata 上。

于 2020-04-14T08:59:58.540 回答