我正在使用Wikipedia dumps摘录而不是Wikipedia API来处理Wikipedia,因为我想快速运行很多查询。
我想将Wikipedia页面连接到各自的Wikidata页面。我的理解是iwlinks表包含此信息。但是,尽管我已经可以对某些Wikipedia页面进行验证,但我也可以对其他页面进行验证。
例如,如果我们在iwlinks表中查找Metallica's Wikipedia page,则会得到:
iwl_from, iwl_prefix, iwl_title
'18787', 'c', 'Special:Search/Metallica'
'18787', 'd', 'Q15920'
'18787', 'q', 'Special:Search/Metallica'
[在iwl_namespace列中包含'd'的行包含有关在哪里可以找到Metallica Wikidata page(即Q15920)的信息。
但是,如果我们使用以下命令查找Tom Selleck's Wikipedia page的iwlinks表:
SELECT * FROM iwlinks iwl_from = 277451;
我们得到:
iwl_from, iwl_prefix, iwl_title
'277451', 'commons', 'Tom_Selleck'
'277451', 'q', 'Special:Search/Tom_Selleck'
这些行均不包含有关其his Wikidata page的信息。但是,他的Wikipedia页面包含指向Wikidata页面的“ Wikidata item”链接,因此大概必须将其存储在某个位置,但我找不到它。
非常感谢您能想到的任何建议。
P.S。奖励积分(如果您可以指向我)正确的方向以找出Wikipedia中每个图像的许可证信息存储在哪里。
我不太确定,您的方法是否很有希望。首先,我了解您要实现的目标:
[如果正确,我认为您最好的选择是Wikidata的wb_items_per_site
表。为什么是Wikidata而不是Wikipedia? Wikibase的当前体系结构(Wikidata背后的软件)要求访问客户端(aka Wikipedia)和repo(aka Wikidata)数据库,因为有关page的信息保存在客户端数据库中,而有关已连接项目的信息(包括信息,该页面已连接到该项目的信息)将存储在回购数据库中。此信息保存在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;
((注意,您需要用下划线替换下划线(_
)。这是由MediaWiki中的Title
类完成的逻辑。输出如下所示:
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;
(请参阅输出here,要粘贴到此处很大:P)
关于您的“奖励问题”:
这里的一个优点是:大多数图像不是托管在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": ""
}
对您来说很不幸,因为我想您想从转储中获取此信息,所以该信息在此处不可用。 API会根据Wikitext的API请求“即时”解析该信息。