rails 独学して軽くにちゃんまとめつくる

読者です 読者をやめる 読者になる 読者になる

rails独学して軽く2ちゃんまとめビルダーをつくる。

rails tutorial読破→2chまとめビルダー作成→アメリカでインターンシップ→恋活SNSを作成・・・・・→音で感触をつくり感触をあつめたライブラリをつくる

Ubuntu や Cloud9ruby で natto をインストールがやっとできた。

・natto 使えばmecab いらんやんけ、と思ってる人は間違い。 ・ libmecab.so が入ってない(´;ω;`)って人はgem の前に sudo でいれろ。

まとめ ーーーーーーーーーーーーーーーーーーーーー ①gem install natto でgem のインストール

sudo apt-get update でsude のアップデート

sudo apt-get install libmecab2 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utilsmecab を内部にいれる

sudo find / -name libmecab.so*mecab 入ってるか確認。

export MECAB_PATH=/usr/lib/libmecab.so.2 でパスの指定

require 'natto'

text = 'すもももももももものうち'

natto = Natto::MeCab.new
natto.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end

サンプルコードを mecab.rb にかく。

ruby mecab.rb で実行

 ruby mecab.rb
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
        BOS/EOS,*,*,*,*,*,*,*,*

ーーーーーーーーーーーーーーーーーーーーー おそらくここにたどり着くまでに何度もほかのサイトに行って、投げ出したくなる気持ちを抑え、やっとのもいでここにたどりついたとおもう。おつかれさま。これできみは natto を使うことができるぞ。え? windows 環境でやりたい?しらん知らん。Cloud9 でもググってもう一回きてくれ。

ちなみにここでたどり着いた人の中に

sudo find / -name libmecab.so*

で探しても lbmecab.so が見つからないという人がいることを想定している。よかったね。君はついに解決できるよ。もしかして君は Ubuntu や Cloud9 に mecab をインストールするまえに gem install mecabをしたに違いない。そりゃ失敗するわな。まずは mecab を実機にインスト―ルするところからはじまるんだよ。早速解決にはいろう。

まず natto をインストールしたはずだ。そしてそこではエラーがでない。

$ sudo gem install natto
Fetching: ffi-1.9.18.gem (100%)
Building native extensions.  This could take a while...
Successfully installed ffi-1.9.18
Fetching: natto-1.1.1.gem (100%)
Successfully installed natto-1.1.1
2 gems installed

つぎに君はサンプルコードを実行したはず。たとえばこんなコードかな?

require 'natto'

text = 'すもももももももものうち'

natto = Natto::MeCab.new
natto.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end

そして実行するとこんなエラーがでる。

$ ruby mecab.rb 
/usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/binding.rb:58:in `rescue in find_library': Please set MECAB_PATH to the full path to libmecab.so (LoadError)
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/binding.rb:48:in `find_library'
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/binding.rb:64:in `<module:Binding>'
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/binding.rb:6:in `<module:Natto>'
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/binding.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto/natto.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from /usr/local/rvm/gems/ruby-2.2.1@global/gems/natto-1.0.1/lib/natto.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `rescue in require'
        from /usr/local/rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:39:in `require'

なんだかパスを通せと言われる。。 いわれた通りパスをとおし、

$ export MECAB_PATH=/usr/local/lib/libmecab.so

実行してみると・・・

$ ruby test.rb
/usr/local/rvm/gems/ruby-2.3.0@global/gems/ffi-1.9.18/lib/ffi/library.rb:147
:in `block in ffi_lib'
: Could not open library '/usr/local/lib/libmecab.so'
: /usr/local/lib/libmecab.so: cannot open shared object file
: No such file or directory (LoadError)


        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `map'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/ffi-1.9.18/lib/ffi/library.rb:100:in `ffi_lib'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/natto-1.1.1/lib/natto/binding.rb:64:in `<module:Binding>'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/natto-1.1.1/lib/natto/binding.rb:6:in `<module:Natto>'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/natto-1.1.1/lib/natto/binding.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/natto-1.1.1/lib/natto/natto.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/gems/ruby-2.3.0@global/gems/natto-1.1.1/lib/natto.rb:2:in `<top (required)>'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
        from /usr/local/rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
        from test.rb:1:in `<main>'

/usr/local/lib/libmecab.so これがないと怒られる。だから探してみると

 sudo find / -name libmecab.so*

反応なし。。。 ということはそもそも libmecab 入ってへんということやんけ。ほかのサイトではnatto いれたら入ってるようなこと書いてたのに・・・

そんで3時間くらい経つとやっとみつけた。 MacでRubyを使ってMeCabを利用する準備 - 別館 子子子子子子(ねこのここねこ) このサイトの人に感謝感謝。タイトルに Mac とかいてあったから避けてたがよく見てみたら回答があった。ということでここの人の言う通り Ubuntu 本体にダウンロードしてわすれていたのだ。

このサイトを参考にして、

UbuntuでのMeCabの利用 - Qiita

$ sudo apt-get update
$ sudo apt-get install libmecab1 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils

ん?なんか言われたぞ。

$ sudo apt-get install libmecab1 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package libmecab1 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  libmecab2:i386 libmecab2

よくわからんが、 libmecab2 にしろってことか?

$ sudo apt-get install libmecab2 libmecab-dev mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils                                                         
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libmecab-dev libmecab2 mecab mecab-ipadic mecab-ipadic-utf8 mecab-utils
0 upgraded, 6 newly installed, 0 to remove and 34 not upgraded.
Need to get 12.7 MB of archives.

おっ、いけたわ!ホンマにはいっとるかちゃんと確認してみよや

$ sudo find / -name libmecab.so*
/usr/lib/libmecab.so.2
/usr/lib/libmecab.so.2.0.0
/usr/lib/libmecab.so

はいっとることがわかった。よっしゃ起動してみよや。。。。とおもったらまたエラー

$ ruby mecab.rb
/usr/local/rvm/gems/ruby-2.3.0@global/gems/ffi-1.9.18/lib/ffi/library.rb:147:in `block in ffi_lib': Could not open library '/home/ubuntu/workspace/libmecab.so': /home/ubuntu/workspace/libmecab.so: cannot open shared object file: No such file or directory (LoadError)
        from /usr/local/rvm/gems/ruby-2.

このサイトを参考に、もう一度パスの設定をしなおした。 mecabをRubyから使おうとしたらエラーが・・・・ - /var/www/yatta47.log

$ export MECAB_PATH=/usr/lib/libmecab.so.2  

としてやってみると・・・・

 $ ruby mecab.rb
すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
も      助詞,係助詞,*,*,*,*,も,モ,モ
もも    名詞,一般,*,*,*,*,もも,モモ,モモ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
        BOS/EOS,*,*,*,*,*,*,*,*

よっしゃ!!いけたで!!!!!

やれやれ、やっと終わったわ。なんかするとき、 gem だけでなく本体にもいれなあかんといういい教訓と、パスの入れ方を勉強したわ。まあまあよかった。

まとめとこ。