この記事について
| 環境 | 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>");
?>
