rvmで入れた各rubyにmecab rubyバインディングをインストールする
mecab rubyバインディングはgemでインストールできないので、rvmで入れた各バージョンのrubyからmecabを使うのは少し面倒。
今までportで入れたrubyから、portのrb-mecabを使ってたけど、rvmで$GEM_HOMEが切り替わるとportで入れたrubyバインディングが読めないので、個別に入れる
portでmecabの最新版0.9.8を入れておく
sudo port install mecab +utf8only which mecab mecab -v
ちゃんと0.98になってた
mecabのrubyバインディング入れる。
http://sourceforge.net/projects/mecab/files/ からmecab-ruby-0.98をダウンロードする
tar -zxvf mecab-ruby-0.98.tar cd mecab-ruby-0.98 use rvm 1.9.2 ruby -v ruby exconf.rb
んで
make
g++ -I. -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/i386-darwin9.8.0 -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1/ruby/backward -I/Users/sho/.rvm/rubies/ruby-1.9.2-p0/include/ruby-1.9.1 -I. -DHAVE_MECAB_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -fno-common -pipe -I/opt/local/include -o MeCab_wrap.o -c MeCab_wrap.cpp g++ -dynamic -bundle -o MeCab.bundle MeCab_wrap.o -L. -L/Users/sho/.rvm/rubies/ruby-1.9.2-p0/lib -L. -L/usr/local/lib -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -Wl,-flat_namespace -lruby.1.9.1 -lstdc++ -lmecab -lpthread -ldl -lobjc
make install
/opt/local/bin/ginstall -c -m 0755 MeCab.bundle /Users/sho/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/i386-darwin9.8.0
ちゃんとrvmの下に入った
同様にrvmで入れた1.8.7の方にも入れる
cd ../ rm -rf mecab-ruby-0.98 tar -zxvf mecab-ruby-0.98.tar cd mecab-ruby-0.98 use rvm 1.8.7 ruby -v ruby exconf.rb make make install
動くか試そう
mecab-split-terms.rb
#!/usr/bin/env ruby require 'MeCab' exit if ARGV.size < 1 puts str = ARGV.join(' ') node = MeCab::Tagger.new.parseToNode(str) while node do puts node.surface node = node.next end puts '*'*5 puts MeCab::Tagger.new.parse(str).split(/[\r\n]/).map{|i| i.split(/\t/).first}.delete_if{|i| i =~ /^EOS$/}
rvm use 1.8.7 ruby mecab-split-terms.rb BIG丼はやばい rvm use 1.9.2 ruby mecab-split-terms.rb BIG丼はやばい
どっちも同じ様にsplitできた
1.9.2だとArray.to_sした時に前後に [ と ] が付くのではまった
あと改行区切りのStringをmapで行毎に処理できなかった