c# - 如何检测关键字堆砌?

标签 c# search freetext

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

我们注意到存在关键字堆砌滥用问题。

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

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

通过添加与文档背景颜色相同的字体颜色的文本,或者将字体大小设置为 1px 之类的值,这两种形式的滥用得以实现。

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

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

如有任何指导,我们将不胜感激!

最佳答案

使用可压缩性的概念可以为您的问题提供一个非常简单的解决方案。

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

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

完成后,您可以获取一份新文档并将其与均值和偏差进行比较。填充文档将被描述为那些与该词的平均值偏差非常大的单词(一个或两个单词重复多次的文档)或许多单词具有高偏差(文本 block 重复的文档)

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

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 标签的百分比更高或更低,那么您可能会检测到“填充”文档。

关于c# - 如何检测关键字堆砌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961274/

相关文章:

sql-server - Google 喜欢在 SQL Server 中使用全文搜索进行搜索查询

sql - FreeText 查询很慢 - 包括 TOP 和 Order By

c# - MSBuildWorkspace.Create() - 支持的语言为零

C# 隐藏程序定时器

javascript - 如何在 div 面板中搜索组词

php - 如何让谷歌搜索像这样显示我的网站

c# Intersection 和 Union 不能正常工作

SQL 模糊搜索和类似 Google 的改进

c# - 获取 Sharepoint Online 用户

c# - 我如何通过自己的身份验证/成员身份提供商为 DNN 6 构建?