按类别过滤维基百科文章

Filter out Wikipedia articles by category

我有一个维基百科转储,我想过滤掉属于特定类别的文章(例如,'Religion')。我知道每篇文章在 text 字段底部都有一个类别列表,但问题是只列出了直接类别(例如,'Jesus' 文章属于 'Religion' 类别, 但 'Religion' 本身并未列为底部的类别之一)。

我的做法

我的第一种方法是使用 categorylinks table 并给定某个高级类别,例如 'Religion',遍历列出每个类别或页面的类别图 [= =48=] 在页面底部。

问题

在我偶然发现这个场景之前,我一直做得很好:

Religion -> Religon and society -> Religion and science -> Religion in science fiction -> Jedi -> 关于星球大战的分类和文章。

所以,根据我的算法,文章 Return of the Jedi 属于高级类别宗教(而且,这是真的)......但我真的不想过滤掉 'Return of the Jedi' 导致它does belong more to other categories(我想这是主要问题,如何辨别给定文章的不同类别的权重)。

另一种解决方案

一个可能的解决方案是,对于我在遍历图表时找到的每个类别|文章,检查它是否不属于我已经访问过的任何其他类别。问题是这不太有效,因为 'Religion' 之后的第二个高级类别可能有另一个不同于 'Religion'.

的高级父级

另一种可能的解决方案是在某个级别削减遍历,例如 3。这将修复前面的示例;现在的问题是在哪个级别(启发式?)。而且,这不是最优解,有些文章虽然属于指定的高级类别,但仍会保留。使用 PetScan,并在深度 2 处截断遍历得到大约 12000 篇文章:文章很少,还有一些 'false positives',例如 'Bertrand Russell'。

有什么想法吗?

编辑:使用维基百科 API 似乎不是一个选项(我需要过滤掉很多类别)。

我认为您需要回到最初的要求并加以澄清。在您的问题中,您已经开始陈述 "I want to filter out the articles that belong to a certain category"。您已经取得了这个结果,但不满意某些特定文章(即 Jedi 的 Return)被退回,即使它符合您规定的标准。

你用 "does belong more to other categories" 的措辞正确地确定了问题的根源,但这是一个非常武断的规则,我认为你需要一些不那么主观的东西来解决问题。

换句话说,根据维基百科,"Return of the Jedi" 是宗教类别的成员,因此您需要澄清为什么不想要它,因为在你可以通过某种算法排除它之前得到一个结果。如果可以定义附加条件,则很可能可以优化过滤器以排除不需要的内容。例如,这可能会给您 "find all articles with the category Religion excluding those with the category Films"。

如果您能以更精确的方式重新表述您的英语语言要求,我相信它会带来解决方案。