Rubyによる形態素解析エンジンokura 0.0.1をリリースしました
12月にさくさくテキストマイニングで発表したpure Rubyによる形態素解析エンジンをgem化しました。
まだ発展途上で機能が少なかったりパフォーマンスが悪かったりしますが、いちおう動くレベル*1になったので公開します。
注意事項
バージョン0.0.xのうちは、インタフェースや辞書フォーマットは頻繁に変更される予定です。
ある程度安定したら0.1.0出します。
今のところ、Ruby1.9系専用です。
使い方
MeCabフォーマットの辞書データを使用します。
動作確認はMeCab用NAIST辞書で行いました。
最初にokura compileコマンドで辞書をコンパイルします
$ okura compile mecab-naist-jdic-0.6.3b-20111013/ okura-dic
コンパイルした辞書のディレクトリを指定して、コンソールを起動することで形態素解析が試せる。
$ okura console okura-dic okura> 庭には二羽ニワトリがいる BOS/EOS BOS/EOS 0 庭 名詞,一般,*,*,*,*,* 5158 に 助詞,格助詞,一般,*,*,*,に 3347 に 助詞,特殊,*,*,*,*,に 6340 に 助詞,副詞化,*,*,*,*,に 4524 に 動詞,自立,*,*,一段,連用形,* 8055 に 動詞,自立,*,*,一段,未然形,* 8055 に 動詞,自立,*,*,一段,連用形,* 8055 に 動詞,自立,*,*,一段,未然形,* 8055 は 助詞,係助詞,*,*,*,*,は 2299 は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7290 は 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,* 7147 は 名詞,一般,*,*,*,*,* 7507 は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7290 二 名詞,数,*,*,*,*,* 2054 二 名詞,固有名詞,地域,一般,*,*,* 7688 二 名詞,数,*,*,*,*,* 16578 羽 名詞,一般,*,*,*,*,* 5381 羽 名詞,一般,*,*,*,*,* 4601 羽 名詞,固有名詞,地域,一般,*,*,* 6805 羽 名詞,接尾,助数詞,*,*,*,* 9136 羽 名詞,接尾,一般,*,*,*,* 6459 羽 名詞,接尾,助数詞,*,*,*,* 7405 羽 名詞,接尾,一般,*,*,*,* 7990 ニワトリ 名詞,一般,*,*,*,*,* 2592 ニ 名詞,一般,*,*,*,*,* 7209 ニ 名詞,固有名詞,地域,一般,*,*,* 10596 ニ 名詞,固有名詞,組織,*,*,*,* 8832 ニ 名詞,固有名詞,人名,一般,*,*,* 10225 ニ 名詞,固有名詞,一般,*,*,*,* 8341 ニ 感動詞,*,*,*,*,*,* 8949 ニワ 名詞,一般,*,*,*,*,* 7209 ニワ 名詞,固有名詞,地域,一般,*,*,* 10596 ニワ 名詞,固有名詞,組織,*,*,*,* 8832 ニワ 名詞,固有名詞,人名,一般,*,*,* 10225 ニワ 名詞,固有名詞,一般,*,*,*,* 8341 ニワ 感動詞,*,*,*,*,*,* 8949 ニワトリ 名詞,一般,*,*,*,*,* 7209 ニワトリ 名詞,固有名詞,地域,一般,*,*,* 10596 ニワトリ 名詞,固有名詞,組織,*,*,*,* 8832 ニワトリ 名詞,固有名詞,人名,一般,*,*,* 10225 ニワトリ 名詞,固有名詞,一般,*,*,*,* 8341 ニワトリ 感動詞,*,*,*,*,*,* 8949 ワ 助詞,終助詞,*,*,*,*,ワ 3411 ワ 名詞,一般,*,*,*,*,* 7209 ワ 名詞,固有名詞,地域,一般,*,*,* 10596 ワ 名詞,固有名詞,組織,*,*,*,* 8832 ワ 名詞,固有名詞,人名,一般,*,*,* 10225 ワ 名詞,固有名詞,一般,*,*,*,* 8341 ワ 感動詞,*,*,*,*,*,* 8949 ワト 名詞,一般,*,*,*,*,* 7209 ワト 名詞,固有名詞,地域,一般,*,*,* 10596 ワト 名詞,固有名詞,組織,*,*,*,* 8832 ワト 名詞,固有名詞,人名,一般,*,*,* 10225 ワト 名詞,固有名詞,一般,*,*,*,* 8341 ワト 感動詞,*,*,*,*,*,* 8949 ワトリ 名詞,一般,*,*,*,*,* 7209 ワトリ 名詞,固有名詞,地域,一般,*,*,* 10596 ワトリ 名詞,固有名詞,組織,*,*,*,* 8832 ワトリ 名詞,固有名詞,人名,一般,*,*,* 10225 ワトリ 名詞,固有名詞,一般,*,*,*,* 8341 ワトリ 感動詞,*,*,*,*,*,* 8949 トリ 名詞,一般,*,*,*,*,* 2892 トリ 名詞,固有名詞,一般,*,*,*,* 2914 ト 名詞,一般,*,*,*,*,* 7209 ト 名詞,固有名詞,地域,一般,*,*,* 10596 ト 名詞,固有名詞,組織,*,*,*,* 8832 ト 名詞,固有名詞,人名,一般,*,*,* 10225 ト 名詞,固有名詞,一般,*,*,*,* 8341 ト 感動詞,*,*,*,*,*,* 8949 トリ 名詞,一般,*,*,*,*,* 7209 トリ 名詞,固有名詞,地域,一般,*,*,* 10596 トリ 名詞,固有名詞,組織,*,*,*,* 8832 トリ 名詞,固有名詞,人名,一般,*,*,* 10225 トリ 名詞,固有名詞,一般,*,*,*,* 8341 トリ 感動詞,*,*,*,*,*,* 8949 リ 名詞,固有名詞,一般,*,*,*,* 4434 リ 名詞,一般,*,*,*,*,* 7209 リ 名詞,固有名詞,地域,一般,*,*,* 10596 リ 名詞,固有名詞,組織,*,*,*,* 8832 リ 名詞,固有名詞,人名,一般,*,*,* 10225 リ 名詞,固有名詞,一般,*,*,*,* 8341 リ 感動詞,*,*,*,*,*,* 8949 が 助詞,格助詞,一般,*,*,*,が 2722 が 助詞,接続助詞,*,*,*,*,が 4189 が 接続詞,*,*,*,*,*,* 4546 が 動詞,接尾,*,*,五段・ラ行,体言接続特殊2,* 5257 がい 名詞,接尾,一般,*,*,*,* 6988 がい 名詞,非自立,一般,*,*,*,* 4949 がい 名詞,一般,*,*,*,*,* 6540 い 名詞,一般,*,*,*,*,* 7305 い 動詞,自立,*,*,一段,連用形,* 7199 い 動詞,自立,*,*,一段,未然形,* 7199 い 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7199 い 動詞,非自立,*,*,一段,連用形,* 6087 い 動詞,非自立,*,*,一段,未然形,* 6087 い 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7199 い 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7199 い 動詞,自立,*,*,一段,連用形,* 7199 い 動詞,自立,*,*,一段,未然形,* 7199 い 動詞,自立,*,*,一段,連用形,* 7199 い 動詞,自立,*,*,一段,未然形,* 7199 いる 動詞,自立,*,*,一段,基本形,* 7379 いる 動詞,自立,*,*,五段・ラ行,基本形,* 7379 いる 動詞,非自立,*,*,一段,基本形,* 5961 いる 動詞,自立,*,*,五段・ラ行,基本形,* 7379 いる 動詞,自立,*,*,五段・ラ行,基本形,* 7379 いる 動詞,自立,*,*,一段,基本形,* 7379 いる 動詞,自立,*,*,一段,基本形,* 7379 る 助動詞,*,*,*,文語・ル,基本形,る 6632 る 動詞,非自立,*,*,一段,基本形,る 9452 る 助動詞,*,*,*,文語・リ,体言接続,り 5978 BOS/EOS BOS/EOS 0 BOS/EOS BOS/EOS 庭 名詞,一般,*,*,*,*,* に 助詞,格助詞,一般,*,*,*,に は 助詞,係助詞,*,*,*,*,は 二 名詞,数,*,*,*,*,* 羽 名詞,接尾,助数詞,*,*,*,* ニワトリ 名詞,一般,*,*,*,*,* が 助詞,格助詞,一般,*,*,*,が いる 動詞,自立,*,*,一段,基本形,* BOS/EOS BOS/EOS
最初にずらずら出てくるのは可能な単語の候補、一番最後に出てくるのが最終的な形態素解析結果です。情報を出し過ぎである。
プログラムから使う
require 'okura/serializer' dict_dir='コンパイル済み辞書ファイルのディレクトリ' tagger=Okura::Serializer::FormatInfo.create_tagger dict_dir str='解析対象の文字列' # 文字列から単語候補を計算 nodes=tagger.parse(str) # 単語候補の中で、一番最もらしい組み合わせを選択 nodes.mincost_path.each{|node| word=node.word # word.surface : 単語の表記 # word.left.text : 品詞 # 品詞はword.leftとword.rightがありますが、一般的に使われる辞書(IPA辞書やNAIST辞書)では # 両方同じデータが入ってます }
パフォーマンス
まだちゃんと計測してないです!!
手元の環境(MacBook Air 2011)でNAIST辞書(20111013)を使用して、辞書のコンパイルに1分30秒、辞書のロードに2秒程度。
類似のライブラリ
さくさくテキストマイニングの発表後に教えていただいたのですが、Igo(Javaの形態素解析エンジン)のRuby移植でigo-rubyというのが存在します。
igo-rubyと比較したokuraの強みとしては、
- 単体で辞書のコンパイルが可能(igo-rubyの場合、辞書のコンパイルにはJavaで動作するigo本体が必要)
- 将来の可能性(辞書バイナリに独自フォーマットを採用しており、高速化・省メモリ化の余地がある)
という点があります。
*1:起動に数分かかったりしないという意味