Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

背景

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,*,*,*,*,*,*,*,*
k-shogo
勇者シリーズを見て育ち、人工知能に夢を見た。 大学時代は人工知能を研究。 現在はrailsエンジニア。 好きなテキストエディタはvim 好きなvimプラグインはunite 好きなコマンドはxargs
http://k-shogo.github.io/
recruitmp
結婚・カーライフ・進学の情報サイトや『スタディサプリ』などの学びを支援するサービスなど、ライフイベント領域に関わるサービスを提供するリクルートグループの中核企業
http://www.recruit-mp.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした