java通过贝叶斯算法实现垃圾邮件过滤详解
发布时间
阅读量:
阅读量
这篇文章属于「'Java开发邮箱系统'」系列文章之一。通过研读本系列的各类文章后,在掌握Java技术基础后你可以自行构建一个邮件服务器。
通常将此算法归类为垃圾邮件过滤器的一种常用方法;其理论基础主要来源于概率统计学的基本概念;鉴于这些相关知识在互联网上较为容易获取;因此,在本文中我们着重于实践操作而不深入探讨其背后的数学原理;具体操作步骤如下:
收集400份常规邮件以及400份垃圾邮件(通过搭建一台开放式的电子邮件服务器进行实施)。实施起来相对较为复杂,在无法找到足够数量的真实案例时可采用新闻报道作为替代方案。
接收邮件之后, 我们需将这些邮件进行分词(具体方法将在下篇文章详细讲解), 接着统计每个词语的发生频率, 将相关数据存储于数据库中. 由于存在垃圾邮件与非垃圾邮件之分, 因此在数据表中必须增加一个字段来区分这两类. 此外, 还需设置一个字段用于记录每个词语的MD5值, 另一个字段则用于记录该词语的发生频率(每当该词语出现一次时, 就相应地累加一次计数).
采用第二步的方法,对400封垃圾邮件和400封非垃圾邮件进行遍历处理。从而完成了贝叶斯过滤算法的基础训练阶段。
我们假设:
A=(该词的出现次数/所有垃圾词的总次数);
B=(该词的出现次数/所有非垃圾词的总次数);
接下来,当我们收到一封新邮件后:
第一步仍是对其分词,然后拿着这些词去数据库看是否存在。
当邮件中出现该词时,该邮件是垃圾邮件的概率= A / (A + B )
依次按照第二步的方法计算每个词的概率,并把结果命名为P1,P2,P3…………等等
该邮件是垃圾邮件的概率=(P1P2……PN)/[P1P2……PN+(1-P1)(1-P2)……(1-PN)]
全部评论 (0)
还没有任何评论哟~
