Wikipedia / MediaWiki API:查找文章是关于个人,组织还是位置

时间:2013-09-16 14:51:44

标签: mediawiki wikipedia wikipedia-api

我正在试图弄清楚是否有办法确定某篇文章是指个人,组织还是位置。我想这个答案就在“类别”和“clcategories”参数中......但是,这就是问题所在。

以艾伯特爱因斯坦为例。查询的结果:

https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=categories&clcategories=Category:People%20from%20Berlin

......告诉我,事实上,阿尔伯特爱因斯坦是“柏林人”的成员。

同样,只需浏览维基百科上的类别树,我就可以通过以下路径显示“来自柏林的人”是“人物”类别的子类别:

People > People_categories_by_parameter > People by place > People by city > People by country and city > People by city in Germany > People from Berlin

但是,Albert Einstein不是(直接)“People”类别的成员,所以这个查询:

https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=categories&clcategories=Category:People

...在类别下找不到任何结果,即它不匹配。

有没有办法找出一个页面是否是任何X类的成员,其中X类是指定类别Y的后代?

谢谢!

2 个答案:

答案 0 :(得分:2)

我不知道维基百科的API方法,但我可以想到Freebase方式。以下freebase查询将为您提供与给定Wikipedia文章相关联的Freebase“类型”。 “人物”,“政治家”,“艺术家”,“地方”等等 - 都可以从这些类型中轻易识别出来。

{
  "key": [{
    "namespace": "/wikipedia/en",
    "value": "William_Ambrose"
  }],
  "type": []
}

(当然,将en替换为实际的维基百科语言,将"William_Amrose"替换为维基百科的文章名称。请参阅下面关于转义的说明!)

在这种情况下,结果是:

{
  "result": {
    "type": [
      "/common/topic",
      "/people/person",
      "/people/deceased_person",
      "/government/politician"
    ],
    "key": [{
      "namespace": "/wikipedia/en",
      "value": "William_Ambrose"
    }]
  }
}

......这显然意味着“人”和“政治家”(也是“死者”,但这是另一回事。)

请参阅我对get wikipedia linked links的回答,了解有关API如何工作的说明以及REST示例。 特别是,请仔细查看从Google获取API密钥以及从Freebase中获取字符串的说明。

祝你好运。

答案 1 :(得分:1)

现在你应ask Wikidata property P31yii2 doc会告诉你类似于"是人类的事情。