動かざることバグの如し

3分経てば忘れそうなことをメモします

MeCabをPHPで使う

もうソース貼り付けるだけでいいよね(適当

Windows環境ver

<pre>
<?php
function exeMecab($str){
	//必ず[']で囲むこと
	$exe_path = 'D:\xampp\MeCab\bin\mecab.exe';
	$descriptorspec = array(
		0 => array("pipe", "r"),
		1 => array("pipe", "w")
	);
	$process = proc_open($exe_path, $descriptorspec, $pipes);
	if (is_resource($process)) {
		fwrite($pipes[0], $str);
		fclose($pipes[0]);
		$result = stream_get_contents($pipes[1]);
		fclose($pipes[1]);
		proc_close($process);
	}
	//\tを[,]に変換
	$result = str_replace("	", ",", $result);
	$tmp = array();
	//行で区切って配列に格納
	$tmp = explode("\r\n", $result);
	$num = 0;
	$resultAry = array();
	//各行に対して[,]で区切って配列格納
	while($tmp[$num] != "EOS"){
		$resultAry[$num] = explode(",", $tmp[$num]);
		$num++;
	}
	return $resultAry;
}
var_dump(exeMecab("エビフライはおいしい"));

2013年10月11日追記

Linux環境ver

<?php
function func($str){
	$mecab = new Mecab();
	$result = array();
	$nodes = $mecab->parseToNode($str);
	foreach($nodes as $node){
		if($node->posid === 0) continue;
		array_push($result, array("posid" => $node->posid, "surface" => $node->surface));
	}
	return json_encode($result);
}
$result = func("iPhoneをラインナップに加えたドコモから、冬モデルが発表された。");
$result = json_decode($result);
foreach($result as $ary){
	echo "品詞:" . $ary->posid . " 文字列:" . $ary->surface ."<br>";
}