首页 > 解决方案 > 为所有页面人性化 Wikipedia 类别

问题描述

我想迭代所有英文维基百科页面并找出每个页面所属的类别,但是:

预期结果

我期望维基百科中的所有英语(目前,但显然将来是任何语言)页面都会产生其顶级类别,并估计每个类别的份额。例如,关于斯蒂芬弗莱的文章会给出类似

{"arts": 0.9, "other": 0.1}

还有一个关于富兰克林罗斯福的:

{"history & politics": 0.7, "famous people": 0.3}

这些例子当然只是为了说明。我的问题是:这怎么可能?

我所做的

我正在使用Mediawiki API迭代页面,例如:

https://en.wikipedia.org/w/api.php?action=query&format=json&generator=allpages&gaplimit=max&prop=info|description|extracts|categories&inprop=displaytitle&cllimit=max&exintro=true&explaintext=true&gapfrom=A&gapfilterredir=nonredirects&clshow=!hidden

生成的页面数据包含每个页面的所有类别,例如“A&C Bus Corporation”:

"categories": [
{"ns": 14,"title": "Category:Bus companies of the United States"},
{"ns": 14,"title": "Category:Bus operating company stubs"},
{"ns": 14,"title": "Category:Bus transportation in New Jersey"},
{"ns": 14,"title": "Category:Companies based in Jersey City, New Jersey"},
... ]

我现在能做什么...

接下来,我可以通过使用 categorytree 递归检查它们的类别来找到每个类别的父类别这是 API 的不稳定扩展并输出原始 HTML。试试这个例如:

https://en.wikipedia.org/w/api.php?action=categorytree&format=json&category=British%20record%20labels&options=%7B%22depth%22:5%7D

但是,输出远不是完整的类别层次结构,并且仍然基于复杂的维基媒体类别,而不是我想要的更多人类标签(如“科学”、“文学”、“艺术”、“体育”等)。更重要的是,解析这个 HTML 并反馈给 Wiki API 真是让人头疼……

那里的选项

我已经研究了几个选项来实现这一点:

标签: apidata-miningwikipediadbpediawikipedia-api

解决方案


推荐阅读