nullnull7の日記

プログラミング、写真、旅、その他日常について。

mecab, cabocha, juman, knpの処理速度とか

knpを初めて使ってみたら結構処理が遅かったので、どれくらい速度に差があるのか検証してみました。
速度のオーダーを確かめてみる程度の検証です(真面目な検証ではない)


■実験設定
pythonからsubprocessを使って*1各ツールを呼び出し
ウェブコーパスからn文を解析して、1文辺りの時間を計測、ツール間で比較しました
KNPは解析速度が文字数により指数的に低下するようなので、KNPについては文字数を変えて実験してみました。(mecab, cabochaはそこまで文字数に依存しない)
日本語の1文は、だいたい30~40文字くらいの目安感です(きっちりした文章だともうちょい長い)
40文字ってどれくらいかと言うと
「特に上流部なんかは補充が効かないところが多く、一度やられると少し時間がかかります」
これできっちり40文字。


■実験結果

解析器 入力文数 1文の文字数 実行時間 1文辺りの実行時間(およそ)
(入力をそのまま出力) 10^6 - 7sec 10^-5 sec
MeCab 10^4 20~40 12sec 10^-3 sec
CaboCha 10^3 20~40 5sec 5*10^-3 sec
CaboCha 10^3 80~100 15sec 10^-2 sec
juman + KNP 10^2 0~20 8sec 10^-1sec
juman + KNP 10^2 20~40 40sec 5*10^-1sec
juman + KNP 10^2 40~60 120sec 1sec
juman + KNP 10 60~80 23sec 2sec

こうしてみると、改めてcabochaは速いですね。
KNPはcabochaの100~1000倍程度の目安。文字数が多めになってくると1文1秒程度ですね。

*1:mecabとcabochaはpythonバインディングがありますが、knpはなかったのでknpに合わせました