SPAM、ベイジアン、中国語 4 - CakePHP へのベイジアン アルゴリズムの統合
上記の では、ベイジアン アルゴリズムのいくつかのオープン ソース実装について説明しました。この記事では、b8 と呼ばれるオープン ソース実装の 1 つを CakePHP に統合する方法について説明します。
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);
??? }
}
いくつかのメモ:
$standardRating は重要なポイントです。ベイズ確率がこの値より高い場合、メッセージはスパムとみなされ、そうでない場合はハムと見なされます。私は 0.7 に設定しましたが、状況に応じて変更できます。
/** * get the resource link of MySQL connection */ public function getDBOResourceLink() { return $this->getDataSource()->connection; }
この時点で、すべての準備が完了し、最終的にベイジアン アルゴリズムを使用してメッセージを分類できるようになります。
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('unmodera
ted');
??? 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 はメッセージが到着すると自動的に分類して学習します。基本的にはスパムから隔離されます。
注意: 初めて実行した後は、先ほど述べた createDB を FALSE に変更することを忘れないでください。
http://dingyu.me/blog/spam-bayesian-chinese-4