`

SPAM、Bayesian和中文 4 - 在CakePHP中集成贝叶斯算法

阅读更多

上文提到了贝叶斯算法的几种开源实现,本文说说如何将其中一种名为b8的开源实现集成进CakePHP。

下载b8及安装

  1. b8的站点下载最新版本,将其解压至vendors目录,文件位置如vendors/b8/b8.php;
  2. 用文本编辑器打开vendors/b8/etc/config_b8,修改databaseType为mysql;
  3. 用文本编辑器打开vendors/b8/etc/config_storage,修改tableName为你用来存储关键字的数据表的名字,修改createDB为TRUE,要注意的是,当你第一次运行b8后,它会建立上述数据表,然后你要重新把createDB改为FALSE;
  4. 用文本编辑器打开vendors/b8/lexer/shared_functions.php,将38行的代码(在echoError())注释掉,否则b8会直接把错误信息显示在你的Cake应用中,当然这在调试程序时还是有用的。

为b8写一个wrapper component

为了让你的Cake能够调用到b8,你需要写一个component。在controllers/components/新建一个spam_shield.php,加入如下代码:

class SpamShieldComponent extends Object {

    /** * b8 instance */

    var $b8;

    /** * standard rating * * comments with ratings which are higher than this one will be considered as SPAM */

    var $standardRating = 0.7;

    /** * text to be classified */

    var $text;

    /** * rating of the text */

    var $rating;

    /** * Constructor * * @date 2009-1-20 */

    function startup(&$controller) {

        //register a CommentModel to get the DBO resource link

        $comment = ClassRegistry::init('Comment'); //import b8 and create an instance    

        App::import('Vendor', 'b8/b8');

        $this->b8 = new b8($comment->getDBOResourceLink()); //set standard rating   

        $this->standardRating = Configure::read('LT.bayesRating') ? Configure::read('LT.bayesRating') : $this->standardRating;

    }

 

    /** * Set the text to be classified * * @param $text String the text to be classified * @date 2009-1-20 */

    function set($text) {

        $this->text = $text;

    }

 

    /** * Get Bayesian rating * * @date 2009-1-20 */

    function rate() {

        //get Bayes rating and return return

        $this->rating = $this->b8->classify($this->text);

    }

 

    /** * Validate a message based on the rating, return true if it's NOT a SPAM * * @date 2009-1-20 */

    function validate() {

        return $this->rate() < $this->standardRating;

    }

 

    /** * Learn a SPAM or a HAM * * @date 2009-1-20 */

    function learn($mode) {

        $this->b8->learn($this->text, $mode);

    }

 

    /** * Unlearn a SPAM or a HAM * * @date 2009-1-20 */

    function unlearn($mode) {

        $this->b8->unlearn($this->text, $mode);

    }

}

几点说明:

  1. $standardRating是一个临界点。如果贝叶斯概率高于这个值,则此留言被认为是spam,否则是ham。我设置为0.7,你可以根据自己的情况修改;
  2. Configure::read('LT.bayesRating')是从系统运行配置中动态地获取上述临界点的值,这是我的做法,你可能用不到,根据情况稍微修改甚至不修改都行;
  3. Comment指的是评论的model;
  4. 由于b8需要获得数据库句柄以便能够操作数据表,所以在startup()中我写了$this->b8 = new b8($comment->getDBOResourceLink())一句,其中用到的getDBOResourceLink()马上会提及。

为b8传入数据库句柄

在models/comment.php中加入如下代码:

/** * get the resource link of MySQL connection */ public function getDBOResourceLink() { return $this->getDataSource()->connection; }

至此,准备工作全部做完,我们终于可以使用贝叶斯算法来分类留言。

使用b8分类留言

在controllers/comments_controller.php中,首先载入SpamShieldComponent:

var $components = array('SpamShield');

然后在add()方法中,做如下操作:

//set data for Bayesian validation

$this->SpamShield->set($this->data['Comment']['body']); //validate the comment with Bayesian

if(!$this->SpamShield->validate()) { //set the status

    $this->data['Comment']['status'] = 'spam'; //save

    $this->Comment->save($this->data); //learn it $this->SpamShield->learn("spam"); //render

    $this->renderView('unmoderated');

    return;

}

//it's a normal post

$this->data['Comment']['status'] = 'published'; //save for publish

$this->Comment->save($this->data); //learn it

$this->SpamShield->learn("ham");

如此一来,b8就会在留言到来时自动的分类并学习,你基本上已经与spam绝缘了!

提醒一下:第一次运行后,别忘了把刚才提到的createDB改为FALSE。

http://dingyu.me/blog/spam-bayesian-chinese-4

分享到:
评论

相关推荐

    Go-bayesian-Golang朴素贝叶斯分类

    通过深入理解这些概念并结合Go-bayesian库,开发者可以有效地在Go环境中构建和应用朴素贝叶斯分类模型,解决实际的机器学习问题。同时,也可以进一步研究如何与其他机器学习方法结合,提升分类效果。

    人工智能-项目实践-朴素贝叶斯分类器-朴素贝叶斯文本分类器

    人工智能_项目实践_朴素贝叶斯分类器_朴素贝叶斯文本分类器 **数据:**搜狗文本分类语料库 ...**分类器:**朴素贝叶斯分类器 NBC(Naive Bayesian Classifier) **编程语言:**Python+jieba分词库+nltk+sklearn

    贝叶斯滤波与平滑 bayesian filtering and smoothing

    通过贝叶斯滤波与平滑技术,可以在不确定性环境中,提供更加稳定和精确的系统状态估计,这在现代自动化与信息化社会中有着重大的意义。随着计算能力的提升和算法的完善,我们可以预期,贝叶斯滤波与平滑技术将在未来...

    Bayesian-machine-learn-data-mining贝叶斯机器学习数据挖掘

    在IT领域,贝叶斯机器学习和数据挖掘是两个至关重要的概念,它们在现代数据分析和预测建模中扮演着核心角色。贝叶斯方法是一种基于概率理论的学习框架,而数据挖掘则是从大量数据中发现有价值信息的过程。让我们深入...

    Bayesian-Modelling-in-Python, 关于贝叶斯建模技术( PyMC3 )的python 教程.zip

    Bayesian-Modelling-in-Python, 关于贝叶斯建模技术( PyMC3 )的python 教程 中的 模型 欢迎使用"。python 中的贝叶斯建模"- 关于学习如何在 python ( PYMC3 ) 中应用贝叶斯建模技术的教程。 本教程并不打算成为...

    Kalman-and-Bayesian-Filters-in-Python-master.zip

    这个压缩包名为"Kalman-and-Bayesian-Filters-in-Python-master.zip",其内容可能包含了源代码、教程、示例和其他辅助资料,帮助用户理解并实现在Python中应用卡尔曼滤波器和贝叶斯滤波器。 卡尔曼滤波(Kalman ...

    稀疏贝叶斯算法.zip

    下面将详细介绍稀疏贝叶斯算法的核心概念、实现原理以及在压缩感知中的应用。 一、稀疏贝叶斯学习(Sparse Bayesian Learning, SBL) 稀疏贝叶斯学习旨在寻找数据表示的最稀疏形式,其核心思想是假设模型参数...

    贝叶斯算法(bayesian)介绍

    贝叶斯是基于概率的一种算法,是Thomas Bayes:一位伟大的数学大师所创建的,目前此种算法用于过滤垃圾...在智能邮件过滤技术中,贝叶斯(Bayesian)过滤技术取得了较大的成功,被越来越多地应用在反垃圾邮件的产品中。

    朴素贝叶斯算法学习笔记2

    Pedro Domingos和Michael Pazzani在《On the Optimality of the Simple Bayesian Classifier under Zero-One Loss》中指出,朴素贝叶斯算法在非独立条件下仍能取得很好的效果,即使违背了属性独立的条件。...

    Bayesian-with-Python:贝叶斯与Python的程序员

    Hangul:针对程序员的Python的贝叶斯算法 应用: 2.目的 从贝叶斯概率的基础研究开始,并进行深入研究 3.目录 4.参考 GitHub(ENG): ...

    Naive-Bayesian-Subject-Line-Classifier:使用朴素贝叶斯算法将电子邮件主题行分类为垃圾邮件

    朴素贝叶斯主题行分类器使用朴素贝叶斯算法将电子邮件主题行分类为垃圾邮件/非垃圾邮件。 通过查找两个类别(即垃圾邮件/非垃圾邮件)中每个唯一单词的出现频率来工作,并使用从新电子邮件主题输入的训练中提取的...

    blitz-bayesian-deep-learning:一个简单且可扩展的库,可在PyTorch上创建贝叶斯神经网络层

    闪电战-火炬动物园中的贝叶斯层 BLiTZ是一个简单且可扩展的库,用于在PyTorch上创建贝叶斯神经网络层(基于“)。 通过使用BLiTZ图层和utils,您可以以不影响图层之间的交互的简单方式(例如,就像使用标准PyTorch...

    数据分类实验(贝叶斯算法)

    在这个实验中,我们关注的是使用朴素贝叶斯算法来实现数据分类。朴素贝叶斯算法是一种基于概率理论的分类方法,它假设各个特征之间相互独立,这在许多实际问题中虽然简化了计算,但依然能够提供相当不错的分类效果。...

    FullBNT-1.0.4_贝叶斯_贝叶斯网络_FullBNT-1.0.4_

    1. **机器学习:** 在分类、回归和特征选择等问题中,贝叶斯网络常被用作模型。 2. **医学诊断:** 基于症状和遗传信息,构建疾病诊断网络,预测疾病风险。 3. **风险管理:** 用于评估金融风险、工程安全风险等,...

    Applied Bayesian Statistics---With R and OpenBUGS Examples

    For Bayesian learning. For beginners. Easy but useful

    数据挖掘实验-C++实现贝叶斯Bayesian

    在这个特定的实验中,我们关注的是使用C++编程语言来实现贝叶斯(Bayesian)算法,这是一种基于概率论的统计方法。 贝叶斯方法的核心思想是贝叶斯定理,它描述了在已知某些先验信息的情况下,如何更新对事件发生的...

    awesome-bayesian-deep-learning, 一份专门用于贝叶斯深入学习的资源列表.zip

    awesome-bayesian-deep-learning, 一份专门用于贝叶斯深入学习的资源列表 awesome-bayesian-deep-learning一份专门用于贝叶斯深入学习的资源列表 table-内容理论论文/论文理论论文/论文 2013:深高斯 processes|...

    Naive-Bayesian-Subject-Line-Classifier-源码.rar

    标题中的“Naive-Bayesian-Subject-Line-Classifier”指的是一个基于朴素贝叶斯算法的邮件主题分类器。朴素贝叶斯是一种常见的机器学习算法,主要用于文本分类,尤其是在垃圾邮件过滤等领域有着广泛应用。在这个项目...

    MATLAB代码 Bayesian-Fusion-main_红外和可见光图像的贝叶斯融合_图像融合_

    标题中的“MATLAB代码 Bayesian-Fusion-main_红外和可见光图像的贝叶斯融合_图像融合_”指的是一项利用MATLAB实现的红外与可见光图像的贝叶斯融合技术,该技术是图像处理领域中的一种重要方法,主要用于提高图像的...

Global site tag (gtag.js) - Google Analytics