【问题标题】:Retrieving all Wikipedia articles about people检索所有关于人的维基百科文章
【发布时间】:2020-03-03 22:51:52
【问题描述】:

我正在尝试从 Wikipedia 中检索所有关于人的文章。更具体地说,我正在寻找:

  • 只有页面标题(也许还有页面 ID)
  • 关于的文章,
  • 性别分隔(为了简单起见,男性和女性),
  • 来自当前英语维基百科

我尝试了几件事,但都没有成功:

  • 维基百科 API 让我search for all pages in a given category。但是,在“男性”或“女性”中搜索主要获取子类别页面,而关于真实人物的页面则被进一步隐藏在子类别层次结构中。我找不到自动遍历层次结构的方法。

  • PetScan 允许我指定层次结构深度,但请求会在深度超过 3 时超时。此外,与 Wikipedia API 一样,结果包括与人无关的文章。

  • Wikidata 允许我编写 SPARQL 查询来搜索具有“男性”或“女性”性别的实体。 This example seems to work,但是一旦我在查询中包含实体名称,它就会超时。此外,我不确定这些数据与 Wikipedia 文章的对应关系如何——这些数据是否保证与 Wikipedia 上的数据相同?

实现我的目标的最佳方法是什么?

【问题讨论】:

    标签: wikipedia-api wikidata wikidata-api


    【解决方案1】:

    我创建了一个 SPARQL 查询来完成这项工作。保持查询尽可能简单很重要(查询优化请阅读:https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/query_optimization)。这是 SPARQL 的查询:https://w.wiki/JhK

    对于女性文章,这可能与 Wikidata 查询服务 (WQS) 一起使用,尽管它很难在超时的边缘。所以对于男性文章(还有更多),您需要添加一个LIMIT 并通过添加一个递增的OFFSET 来逐步完成它。 WQS 接缝仍然超时,但是 Wikidata 有其他端点,这个限制为 100.000 个结果,但可以增加 OFFSET: https://wikidata.demo.openlinksw.com/sparql

    生成的 SPARQL 查询是这样的:

    SELECT ?sitelink
    WHERE {
      ?item wdt:P21 wd:Q6581097;
            wdt:P31 wd:Q5.
      ?sitelink schema:about ?item;
      schema:isPartOf <https://en.wikipedia.org/>.
    } 
    LIMIT 100000 OFFSET 100000
    

    【讨论】:

    • @vvye:这个查询运行了多长时间?
    • @stackoverflowuser2010 我不记得了,但应该不会超过一分钟左右。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多