php_mecabで複合名詞を取り出すサンプルコード

この記事について

環境PHP、php_mecab
目的複合名詞(名詞の連続)を一つにまとめて取り出す
結果parseToNodeで回して名詞が続く間バッファに連結し、途切れたら配列に追加する

単純に名詞が連続したら一つにまとめて取り出しています

サンプルコード

<?php

// Mecabオブジェクトを生成
$mecab = new MeCab_Tagger();
$txt = "テキスト文章から複合名詞の単位で名詞のみ取り出しています。";
$meisi = array();	//名詞配列
$word = '';			//複合名詞保存用バッファ変数

//名詞が見つかったらバッファに連結保存。
//名詞ではなかったらバッファの文字列(複合名詞)を名詞配列に追加し、バッファクリア。
for($node=$mecab->parseToNode($txt); $node; $node=$node->getNext()){
	if($node->getStat() != 2 && $node->getStat() != 3 && mb_strpos($node->getFeature(), '名詞', NULL, 'utf-8')===0){
		$word .= $node->getSurface();
	} else if ($word != '') {
		array_push($meisi, $word); //渡された変数をarrayの最後に加える
		$word = '';
	}
}

//最後が名詞で終わった場合用の追加処理。
if ($word != '') array_push($meisi, $word);
//名詞の重複削除
$meisi = array_unique($meisi);

print("<pre>");
print_r($meisi);
print("</pre>");
?>

関連記事

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