perlにはText::MeCabとかいうCPANモジュールがあるのに、
rubyのgemにはそんな感じのやつってないのかなって思っていたら
ありましたよ。
ソース(on Github)
取得方法
まあREADMEを読めばいいんだけど、
1. gemの取得
gem install okura
2. 辞書データの取得
ダウンロード - NAIST Japanese Dictionary - SourceForge.JP
(アーカイブなのでtar xzvfで解凍してください)
3. コンパイルした辞書データ置き場のためのディレクトリ作成
mkdir okura-dic
4. 辞書データのコンパイル
$ okura compile mecab-naist-jdic-0.6.3b-20111013/ okura-dic
実演
コンソールから使えますが…
$ okura console okura-dic okura> 革命はいつもインテリが始めるが、. 夢みたいな目標をもってやるから、いつも過激なことしかやらない! BOS/EOS BOS/EOS 0 革 名詞,一般,*,*,*,*,* 5227 革 名詞,一般,*,*,*,*,* 5345 革命 名詞,一般,*,*,*,*,* 4913 命 名詞,一般,*,*,*,*,* 4750 命 動詞,自立,*,*,一段,連用形,* 6005 命 動詞,自立,*,*,一段,未然形,* 6005 は 助詞,係助詞,*,*,*,*,は 2299 は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7290 は 動詞,非自立,*,*,五段・ラ行,体言接続特殊2,* 7147 は 名詞,一般,*,*,*,*,* 7507 は 動詞,自立,*,*,五段・ラ行,体言接続特殊2,* 7290 (以下略)
子供に付き合っていられるか!
というわけでプログラムから使う方法を。
(ブログコードを一部改変してます)
# -*- coding: utf-8 -*- require 'okura/serializer' dict_dir='./okura-dic' require 'pp' tagger=Okura::Serializer::FormatInfo.create_tagger dict_dir str='そうやって達成された革命の気高い志も、その後は官僚主義と大衆に飲み込まれてしまう。' # 文字列から単語候補を計算 nodes=tagger.parse(str) # 単語候補の中で、一番最もらしい組み合わせを選択 nodes.mincost_path.each{|node| word=node.word pp word.surface # 単語の表記 pp word.left.text # 品詞 # 品詞はword.leftとword.rightがありますが、一般的に使われる辞書(IPA辞書やNAIST辞書)では # 両方同じデータが入ってます }
結果
"BOS/EOS" "BOS/EOS" "そう" "副詞,助詞類接続,*,*,*,*,*" "やっ" "動詞,自立,*,*,五段・ラ行,連用タ接続,*" "て" "助詞,接続助詞,*,*,*,*,て" "達成" "名詞,サ変接続,*,*,*,*,*" "さ" "動詞,自立,*,*,サ変・スル,未然レル接続,する" "れ" "動詞,接尾,*,*,一段,連用形,*" "た" "助動詞,*,*,*,特殊・タ,基本形,た" "革命" "名詞,一般,*,*,*,*,*" "の" "助詞,格助詞,一般,*,*,*,の" "気高い" "形容詞,自立,*,*,形容詞・アウオ段,基本形,*" "志" "名詞,一般,*,*,*,*,*" "も" "助詞,係助詞,*,*,*,*,も" "、" "記号,読点,*,*,*,*,*" "その後" "名詞,副詞可能,*,*,*,*,*" "は" "助詞,係助詞,*,*,*,*,は" "官僚" "名詞,一般,*,*,*,*,*" "主義" "名詞,一般,*,*,*,*,*" "と" "助詞,並立助詞,*,*,*,*,と" "大衆" "名詞,一般,*,*,*,*,*" "に" "助詞,格助詞,一般,*,*,*,に" "飲み込ま" "動詞,自立,*,*,五段・マ行,未然形,*" "れ" "動詞,接尾,*,*,一段,連用形,*" "て" "助詞,接続助詞,*,*,*,*,て" "しまう" "動詞,非自立,*,*,五段・ワ行促音便,基本形,しまう" "。" "記号,句点,*,*,*,*,BOS/EOS" "BOS/EOS" "BOS/EOS"
parseとかmincost_pathとか知らないので、どのように要素を取りだすのかイマイチ見えないですが、
とてもよいと思いました。
どうでもいいが、okuraっていう名前はこっから来てるんだろうか。