【问题标题】:How to detect keyword stuffing?如何检测关键字填充?
【发布时间】:2013-06-02 09:55:05
【问题描述】:

我们正在开发一种文档搜索引擎 - 主要专注于索引用户提交的 MS Word 文档。

我们注意到存在关键字填充滥用。

我们确定了两种主要的滥用行为:

  1. 重复同一个词,一次又一次
  2. 大量不相关的术语添加到文档中

通过添加字体颜色与文档背景颜色相同的文本或将字体大小设置为 1px 等方式,启用这两种滥用形式。

虽然确定背景颜色是否与文本颜色相同,但考虑到 MS 单词布局的复杂性,这很棘手 - 字体大小也是如此 - 因为任何截断似乎都可能是任意的 - 我们可能会不小心删除有效的如果我们将截断值设置得太大,则为文本。

我的问题是 - 是否有任何标准化的预处理或统计分析技术可用于减少此类关键字填充的影响?

任何指导将不胜感激!

【问题讨论】:

  • 为什么要删除任何东西?为什么不尝试检测(最终这是你能做的最好的尝试)并通知用户或惩罚他们的排名,可以这么说。
  • 除非您的容量非常大,否则是否可以进行有根据的猜测并标记文档以供管理员/版主审核?这可能有助于您避免因误报而惩罚他人。
  • @GrantThomas - 我们如何检测?你的意思是只看字体大小和颜色?
  • @ChrisSinclair 我们每天要处理大约 50k 份文件——太多了
  • 也许您可以自动化其中一种光学字符识别过程(如this one)。将 MSWord 文档“打印”到图像上,通过 OCR 运行它,并可能将其用于文字。或者,如果 OCR 文本和 Word 文本之间存在显着差异,请将其标记以供审核。大概如果文本在视觉上被隐藏或超小,OCR 就不会识别它。

标签: c# search freetext


【解决方案1】:

使用可压缩性的概念,您的问题有一个非常简单的解决方案。

如果您将 Word 文档转换为文本(您可以轻松地即时执行此操作),然后可以压缩它们(例如,使用免费的 zlib 库)并查看压缩率。普通文本文档通常具有大约 2 的压缩比,因此任何重要的偏差都意味着它们已被“填充”。分析过程非常简单,我分析了大约 10 万条文本,使用 Python 只需要大约 1 分钟。

另一个选项是查看文档/单词的统计属性。为此,您需要有一个“干净”文档样本并计算不同单词的平均频率以及它们的标准偏差。

完成此操作后,您可以获取一个新文档并将其与均值和偏差进行比较。填充文档将被描述为具有与该词的平均值高度偏差的几个词(一个或两个词重复多次的文档)或具有高偏差的许多词(文本块重复的文档)

这里有一些关于可压缩性的有用链接:

http://www.ra.ethz.ch/cdstore/www2006/devel-www2006.ecs.soton.ac.uk/programme/files/pdf/3052.pdf

http://www.ispras.ru/ru/proceedings/docs/2011/21/isp_21_2011_277.pdf

您也可以使用熵的概念,例如香农熵计算http://code.activestate.com/recipes/577476-shannon-entropy-calculation/

另一种可能的解决方案是使用词性 (POS) 标记。我认为名词的平均百分比在“正常”文档中是相似的(根据http://www.ingentaconnect.com/content/jbp/ijcl/2007/00000012/00000001/art00004?crawler=true 为 37%)。如果某些 POS 标签的百分比更高或更低,那么您可能会检测到“填充”文档。

【讨论】:

    【解决方案2】:

    正如 Chris Sinclair 在您的问题中评论的那样,除非您有 google 级别的算法(即使他们弄错了,因此有上诉程序),最好标记可能的关键字填充文件以供进一步人工审查...

    如果一个页面有100个词,你在页面中搜索关键字出现次数(渲染填充1px或bgcolor无关),从而获得关键字密度计数,确实没有硬性和快速的方法一定百分比的“总是”是关键字填充,一般 3-7% 是正常的。也许如果您检测到 10% 以上,那么您将其标记为“可能已填充”并留出供人工审核。

    进一步考虑这些场景 (taken from here):

    • 没有实质性附加值的电话号码列表
    • 列出网页试图为其排名的城市和州的文本块

    以及关键字的上下文是什么。

    很难正确地做到这一点。

    【讨论】:

    • 但是 OP 建议每天 50k 文档。这是站不住脚的。因此,他要求提供有关自动化隔离的建议。
    • 在这种情况下,您可以执行已经建议的操作,即标记文档,处罚/通知文档作者,并且像谷歌那样,为您搞砸的时间提供上诉流程。跨度>
    • 这也引出了一个问题,如果每天要检查 50,000 份文档,平均发现“填充”的百分比是多少。
    【解决方案3】:

    使用前景色/背景色检测来检测标签滥用,就像您已经做的那样。 对于大小检测,计算平均文本大小并删除异常值。 还要对 textsize 设置预定义的限制(就像你已经做的那样)。

    接下来是标签“blob”的结构。 对于您的第一点,您可以只计算单词,如果一个单词出现的频率太高(可能是第二个单词的 5 倍),您可以将其标记为重复标签。

    在批量添加标签时,用户通常会将它们全部添加到一个位置,因此您可以查看已知的“欺诈标签”是否彼此相邻(可能中间有一个或两个词)。

    如果您至少可以识别一些常见的“欺诈标签”并希望获得更高级的信息,那么您可以执行以下操作:

    • 将文档拆分为具有相同文本大小/字体的部分,并分别分析每个部分。为了获得更好的结果,对使用几乎相同字体/大小的部分进行分组,而不仅仅是那些字体/大小完全相同的部分。
    • 计算每个已知标签的出现次数,当超出您设置的某个限制时,文档的这一部分将被删除或文档被标记为“不良”(如“使用过多的标签”)

    无论您的检测有多先进,只要人们知道它的存在并且或多或少知道它是如何工作的,他们就会想方设法绕过它。

    当发生这种情况时,您应该标记有问题的文档并自己查看它们。然后,如果您注意到您的检测算法出现误报,您可以改进它。

    【讨论】:

      【解决方案4】:

      如果您注意到一种模式,即常见的填充器总是使用低于特定大小的字体大小,并且该大小(即 1-5)不是真正可读的,那么您可以假设那是“填充部分”。

      然后您可以继续检查字体颜色是否也与背景颜色相同并将其删除。

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2020-01-20
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-13
        • 2016-05-21
        相关资源
        最近更新 更多