[PHP]複合名詞に対応させて分かち書きをする

今回も igo-php を用いた形態素解析のサンプルなので、導入については こちら を御覧ください。

通常分かち書きをする場合、名詞は細かく分割され、次のように解釈されます。

「これは形態素解析の実験結果です。」 → 「これ | は | 形態素 | 解析 | の | 実験 | 結果 | です | 。」

もちろん間違ってはいないのですが、感覚的には「形態素解析」「実験結果」はそれぞれひとつの単語でまとめられていたほうが自然です。
「東京特許許可局」などの場合も同様に一つの単語として扱うことがほとんどです。

法則を見てみると、名詞が連続している場合は複合名詞になるというシンプルなものなので、
それを踏まえて次のようにしてみました。

<?php
require_once 'lib/Igo.php';

$igo = new Igo(dirname(__FILE__) . "/ipadic", "UTF-8");
$str = "これは形態素解析の実験結果です。";
$result = $igo->parse($str);

$noun = "";
$words = array();
foreach($result as $value){
  $feature = explode(",", $value->feature);
  if($feature[0] === "名詞"){
    $noun .= $value->surface;
  } else {
    if(mb_strlen($noun)) $words[] = $noun;
    $noun = "";
    $words[] = $value->surface;
  }
}
if(mb_strlen($noun)) $words[] = $noun;
print_r($words);

結果: 「これ | は | 形態素解析 | の | 実験結果 | です | 。」

名詞が現れた場合は一旦 $noun に保管しておき、その他の場合は単語として $words に追加します。
連続して名詞が現れた場合は $noun に追加します。