java通过贝叶斯算法实现垃圾邮件过滤详解

标签: java 算法 垃圾邮件 | 发表时间:2016-08-08 10:33 | 作者:bushyou
出处:http://www.iteye.com

本文是“java开发邮箱系统”系列文章之一,通过阅读本系列的文章,你可以通过Java实现一个邮件服务器。

 

    贝叶斯算法是常用的垃圾邮件过滤算法,理论依据主要是概率统计中的一些基本理论。因为这些都可以很方便的在网上查到,所以本文只讲实践,不讲数学知识。步骤如下:

  1. 准备400封正常邮件、400封垃圾邮件。(垃圾邮件的收集可以通过架设一台开放的邮件服务器来实现,比较麻烦的是正常邮件的收集。实在没办法可以使用一些新闻稿代替。)

  2. 收集到邮件之后,我们就要将这些邮件分词(利用java中文分词下一篇文章会介绍),然后计算每个词的出现的次数,写入数据库记录起来。因为邮件有垃圾邮件和非垃圾邮件两种,所以数据表中我们需要添加一个字段来区分这两种类型。另一个字段记录该词的md5值,一个记录该词出现的次数(该词每出现一次,就加1)。

  3. 通过第二步的办法,将400垃圾邮件和400封非垃圾邮件都跑一遍。就完成了最基本的贝叶斯过滤算法的训练阶段。

 

我们假设:

A=(该词的出现次数/所有垃圾词的总次数);

B=(该词的出现次数/所有非垃圾词的总次数);

接下来,当我们收到一封新邮件后:

  1. 第一步仍是对其分词,然后拿着这些词去数据库看是否存在。

  2. 当邮件中出现该词时,该邮件是垃圾邮件的概率= A / (A + B )

  3. 依次按照第二步的方法计算每个词的概率,并把结果命名为P1,P2,P3…………等等

  4. 该邮件是垃圾邮件的概率=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [java 算法 垃圾邮件] 推荐:

java通过贝叶斯算法实现垃圾邮件过滤详解

- - 互联网 - ITeye博客
本文是“java开发邮箱系统”系列文章之一,通过阅读本系列的文章,你可以通过Java实现一个邮件服务器.     贝叶斯算法是常用的垃圾邮件过滤算法,理论依据主要是概率统计中的一些基本理论. 因为这些都可以很方便的在网上查到,所以本文只讲实践,不讲数学知识. 准备400封正常邮件、400封垃圾邮件.

邮件服务器垃圾邮件防范术

- - 互联网 - ITeye博客
从互联网诞生之日起,垃圾邮件就相伴相随,尤其是随着网购的普及,垃圾邮件更呈“遍地开花” 蔓延之势,防不胜防的垃圾邮件轻则令人占用邮箱容量浪费用户时间,重则造成财产损失,因此对垃圾邮件的“严防死守”一直是邮件系统服务商的头等大事之一, 也是衡量一款邮件服务器是否足够优秀的指标之一. 我国素来是垃圾邮件的“重灾区”,但近年来这种状况却有所改善,据新华社报道:中国互联网协 会8月25日在京通报,我国互联网用户收到垃圾邮件占其邮件总量比例从2006年初的63.97%下降到2014年一季度的38.2%;中国在全球所占垃 圾邮件比例排名由2006年的第二下降至第五位.

启用反向解析(RDNS),避免邮件被误认为垃圾邮件

- 董玉伟 - 深度VPS
由于 VPSYOU 的PR机房母鸡磁盘故障,今天deepvps搬家到了他们的T2机房. 搬家一切顺利,最后测试邮件发送功能,发现居然正常的邮件也被当做了垃圾信仍到了垃圾信. 上网一顿搜索,原来启用反向解析(RDNS),就可以避免这种情况了. 可逆DNS(RDNS)就是反向解析,就是把IP解析成域名.

空Word文档附件:绕过垃圾邮件过滤的新方法

- - FreeBuf.COM | 关注黑客与极客
安全研究人员最近发现,垃圾邮件发送者们正在使用一种新的手法绕过垃圾邮件过滤系统——空Word文档. 垃圾邮件附件中的文档通常伪装成发票或者银行账单,但是这次说的垃圾邮件却是一份空文档,文档里携带了一段用来感染受害者电脑的宏. 注:宏是Office软件中的一个功能,把常用的动作写成宏,当在工作时,就可以直接利用事先编好的宏自动运行以完成某项特定的任务.

[Java Web]敏感词过滤算法

- - CSDN博客推荐文章
DFA算法的原理可以参考 这里,简单来说就是通过Map构造出一颗敏感词树,树的每一条由根节点到叶子节点的路径构成一个敏感词,例如下图:. LOG.error("sensitiveWordMap 未初始化!");. LOG.error("敏感词库文件转码失败!");. LOG.error("敏感词库文件不存在!");.

Java排序算法:归并排序

- - zzm
 Java排序算法(九):归并排序. 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的. 然后再把有序子序列合并为整体有序序列. 归 并排序是建立在归并操作上的一种有效的排序算法. 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.

[转]《Effective Java》中推荐的hashCode算法

- - 荒岛码农
Google首席Java架构师Joshua Bloch在他的著作《Effective Java》中提出了一种简单通用的hashCode算法:. 初始化一个整形变量,为此变量赋予一个非零的常数值,比如int result = 17;. 选取equals方法中用于比较的所有域,然后针对每个域的属性进行计算:.

大水二冲龙王庙,中国谷歌开发者日邀请信被 Gmail 判为垃圾邮件

- 瑠音北樟 - 谷奥——探寻谷歌的奥秘
2011谷歌中国开发者日的申请者陆续已经收到了大会发来的邀请邮件,但是令人匪夷所思的是很多人(包括我)竟然在Gmail的“垃圾邮件”里找到了邀请信:. 根据大会官方微博的说法,邀请信已经重新发送,可是更搞笑的是,它仍然出现在了“垃圾邮件”里. 只能怪谷歌的垃圾邮件过滤算法太强大了,强大到六亲不认了.

最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现

- - Java - 编程语言 - ITeye博客
原文: http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html.  It implements a few well known tricks to use less memory by only hanging on to two arrays instead of allocating a huge n x m table for the memoisation table.

Java加解密艺术之DES对称加密算法

- - CSDN博客推荐文章
加密的时候使用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密 * @see DES是美国国家标准研究所提出的算法. 由于加解密的数据安全性和密钥长度成正比,故DES的56位密钥已经形成安全隐患 * @see 后来针对DES算法进行了改进,有了三重DES算法(也称DESede或Triple-DES).