我有一个维基百科转储,我想过滤掉属于某个类别的文章(例如,' Religion')。我知道每篇文章都在text
字段底部有一个类别列表,但问题是只列出了直接类别(例如,耶稣'文章属于' ;宗教'类别,但'宗教'本身未被列为其底层类别之一。)
我的方法
我的第一种方法是使用categorylinks
表并给出某个高级别类别,例如宗教',遍历列出列出'的每个类别或页面的类别图表。宗教'在页面底部。
问题
我做得很好,直到我偶然发现了这种情况:
Religion - > Religon and society - > Religion and science - > Religion in science fiction - > Jedi - >关于星球大战的类别和文章。
所以,通过我的算法,文章Return of the Jedi属于高级别类别宗教(并且,确实如此)......但我并不想过滤掉&# 39;绝地归来' 导致它does belong more to other categories
(我想这是主要问题,如何辨别给定文章的不同类别的权重)。
另一种解决方案
一种可能的解决方案是在遍历图表时找到的每个类别文章,检查它是否不属于我已经访问过的任何其他类别。问题是并不是很有效,因为第二个高级别类别,例如,' Religion'可能有另一个高级别的父母与“宗教”不同。
另一种可能的解决方案是将遍历切换到某个级别,例如3.这将修复前一个例子;现在问题出在哪个层面(启发式?)。并且,虽然它们属于指定的高级类别,但某些文章仍然是最佳解决方案。使用PetScan,并在深度2处切断遍历可以提供大约12000篇文章:很少有文章,但仍有一些误报'比如Bertrand Russell'。
有什么想法吗?
编辑:使用维基百科API似乎不是一个选项(我需要过滤掉许多类别)。
答案 0 :(得分:1)
我认为您需要回到初始要求并澄清它。在您的问题中,您已经开始陈述"我想过滤掉属于某个类别的文章"。你已经实现了这个结果,但不满足于返回一些特定的文章(即绝地归来),即使它符合你所陈述的标准。
您已经使用"的措辞正确识别问题的根源;确实更属于其他类别",但这表示为非常随意的规则,您需要我认为不太主观的东西来解决问题。
换句话说,"绝地归来" 是根据维基百科的宗教类别的成员,因此您需要在通过某种算法排除之前澄清您为什么不想要它。如果您可以定义其他条件,则很可能会优化过滤器以排除您不想要的内容。这可能会让您找到所有类别为Religion的文章,但不包括类别为Films"的文章。
如果您能够以更精确的方式重新定义您的英语语言要求,我相信它会引导您找到解决方案。