解析维基百科国家、地区、城市

7
有没有可能获取所有维基百科国家、地区和城市之间的关系清单? 我找不到适合这项任务的API。最容易解析我需要的所有信息的方法是什么? PS:我知道,还有其他数据源可以获取这些信息。但我对维基百科感兴趣...

2
你应该看一下http://dbpedia.org。解析维基百科绝非易事。 - Bergi
2
这对于WikiData或DBPedia来说是一个很好的任务。解析信息框或类别将是重新发明轮子的一种非常复杂的方式。 - leo
2个回答

6

[2020更新] 现在最好使用Wikidata查询服务来完成此操作,您可以通过一些SPARQL运行超特定的查询,例如:查找所有国家及其标签。请参阅Wikidata查询帮助


获取整个图表可能有点繁琐,但您可以从实验性/非官方的Wikidata Query API中获取大部分数据。

我建议以下工作流程:

  • 转到您想要处理的实体类型的实例,例如Estonia (Q191),并查找其instance of(P31)属性,您会发现:国家、主权国家、联合国成员、欧盟成员等。

  • 使用Wikidata Query API claim命令输出每个具有所选P31属性的实体。让我们尝试一下country (Q6256)

    http://wdq.wmflabs.org/api?q=claim[31:6256]

它输出一个数字id数组:这就是你的国家!(请注意,结果仍然不完整,因为只找到了141个项目:要么某些国家在Wikidata中缺失,要么如Nemo在评论中建议的那样,有些国家可以在country (Q6256) subclasses(P279)中找到)。
  • 您可能需要更多的信息,因此您可以向Wikidata Official API请求实体数据:

    https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q16&format=json&props=labels|claims&languages=en|fr

    (这里是加拿大(Q16)的数据,以json格式呈现,仅包含英语和法语的声明和标签数据。请查看文档以根据您的需求调整参数)

您可以按以下方式一次查询多个实体,限制为50个:

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q16|Q17|Q20|Q27|Q28|Q29|Q30|Q31|Q32|Q33|Q34|Q35|Q36|Q37|Q38|Q39|Q40|Q41|Q43|Q45|Q77|Q79|Q96|Q114&format=json&props=labels|claims&languages=en|fr

  • 从每个国家的数据中,您可以查找注册为行政区划(P150)的实体,并在这些新实体上重复。

  • 或者,您可以使用tree命令获取所有行政区划的树。例如,对于法国(Q142),可以使用http://wdq.wmflabs.org/api?q=tree[142][150]。塔达,36994个项目!但是,由于您可能会从一个国家遇到不同类型的行政区划,因此更难进行细化。并且避免从浏览器执行此类查询,它可能会崩溃。

  • 现在,您只需通过使用claim命令和适当的市镇(Q15284)实体的子类(P279)(all available here)来按国家细化此最后一个查询:对于法国,就是commune (Q484170),因此您的请求如下所示:

    http://wdq.wmflabs.org/api?q=tree[142][150] AND claim[31:484170]

    然后为所有国家重复:玩得开心!


2
最后我在Wikidata上读到了一篇经过深入研究的答案。:) 关于“数据仍然不完整,因为只找到了141个项目”的问题:我不这么认为,因为您没有考虑子类,即实体正在使用的比“国家”更具体的术语。 - Nemo
1
确实!我修改了我的陈述。 - maxlath

2
你应该使用Wikidata和/或dbpedia。个人建议,最好先从Wikidata开始,因为它直接使用MediaWiki,并且具有相同的API,因此您可以使用类似的代码。我建议使用pywikibot来入门。这样,您仍然可以从维基百科请求页面(例如列表页面或类别),如果有必要的话。这里有一个关于访问Wikidata的方法的好概述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接