4

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

以爱因斯坦为例。查询结果:

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)不是(直接)“人”类别的成员,所以这个查询:

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

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

是否有某种方法可以确定页面是否是任何类别 X 的成员,其中类别 X 是指定类别 Y 的后代?

谢谢!

4

2 回答 2

2

我不知道 Wikipedia-API 方法可以做到这一点,但我可以想到一种 Freebase 方法。以下 freebase 查询将为您提供与给定 Wikipedia 文章关联的 Freebase“类型”。“人物”、“政治家”、“艺术家”、“地点”等——都可以从这些类型中轻松识别。

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

(当然,替换en为实际的 Wikipedia 语言,以及"William_Amrose"Wikipedia 文章名称。不过,请参阅下面关于转义的注释!)

在这种情况下,结果是:

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

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

请参阅我的答案以获取有关 API 工作原理的注释和 REST 示例的 wikipedia 链接链接特别是,请仔细查看从 Google 获取 API 密钥和 Freebase 转义字符串的说明。

祝你好运。

于 2013-09-17T11:37:20.590 回答
2

现在你应该问问 Wikidata,它的属性 P31会告诉你“是一个人”之类的东西。

于 2015-11-01T08:43:24.760 回答