ruby on railsで形態素解析(mecab)が使えるようになるバインド【natto】の設定

前回の記事でrubyからmecabを使える環境を作ったので、railsからも使えるようにする。

ちなみに前回の記事はこちら

Ubuntu Server 14.04にMeCabとMeCab-Rubyをインストール - watariseinの日記

railsアプリケーションを作成

$ rails new mecab

Gemfileに以下を追加

$ vi Gemfile

gem 'natto'

インストール

$ bundle install

rails consoleで動作を確認する

$ bundle exec rails c
irb(main):005:0> mecab = Natto::MeCab.new
=> #<Natto::MeCab:0x00556de5e021c8 @model=#<FFI::Pointer address=0x00556de6692f00>, @tagger=#<FFI::Pointer address=0x00556de605ceb0>, @lattice=#<FFI::Pointer address=0x00556de6bf0f50>, @libpath="/usr/lib/libmecab.so", @options={}, @dicts=[#<Natto::DictionaryInfo:0x00556de5e01160 @filepath="/usr/lib/mecab/dic/ipadic/sys.dic", charset=utf8, type=0>], @version=0.996>  
irb(main):007:0> puts mecab.parse("すもももももももものうち")
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
=> nil

Ochasenも使える

irb(main):020:0> mecab = Natto::MeCab.new("-Ochasen")
=> #<Natto::MeCab:0x00556de7730f78 @model=#<FFI::Pointer address=0x00556de6ba5ba0>, @tagger=#<FFI::Pointer address=0x00556de648fe80>, @lattice=#<FFI::Pointer address=0x00556de7748430>, @libpath="/usr/lib/libmecab.so", @options={:output_format_type=>"chasen"}, @dicts=[#<Natto::DictionaryInfo:0x00556de7746238 @filepath="/usr/lib/mecab/dic/ipadic/sys.dic", charset=utf8, type=0>], @version=0.996>
irb(main):021:0> text="明日は会社行かないでコーディングしていたいな"
=> "明日は会社行かないでコーディングしていたいな"
irb(main):022:0> mecab.parse(text) do |n|
irb(main):023:1* puts "#{n.surface}\t#{n.feature}"
irb(main):024:1> end
明日    明日    アシタ  明日    名詞-副詞可能
は      は      ハ      は      助詞-係助詞
会社    会社    カイシャ        会社    名詞-一般
行か    行か    イカ    行く    動詞-自立       五段・カ行促音便        未然形
ない    ない    ナイ    ない    助動詞  特殊・ナイ      連用デ接続
で      で      デ      で      助詞-接続助詞
コーディング    コーディング    コーディング    コーディング    名詞-一般
し      し      シ      する    動詞-自立       サ変・スル      連用形
て      て      テ      て      助詞-接続助詞
い      い      イ      いる    動詞-非自立     一段    連用形
たい    たい    タイ    たい    助動詞  特殊・タイ      基本形
な      な      ナ      な      助詞-終助詞
        EOS
=> nil

これでrailsからmecabを使うことができるようになった。

ちなみに、ユーザー辞書や辞書ディレクトリを指定する場合は以下のようにする

mecab = Natto::MeCab.new(dicdir: "/usr/lib/mecab/dic/ipadic/", userdic: "/mecab/dic/custom.dic")

参考

MacでRubyを使ってMeCabを利用する準備 - 別館 子子子子子子(ねこのここねこ)