英語だと、単語はスペースで区切るという習慣があるので、単語の出現頻度を測定したりするのは非常に楽である。ところが日本語には単語単位の区切りがない。
そこで検索には「わかち書き」という字句解析がどうしても必要になる。字句解析といっても、やはり統計量を使わないといけないので、ちょうどかな漢字変換の逆を推定しながらやるようなものだ。大きなカテゴリで言えば、形態素解析(品詞分析)の一つの形態といえるのだろうか。品詞使わないだけで品詞の推定は必要という。だって単純に文字種の区切りで「わかつ」と酷いことになるからね。
しかし、使ってみると・・・
極少ない例だが これらが全て1単語として扱われる(笑) 。口語体の分析には辞書の洗練が不可欠とは言え、デフォルト状態がこれでは少々困ったことになる。
例えば、水道工事が全文中にただ1つしか出てこなかったとき、この単語で検索インデックスを作成すると 「工事」ではひっかからなくなる ということだ。
MeCabは 京都大学情報学研究科−日本電信電話株式会社 コミュニケーション科学基礎研究所共同研究ユニット プロジェクトを通じて開発されたオープンソース形態 素解析エンジンです. 言語, 辞書,コーパスに依存しない汎用的な設計を基本 方針としています. パラメータの推定に Conditional Random Fields (CRF) を用いており, ChaSenが採用して いる隠れマルコフモデルに比べ性能が向上しています。 また、平均的に ChaSen, Juman, KAKASIより高速に動作します
ほほう? こんなものがフリーで使えるなんて! すごい時代になったものです。上記例を試してみよう。
これは素晴らしいですな。
ウチではkakasiよりダイブ遅いようです。2MBのテキストファイルを食わせた場合・・・
$ ls -l a.txt -rw-r--r-- 1 avivo avivo 2302525 2009-05-17 15:56 a.txt
かかし(2.3.4)の場合、
$ time kakasi -w < a.txt > b.txt real 0m0.378s user 0m0.344s sys 0m0.024s
めかぶ(0.98pre2+IPA辞書)の場合、
$ time mecab -Owakati < a.txt > c.txt real 0m1.701s user 0m1.452s sys 0m0.248s
マシンはXEON3GHzデュアル、メモリ4GBで
という結果がが!!・・・・いろいろな文章で試したけど、少なくともmecab -Owakatiがkakasiより高速ってことはないみたい。
もしかしたらバージョン0.98pre付近になって何か内部構造が変わったのかもね。流石にオレのおつむではアルゴリズムを追いかけることはできないが、kakasiではやっていないであろうと思われる未知語の推定などがあるはずだから、統計量をひくアルゴリズムが多少高速だからといって全体が高速にはならないんだろうなー?とか邪推。
それでもま、この正確性は棄てがたいのでMeCabをしばらく使ってみようかなと思っています。しかし・・・今まで作った辞書また作り直しかonz