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")