api - 为所有页面人性化 Wikipedia 类别
问题描述
我想迭代所有英文维基百科页面并找出每个页面所属的类别,但是:
- 将更细粒度的维基媒体类别映射到更大的类别,例如“类别:19 世纪小说列表”>>“文学”
- 通过删除重复项来减少生成的类别集
预期结果
我期望维基百科中的所有英语(目前,但显然将来是任何语言)页面都会产生其顶级类别,并估计每个类别的份额。例如,关于斯蒂芬弗莱的文章会给出类似
{"arts": 0.9, "other": 0.1}
还有一个关于富兰克林罗斯福的:
{"history & politics": 0.7, "famous people": 0.3}
这些例子当然只是为了说明。我的问题是:这怎么可能?
我所做的
我正在使用Mediawiki API迭代页面,例如:
生成的页面数据包含每个页面的所有类别,例如“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。试试这个例如:
但是,输出远不是完整的类别层次结构,并且仍然基于复杂的维基媒体类别,而不是我想要的更多人类标签(如“科学”、“文学”、“艺术”、“体育”等)。更重要的是,解析这个 HTML 并反馈给 Wiki API 真是让人头疼……
那里的选项
我已经研究了几个选项来实现这一点:
解决方案
推荐阅读
- node.js - 如何在 MongoDB 上高效查询复杂的层次结构
- php - php imagemagick 或任何其他方式来查找拼图的 xy 坐标
- python - 如何使用 Python 从 MySQL 打开 BLOB 文件而不保存?
- angular - 如何在不重新加载的情况下检查“再次检查属性”?
- python - 如果没有在 django 项目的 html 标记中分配 'action' 值,它仍然会呈现页面并将值提交到数据库,如何?
- java - spring-eureka-common mvn 依赖被替换了吗?
- java - Switch case 算法 Java 问题(需要一个新的 while 循环?)
- scripting - 自动热键中的滚动锁定和数字锁定图标通知 - AHK
- javascript - 在画布上显示 Google 字体
- python - 我如何使用 API 网关详细信息,基本上是与它关联的 lambda 函数内的环境详细信息?