mecab + PHP で形態素解析(出現頻度)

mecab + PHP形態素解析をやってみたときのメモです。Yahoo!さんの日本語形態素解析APImecab PHP 用の拡張モジュールもありますが、windows vista PC にインストールした mecab を直接使用し、その結果をPHPでパースして出現頻度を算出する、ということをやってみました。

    • -

※もしかしてはまった人も??
手元の Windows Vista PC では、mecab を 「C:\Program Files」フォルダ以下にインストールしたところ、mecab を実行できませんでした。「C:\myapp\mecab」のようにスペースを含まないフォルダにインストールしたら実行できました。

    • -


参考にしたのは以下の人力検索
PHPについて質問致します。 形態素解析を行うにあたっていくつかの形態素解析エンジンを比較していった結果、 MeCab(http://mecab.sourceforge.jp/)を使用することに致しま.. - 人力検索はてな
(どうでもいいですけどTITLEが長する・・・)

<?php
$mecabpath = 'C:\..省略..\MeCab\bin\mecab.exe' ; // mecab.exe のパス
$inputfile = 'C:\..省略..\test.txt' ;// 解析対象の文書ファイル
exec("$mecabpath $inputfile", $result);

$word_list_index = $word_list = array();
foreach ($result as $val) {
	$tmp = explode(",", $val);
	$tmp = explode("\t", $tmp[0]);// $tmp[0]: 要素, $tmp[1]: 品詞
	if ($tmp[1] == '名詞') {
		$key = array_search($tmp[0], $word_list_index);
		if ($key === false) {// 新出
			$word_list[] = array('num' => 1, 'word' => $tmp[0]);
			$word_list_index[] = $tmp[0];
		} else {// 既出
			$word_list[$key]['num'] = $word_list[$key]['num'] + 1;
		}
	}
}
unset($word_list_index);

arsort($word_list);
echo '<table border="1" cellpadding="5">';
foreach ($word_list as $val) {
	echo "<tr><td>{$val['num']}</td><td>{$val['word']}</td></tr>\n";
}
echo "</table>";
?>

以下の文書ファイル(wikipediaPHP)を上記スクリプトで解析してみました。

PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。
PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。
ウェブサーバ上で動作し、ウェブサーバ上の文書が要求されるたびに、この文書に記述されたPHPのプログラムを実行し、その結果をウェブブラウザに対して送信する。
ウェブブラウザに送信されるデータは通常のHTMLであり、PHPのプログラムを含まない。この点でHTML埋め込み型のクライアントサイド・スクリプト言語(JavaScriptなど)と本質的に異なっている。
平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。
数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。

6言語
4PHP
4HTML
2報告
2文書
2動的
2送信
2
2処理
2
2
2記述
2開発
2プログラム
2データ
2ウェブブラウザ
2ウェブサーバ
2こと
1利用
1要求
1目的
1本質
1平易
1文法
1分類
1動作
1
1
1
1通常
1多く
1存在
1脆弱
1生成
1
1深刻
1初心者
1習得
1手助け
1
1実行
1実現
1自体
1結果
1規模
1過去
1
1一方
1ワーク
1ライブラリ
1ホール
1プログラミング
1プリプロセッサ
1フレーム
1ピー・エイチ・ピー
1ハイパーテキスト
1セキュリティ
1スクリプト
1サイド
1サーバ
1クライアントサイド・スクリプト
1オープンソースウェブアプリケーション
1ウェブページ
1ため
1たび
1Preprocessor
1JavaScript
1Hypertext
1C
1: