MeCabをrubyから使ってみる

インストール

まずMacPortsで本体と辞書を入れて読み込む辞書を設定する。

$ sudo port install mecab
$ sudo port install mecab-ipadic-utf8
$ sudo vi /opt/local/etc/mecabrc # 編集内容は下記を参照

mecabrcは次のように書き換える。

dicdir = /opt/local/lib/mecab/dic/ipadic-utf8

次にrubyバインディングmecab-rubyをインストールする。 ソースを SourceForge から落としてきて展開し、そのディレクトリで以下を実行。

$ ruby extract.rb
$ vi Makefile # 編集内容は下記を参照
$ make
$ ruby test.rb # これでエラーが出なければ問題無し
$ sudo make install

Makefileは次のように/opt/local/libを読むように修正を加える。

LIBS =  -lstdc++ -ldl -lobjc -L/usr/local/lib -L/opt/local/lib -lmecab

参考: MeCab + Ruby で形態素解析(わかち書き)

rubyから使う

irbで次をやってみる。

require 'MeCab'
wakati = MeCab::Tagger.new('-O wakati')
puts wakati.parse('最近の夜は寒い')

mecab = MeCab::Tagger.new()
node = mecab.parseToNode('最近の夜は寒い')
while node do
  puts "#{node.surface}\t#{node.feature}"
  node = node.next
end

参考: MeCab + Ruby で形態素解析(わかち書き)

地味にはまったのがnewするときの引数。特にオプションを指定しないなら上記のようになにも与えないか、もしくは空の文字列を与える。明示的にnilを与えるとエラーになるので要注意。