コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Rails4でnattoを使い、mecabで形態素解析をする方法(CentOS6)

Rails4でnattoを使い、mecabで形態素解析をする方法(CentOS6)

mecab をインストール

mecabをyumでインストール

CentOS6でyumを使ってmecabとmecabの辞書ファイルをインストールしようとして

以下のようにyumを実行しようとするとパッケージがないと怒られる

> sudo yum install mecab mecab-ipadic 

No package mecab available. 
No package mecab-ipadic available. 

普通にRPMをダウンロードしてもよいが、悔しいので別の方法をご紹介する

全文検索エンジンgroongaのリポジトリを追加

> sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm

refs http://groonga.org/ja/docs/install/centos.html#centos-6

再び yumでmecab本体と辞書ファイルmecab-ipadicをインストールを試みる

> yum install mecab mecab-ipadic 
// バージョン確認
> mecab --version
mecab of 0.996 

無事インストールできた

mecab動作確認

> mecab
もうやんカレーを食べに行こう
もう     副詞,一般,*,*,*,*,もう,モウ,モー
やん     動詞,自立,*,*,五段・ラ行,体言接続特殊,やる,ヤン,ヤン
カレー     名詞,一般,*,*,*,*,カレー,カレー,カレー
を     助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
食べ     動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
に     助詞,格助詞,一般,*,*,*,に,ニ,ニ
行こ     動詞,自立,*,*,五段・カ行促音便,未然ウ接続,行く,イコ,イコ
う     助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
EOS

YES YES

refs http://perl.no-tubo.net/2013/05/10/centos%E3%81%AByum%E3%81%A7mecab%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/

Railsとmecabをつなぐ

railsプロジェクトを作成

新規作成

// mysql を利用する場合は -d mysqlをつける
> rails new PROJECT_NAME -d mysql

Railsからmecabを利用できるようにする

Gemfileを編集し、nattoをインストールする

# CentOSの場合は therubyracer をコメントアウトする
gem 'therubyracer', platforms: :ruby 

# nattoを追加
gem 'natto'

ここでbundle installするとmecabのライブラリが見つからなくてエラーになる場合がある。

> bundle exec rails c
/home/vagrant/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/ffi-1.9.3/lib/ffi/library.rb:133:in `block in ffi_lib': Could not open library 'mecab': /usr/lib64/mecab: cannot read file data: Is a directory. (LoadError)
Could not open library 'libmecab.so': libmecab.so: cannot open shared object file: No such file or directory

環境変数にmecab用のパスを追加する

mecabのライブラリのある場所を調べる
> sudo find / -name libmecab.so*
/usr/lib64/libmecab.so.2
/usr/lib64/libmecab.so.2.0.0

// /usr/lib64/libmecab.so.2はシンボリックリンク
> ls -l /usr/lib64/libmecab.so.2
lrwxrwxrwx 1 root root 17  2月  7 12:22 2014 /usr/lib64/libmecab.so.2 -> libmecab.so.2.0.0 
調べたライブラリを環境変数に追加する
> echo 'export MECAB_PATH=/usr/lib64/libmecab.so.2' >> ~/.bash_profile
# bash設定の再読み込み
> source ~/.bash_profile
再びbundle install
> bundle install 

nattoの動作確認

> bundle exec rails c
nm = Natto::MeCab.new
=> #<Natto::MeCab:0x007f231d70f638 @tagger=#<FFI::Pointer address=0x007f231e7539b0>, @options={}, @dicts=[#<Natto::DictionaryInfo:0x007f231d70f110 type="0", filename="/usr/lib64/mecab/dic/ipadic/sys.dic", charset="utf8">], @version="0.996"> 

irb(main):007:0> puts nm.parse('北海道に帰りたいのでリモートワーク出来る会社求む')
北海道     名詞,固有名詞,地域,一般,*,*,北海道,ホッカイドウ,ホッカイドー
に     助詞,格助詞,一般,*,*,*,に,ニ,ニ
帰り     動詞,自立,*,*,五段・ラ行,連用形,帰る,カエリ,カエリ
たい     助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
ので     助詞,接続助詞,*,*,*,*,ので,ノデ,ノデ
リモート     名詞,一般,*,*,*,*,リモート,リモート,リモート
ワーク     名詞,一般,*,*,*,*,ワーク,ワーク,ワーク
出来る     動詞,自立,*,*,一段,基本形,出来る,デキル,デキル
会社     名詞,一般,*,*,*,*,会社,カイシャ,カイシャ
求む     動詞,自立,*,*,五段・マ行,基本形,求む,モトム,モトム
EOS
=> nil

refs https://bitbucket.org/buruzaemon/natto/wiki/Quick-Start