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"); //クエリの文字コードを設定   
         //
 
     }

日本語ってやっかいだな。

スペシャルサンクス