【问题标题】:Filter out Wikipedia articles by category按类别过滤维基百科文章
【发布时间】:2017-08-06 00:23:11
【问题描述】:

我有一个 Wikipedia 转储,我想过滤掉属于某个类别(例如“宗教”)的文章。我知道每篇文章在text 字段的底部都有一个类别列表,但问题是只列出了直接的类别(例如,“耶稣”文章属于“宗教”类别,但“宗教”本身未在底部列为其类别之一)。

我的方法

我的第一种方法是使用categorylinks 表并给定一个特定的高级类别,例如“宗教”,遍历列出每个类别或页面底部的“宗教”的类别图。

问题

在我偶然发现这种情况之前,我做得很好:

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

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

其他解决方案

一种可能的解决方案是,对于我在遍历图表时找到的每个类别|文章,检查它是否不属于我已经访问过的任何其他类别。问题是这不太行得通,因为在第二个高级类别之后,例如“宗教”可能有另一个不同于“宗教”的高级父级。

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

有什么想法吗?

编辑:使用 Wikipedia API 似乎不是一个选项(我需要过滤掉许多类别)。

【问题讨论】:

    标签: wikipedia graph-traversal


    【解决方案1】:

    我认为您需要回到最初的要求并澄清它。在您的问题中,您首先声明“我想过滤掉属于某个类别的文章”。您已经达到了这个结果,但不满意某些特定文章(即绝地归来)被退回,即使它符合您规定的标准。

    您已经正确地使用“确实属于其他类别”的措辞确定了问题的根源,但这被表达为一个非常武断的规则,您需要一些不太主观的东西来解决我认为的问题.

    换句话说,根据维基百科,“绝地归来”宗教类别的成员,所以你需要先澄清为什么你不希望它成为结果可以通过某种算法排除它。如果您可以定义其他条件,您很可能可以优化您的过滤器以排除您不想要的东西。例如,这可能会让您“找到所有属于宗教类别的文章,不包括那些属于电影类别的文章”。

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

    【讨论】:

    • 确实如此。我想像belongs_to(article, category_to_exclude) and not belongs_to(article, list_of_categories_to_include) 这样的事情会奏效。不得不多想。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多