PHP Naive Bayesian Filterを使ったときにハマったこと
PHPでベイジアンフィルタ
を使うならPHP Naive Bayesian Filterなるものがある。
使い方はこちらが非常に参考になる。
日本語を扱うときの注意
追記(2010/07/04)
Connection内部だとうまくいかないときはWHEREが直接かかわってくる
select,execute内部に明記してやる。
function select($query,$class='recordset') { if (!$this->con_id) { return false; } if ($class == '' || !class_exists($class)) { $class = 'recordset'; } //change mysql_query("SET NAMES utf8"); //クエリの文字コードを設定 // $cur = mysql_unbuffered_query($query, $this->con_id); if ($cur) { # Insertion dans le reccordset $i = 0; $arryRes = array(); while($res = mysql_fetch_row($cur)) { for($j=0; $j<count($res); $j++) { $arryRes[$i][strtolower(mysql_field_name($cur, $j))] = $res[$j]; } $i++; } return new $class($arryRes); } else { $this->setError(); return false; } } function execute($query) { if (!$this->con_id) { return false; } //change mysql_query("SET NAMES utf8"); //クエリの文字コードを設定 // $cur = mysql_query($query, $this->con_id); if (!$cur) { $this->setError(); return false; } else { return true; } }
文字コードutf-8で日本語を扱うときに
phpnaivebayesian/class.mysql.php内で文字コードを指定してやらないと
WHEREなどで日本語を指定してもうまくいかない。
なのでConnectionを以下のように変更。
function Connection($user, $pwd , $alias='', $dbname) { $this->error = ''; $this->con_id = @mysql_connect($alias, $user, $pwd); if (!$this->con_id) { $this->setError(); } else { $this->database($dbname); } //change mysql_query("SET NAMES utf8"); //クエリの文字コードを設定 // }
日本語ってやっかいだな。