`

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

 
阅读更多

本文是“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)]

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics