PHPでベイジアンフィルタを使ってみる

主にここを参考に
http://castor.s26.xrea.com/blog/2008/02/18

ライブラリはここ
http://www.xhtml.net/php/PHPNaiveBayesianFilter
http://www.xhtml.net/documents/scripts/phpnaivebayesian-1.0.zip

上記のページを参考にして_getToken()をオーバーライドするNaiveBayesianJPを作成する。
ただし、今回はYahoo!の日本語形態素解析サービスを使わずngramで対応するよう修正する

|php|
class.naivebayesian_jp.php
<?php

class NaiveBayesianJP extends NaiveBayesian {
var $min_token_length = 2;

function _getTokens($string) {  
  $tokens = array();  
  $tokens = $this->_parseNgram($string);

  return $tokens;  
}

/**  
 * 単語をNgramに分割する  
 *  デフォルトは2gram  
 *  
 * @param string  $str  
 * @param integer $n  
 * @return multitype:string  
 */  
function _parseNgram($str, $n = 2) {  
  $buff = array();

  $lines = mb_split("[\r\n]", $str);

  foreach ($lines as $line) {

    // ngramに分割する  
    for ($i = 0; $i + $n <= mb_strlen($line); $i++) {  
      $tmp = mb_substr($line, $i, $n, "utf8");  
      $tmp = trim($tmp);

      if (empty($tmp))  
        continue;

      if (empty($buff[$tmp]))  
        $buff[$tmp] = 0;

      $buff[$tmp]++;  
    }  
  }

  return ($buff);  
}

}
?>
||<