用于从有意义的文本中分离无意义文本的算法

时间:2009-02-01 22:05:48

标签: algorithm filter word nlp spam

我为我的一些程序提供了反馈功能。不幸的是,我忘了包含某种垃圾邮件保护 - 所以用户可以将他们想要的任何内容发送到我的服务器 - 每个反馈都存储在一个巨大的数据库中。

一开始我定期检查这些反馈 - 我过滤掉了可用的和删除的垃圾。问题是:我每天收到900条反馈。只有4-5个非常有用,其他消息大多是两种类型的乱码:

  • 废话:jfvgasdjkfahs kdlfjhasdf(人们在键盘上粉碎头脑)
  • 语言我不明白

到目前为止我做了什么:

  1. 我安装了一个过滤器来删除任何包含“asdf”,“qwer”等的反馈...... - >每天只有700个

  2. 我安装了一个字词过滤器来删除任何包含错误语言的内容 - >每天600(不要问 - 但那里有很多奇怪的人)

  3. 我会过滤掉包含未在我的语言中使用的字母的任何消息 - >每天400个
  4. 但每天400仍然太多了。所以我想知道是否有人之前已经处理过这样的问题并且知道某种算法来过滤掉无意义的消息。

    真的很感激任何帮助!

11 个答案:

答案 0 :(得分:12)

如何使用贝叶斯垃圾邮件过滤器的一些现有实现而不是实现自己的实现。我在DSpam上取得了不错的成绩

答案 1 :(得分:12)

稍微不同的方法是设置系统以将反馈消息通过电子邮件发送到帐户并使用标准垃圾邮件过滤。你可以通过gmail发送它们并让它们过滤掉它。不完美,但也没有太多的努力来实施。

答案 2 :(得分:6)

如果您只是期待(或关心)英语评论,那么为什么不在上传的反馈中简单计算有效单词的数量(相对于某些词典)。如果数字超过某个阈值,请接受反馈。如果没有,请将其丢弃。通过添加词典,可以将这种简单的启发式扩展到其他语言。

答案 3 :(得分:6)

您可以尝试使用许多垃圾邮件过滤器使用的贝叶斯算法。

Better Bayesian Filtering

Wikipedia explanation

Some open Source

答案 4 :(得分:5)

我在其中一个网站(很长时间)的留言簿功能中遇到了垃圾邮件问题。我的解决方案只是添加一个类似验证码的Q& A字段,询问用户“你是垃圾邮件机器人吗?”任何包含单词“no”的答案(通过“不,我不是”,“nope”和“根本没有”,只是为了好玩......)允许用户发布...

我选择不使用验证码的原因只是我的用户想要对网站更“舒适”的感觉,并且验证码感觉太正式了。这更个人=)

答案 5 :(得分:3)

最简单的方法是计算每个字母的出现次数。 E是英文中最常见的字母,因此应该最常用。您还可以检查单词和有向图频率。查看here以获取最常用的英语列表

答案 6 :(得分:2)

查看Claude Shannon和Markov模特。这些导致了一种统计技术,用于评估字母组合来自指定语言源的概率。

Here是普林斯顿大学的一些相关课程笔记。

答案 7 :(得分:2)

Fidelis Assis和我一直在调整垃圾邮件过滤器OSBF-Lua,以便它可以轻松地适应其他应用程序,包括Web应用程序。这个垃圾邮件过滤器赢得了三年的TREC垃圾邮件竞赛。 (我不介意吹牛,因为算法是Fidelis的,而不是我的。)

如果您想尝试一下,我们在

处有“近乎beta”的代码
git clone http://www.cs.tufts.edu/~nr/osbf-lua-temp

我们距离发布整洁还有很长的路要走,但是如果您安装了automake 1.9,代码应该构建。我们中的任何一个都很乐意为您提供有关如何使用它来清理数据库并将其集成到您的应用程序中的建议。

答案 8 :(得分:0)

前面关于捆绑一些垃圾邮件过滤器贝叶斯启发式分类器的答案是一个好主意。对于你的应用程序,因为你似乎得到了很多长话无意义的单词,最好在你的解析器中启用一个选项来训练bigrams和trigrams;否则,许多无意义的单词将被视为“从未见过”,这不是您案例中最有用的解析。

答案 9 :(得分:0)

是的,就像人们指出的那样,你可以看一下垃圾邮件过滤器或马尔可夫模型。

更简单的方法是只计算每个响应中的不同单词并按频率排序。如果以下单词不在顶部,那么它可能不是有效的文本:

a ,......

它们是任何通常的英文文本中最常用的词。

答案 10 :(得分:0)

只需将评论存储在待处理状态,将其传递给Akismet或Defensio,然后使用该响应将其标记为潜在垃圾邮件或将其标记为活动状态。

http://akismet.com/

http://defensio.com/

我个人更喜欢Defensio的API,但它们的效果非常好。