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);
}

}
?>
||<

タイトルとURLをコピーしました