LoginSignup
95
93

More than 5 years have passed since last update.

rubyのmecabバインディングnattoを使う

Posted at

背景

macでmecab-rubyをビルドせずにインストールするでは、mecabの基本的な言語バインディングを用いました。

このバインディングはSWIGを用いてMeCabと密に結合しているため、mecab gemのバージョンとMeCabのバージョンを合わせる必要がありました。

今回はmecab gem以外の選択肢を使ってみます。

納豆

今回はrubyからmecabを利用するためにnattoというgemを使用します。

nattoは、FFI(foreign function interface:外部関数インタフェース)を使用して、RubyとMeCabを繋ぐgemです。

nattoはC言語拡張ではないためコンパイルは必要ありません。

そのためCRuby(MRI / YARV)でもJRuby(JVM)でも実行できる利点があります。

jruby 1.7.4 (1.9.3p392) 2013-05-16 2390d3b on Java HotSpot(TM) 64-Bit Server VM 1.7.0_25-b15 [darwin-x86_64]で動作確認)

mecabを最新に

mecab gemをbundlerから管理するために、mecab本体のバージョンを0.98にしていました。

nattoを利用するに当たって最新のバージョンに戻します。

既に古いバージョンがインストールされている場合、
いったんアンインストールします。

brew uninstall mecab mecab-ipadic

次に、最新のバージョンを確かめます。

brew versions mecab

最新バージョンを確認したら、
/usr/localに移動してformulaをチェックアウトします。

このとき最新バージョンは0.996でした。

git checkout ee21df2 /usr/local/Library/Formula/mecab.rb

改めてmecabをインストールします。

brew install mecab mecab-ipadic

mecab -vしてバージョンが0.996になっていれば大丈夫。

natto gemを使う

Gemfilegem 'natto'を追加してbundle installでインストールします。

使い方はNatto::MeCab.newして、
parseメソッドに渡すだけです。

require 'natto'

text = <<"EOS"
悪質な業者によるトラブルが全国で急増している。
EOS

nm = Natto::MeCab.new
nm.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end
悪質   名詞,形容動詞語幹,*,*,*,*,悪質,アクシツ,アクシツ
な    助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
業者   名詞,一般,*,*,*,*,業者,ギョウシャ,ギョーシャ
による  助詞,格助詞,連語,*,*,*,による,ニヨル,ニヨル
トラブル 名詞,一般,*,*,*,*,トラブル,トラブル,トラブル
が    助詞,格助詞,一般,*,*,*,が,ガ,ガ
全国   名詞,一般,*,*,*,*,全国,ゼンコク,ゼンコク
で    助詞,格助詞,一般,*,*,*,で,デ,デ
急増   名詞,サ変接続,*,*,*,*,急増,キュウゾウ,キューゾー
し    動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て    助詞,接続助詞,*,*,*,*,て,テ,テ
いる   動詞,非自立,*,*,一段,基本形,いる,イル,イル
。    記号,句点,*,*,*,*,。,。,。
     BOS/EOS,*,*,*,*,*,*,*,*
95
93
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
95
93