9

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

一开始我会定期检查这些反馈——我过滤掉了可用的内容并删除了垃圾。问题是:我每天收到 900 条反馈。只有 4-5 条真正有用,其他消息大多是 2 种胡言乱语:

  • 废话:jfvgasdjkfahs kdlfjhasdf(人们在键盘上砸脑袋)
  • 我不懂的语言

到目前为止我做了什么:

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

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

  3. 我过滤掉任何包含未以我的语言使用的字母的消息 -> 每天 400 条

但是每天400仍然太多了。所以我想知道是否有人以前处理过这样的问题并且知道某种算法来过滤掉无意义的消息。

任何帮助将不胜感激!

4

11 回答 11

12

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

于 2009-02-01T22:10:01.877 回答
12

稍微不同的方法是建立一个系统,将反馈消息通过电子邮件发送到一个帐户并使用标准的垃圾邮件过滤。您可以通过 gmail 发送他们,让他们的过滤对其进行过滤。不完美,但也没有太多的努力来实现。

于 2009-02-01T22:11:23.530 回答
6

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

于 2009-02-01T22:10:16.497 回答
6

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

更好的贝叶斯过滤

维基百科解释

一些开源

于 2009-02-01T22:18:49.303 回答
5

很久以前,我在我的一个网站上的留言簿功能中遇到了垃圾邮件问题。我的解决方案是简单地添加一个类似于验证码的问答字段,询问用户“你是垃圾邮件机器人吗?” 任何包含“不”一词的答案(让通过“不,我不是”,“不”和“一点也不”,只是为了好玩......)允许用户发布......

我选择不使用验证码的原因很简单,因为我的用户希望网站有一种更“舒适”的感觉,而验证码感觉太正式了。这更个人化=)

于 2009-02-01T22:11:35.383 回答
3

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

于 2009-02-01T22:13:34.350 回答
2

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

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

于 2009-02-01T22:08:26.000 回答
2

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

如果您想尝试一下,我们有“接近测试版”的代码

git clone http://www.cs.tufts.edu/~nr/osbf-lua-temp

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

于 2009-02-07T21:40:33.303 回答
0

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

于 2009-02-02T14:10:30.630 回答
0

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

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

the , a , in , of , and , or , ...

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

于 2009-02-07T21:58:24.097 回答
0

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

http://akismet.com/

http://defensio.com/

我个人更喜欢 Defensio 的 API,但它们都运行得非常好。

于 2009-02-07T22:03:14.443 回答