如果您试图阻止垃圾邮件单词、句子,例如“fasdhusdhfi”,而不是其他任何内容,您总是可以拥有一个单词及其同义词的数据库。然后,您可以检查输入在数据库中的已知单词是否少于 50%,您可以提出一个标志。您可以创建一个我不推荐的离线数据库,或者您可以使用一些在线数据库。对于单词列表,我建议
http://thesaurus.com/
对于这些词的同义词列表,我建议
http://www.synonyms.net/
我认为这两个可能是上述目的的最佳选择,因为它们都有一个您可以使用的 API(对于 synonyms.net,它位于 this 页面上),因此它不需要解析返回的页面中的单词.
然后,您可以将其与其他方法(如前所述)结合使用,例如贝叶斯过滤。
虽然这并不能真正满足您的 AI 需求,但它确实会阻止一系列消息。
为了满足您的“AI”要求,您可能能够适应 ALICE's Spam.aiml。它采用AIML 格式,但包含大量4 符号垃圾邮件的排列。这样做的问题是它很慢。
Spam.aiml 的一种可能替代方法是使用英语语言规则来检测垃圾邮件并对其进行过滤。可以使用以下规则:
每个单词必须至少有一个元音。为此,字母“Y”被视为元音。
没有一个单词连续超过 3 个辅音。为此,“TH”被认为是一个字母(以免弄乱“strNGTH”之类的词)。
没有一个词长于 34 个字母。例外情况是列出的字词here。
某些字母组合不能出现。例如,字母“R”和“C”在常规的非俚语对话中永远不会直接并排出现。
您可以拥有一个包含不可能组合的数据库。我通过对包含 6578 个单词的数据库运行 2 个字母的每个排列来制作一个小的,并得出以下结果:
df bf kf gf jk kj sj fj gj hj lj sl
这些都是不可能的组合。当然,省略了诸如“zz”之类的组合。它们是:
aa bb cc dd ee ff gg hh ii jj kk ll mm nn pp qq rr ss tt uu vv ww xx yy zz
'oo' 被省略,因为它出现在许多单词中,例如 'look'。
长度超过 2 个字符且连续重复的字符串段将被标记为垃圾邮件。在字符串“lololololol”中,重复段为“lo”,并被标记为垃圾邮件。
同一个单词中超过 3 个相同的元音会被标记为垃圾邮件。例如:“oooouuuu”将被标记为垃圾邮件,因为“o”和“u”是重复超过 3 次的元音。
任何大于 1 个字符的单词都不能仅由元音组成。在这种情况下,“Y”不会被视为元音,以免误报“you”。
任何不符合这些规定 15% 或更多(拼写错误的余量)的输入都将被重定向到垃圾邮件。
如果你决定修改 ALICE 的文件,你可以得到很多here。更新版本可以在ALICE's Google Code page找到。
您还可以使用拼写检查器来帮助检测垃圾邮件。您可以针对诸如PyEnchant(对于Python)之类的拼写检查器运行输入,并阅读建议。如果输入没有建议,那么在大多数情况下可以安全地假定它是垃圾邮件。
它并不完美,但它应该在有限的范围内。我做了一个小程序来演示这样的垃圾邮件过滤会产生什么结果。这是输出:
>>> fdsahjfsd
'fdsahjfsd' is spam since more than 3 consonants appear in a row
>>> fhsdjhfksd
'fhsdjhfksd' is spam since it has no vowel
>>> jfsdkjl
'jfsdkjl' is spam since it has no vowel
>>> dk
'dk' is spam since it has no vowel
>>> ddds
'ddds' is spam since it has no vowel
>>> uxxs
'uxxs' is not spam
>>> kd
'kd' is spam since it has no vowel
>>> ukd
'ukd' is not spam
>>> asdjaskljlaskjldkasjkljdklas
'asdjaskljlaskjldkasjkljdklas' is spam since it is too long
>>> hdjaskj
'hdjaskj' is spam since invalid sequences detected
正如我之前所说,它并不完美,因为它会返回误报(例如“uxxs”),但这可以通过拼写检查实现来解决。
使用拼写检查实现的回退是您的垃圾邮件检测将基于字典中的单词数量。大多数拼写检查器只有前 10,000 个单词,因此一些不常见的单词可能会被阻止为垃圾邮件。但是,检查是否有超过 15% 的输入无效可以解决这个问题。
如果你觉得对你有帮助,可以获取我从here制作的小程序。它是用 Python 编写的。
此外,正如这里的其他答案所说,“最先进的”垃圾邮件过滤器需要多种方法。
您可以使用SpamAssasin、PyZor、Reverend 和Orange,但最好的办法可能是将所有这些组合在一起。
如果你想为此使用 Lisp,一篇关于 Lisp 中贝叶斯过滤的好文章位于 here。
如果您想通过神经网络执行此操作,那么this Codeproject 文章可能会很有用。它利用了一个简单易用的dll,示例代码几乎可以直接用于垃圾邮件过滤任务。