読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

RubyでMeCabを使う

ruby

まずはMecab自体をインストール

むかしにやった気がするけど、メモがてら。
MeCabはhomebrewで入れた。portsでもなんでもイイと思います。

% brew install mecab

インストールされたら辞書ファイルを作る

からipaの辞書を取ってくる。
DLしたtar.gzを展開して、ディレクトリに移動する。あとは普通にmakeするだけなんだけれど、configure時のcharsetをUTF8にしておくことにする。イマドキ、UTF8じゃないほうが例外だと思うので。

./configure --with-charset=utf8   
make
make install
MeCab単体での動作確認

一応、単体で動くか確認してみる。

% echo "お前は今まで食ったパンの枚数を覚えているのか?" | mecab 
お前    名詞,代名詞,一般,*,*,*,お前,オマエ,オマエ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
今      名詞,副詞可能,*,*,*,*,今,イマ,イマ
まで    助詞,副助詞,*,*,*,*,まで,マデ,マデ
食っ    動詞,自立,*,*,五段・ワ行促音便,連用タ接続,食う,クッ,クッ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
パン    名詞,一般,*,*,*,*,パン,パン,パン
の      助詞,連体化,*,*,*,*,の,ノ,ノ
枚数    名詞,一般,*,*,*,*,枚数,マイスウ,マイスー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
覚え    動詞,自立,*,*,一段,連用形,覚える,オボエ,オボエ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
の      名詞,非自立,一般,*,*,*,の,ノ,ノ
か      助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ
?      記号,一般,*,*,*,*,?,?,?
EOS

大丈夫そうですね。

natto っていうRubyバインディングを使う

nattoがいいのかよくわからんけど、とりあえず目に入ったので使ってみます。

gem install natto

これだけ。irbで確認してみよう。

ruby-1.9.2-head :018 > pp Natto::MeCab.new.parse("お前は今まで食ったパンの枚数を覚えているのか?").split("\n").delete_if{|n| n == "EOS"}
["お前\t名詞,代名詞,一般,*,*,*,お前,オマエ,オマエ",
 "\t助詞,係助詞,*,*,*,*,は,ハ,ワ",
 "\t名詞,副詞可能,*,*,*,*,今,イマ,イマ",
 "まで\t助詞,副助詞,*,*,*,*,まで,マデ,マデ",
 "食っ\t動詞,自立,*,*,五段・ワ行促音便,連用タ接続,食う,クッ,クッ",
 "\t助動詞,*,*,*,特殊・タ,基本形,た,タ,タ",
 "パン\t名詞,一般,*,*,*,*,パン,パン,パン",
 "\t助詞,連体化,*,*,*,*,の,ノ,ノ",
 "枚数\t名詞,一般,*,*,*,*,枚数,マイスウ,マイスー",
 "\t助詞,格助詞,一般,*,*,*,を,ヲ,ヲ",
 "覚え\t動詞,自立,*,*,一段,連用形,覚える,オボエ,オボエ",
 "\t助詞,接続助詞,*,*,*,*,て,テ,テ",
 "いる\t動詞,非自立,*,*,一段,基本形,いる,イル,イル",
 "\t名詞,非自立,一般,*,*,*,の,ノ,ノ",
 "\t助詞,副助詞/並立助詞/終助詞,*,*,*,*,か,カ,カ",
 "\t記号,一般,*,*,*,*,?,?,?"]

基本的には Natto::MeCab を new して、インスタンスのparseメソッドに文章を渡せば良い感じ。