形態要素解析エンジンChasenをPHPから利用する

ChasenPHPから利用する方法です。MeCabのほうが速いけどChasenが入っているレンタサーバのほうが多いみたいなので結構需要はあるんじゃないかなと思います。

Chasenが /usr/local/bin/chasen にあるとして下記のfunctionで利用できます。Chasenエンジン側はEUC-JPで、プログラムはUTF-8として扱っています。文字化けにご注意を。また、phpでproc_open関数が使えなければ何度挑戦しても空のarrayが返ってきます。

function chasen($string) {
	
	$chasen = array();
	if(function_exists('proc_open')) {
		$dspec = array(
			0 => array("pipe", "r"),
			1 => array("pipe", "w")
		);
		$process = proc_open("/usr/local/bin/chasen -F '%m\t%y\t%U(%P-)\n'", $dspec, $pipes);
		if(is_resource($process)) {
			fwrite($pipes[0], mb_convert_encoding($string, 'EUC-JP', "auto") . "\n");
			fclose($pipes[0]);
			$outputs = array();
			while(!feof($pipes[1])) {
				array_push($outputs, mb_convert_encoding(fgets($pipes[1], 1024), 'UTF-8', 'EUC-JP'));
			}
			fclose($pipes[1]);
			
			foreach($outputs as $output){
				array_push($chasen, split("\t", $output));
			}
			return $chasen;
			
		} else {
			return $chasen;
		}

	} else {
		return $chasen;
	}
	return $chasen;
}

使い方はかんたん。

$string = 'この文章を形態要素解析にかけます。エンジンはchasenです。';
$chasen_hash = chasen($string);

$chasen_hashは各単語(n)ごとにarrayとして

$chasen_hash[n][0] = 単語
$chasen_hash[n][1] = ヨミ
$chasen_hash[n][2] = 品詞名

となって返ってきます。

Chasenの取扱説明書はこちらにあります。http://chasen.naist.jp/stable/doc/chasen-2.2.3-j.pdf