MeCab on Mac OS X
最近、家のパソコンがMacになりました。
OSはMac OS X 10.5 Leopardです。
というわけで、Windowsではあまり気にならなかったMeCabのインストールをMacでやります。
ポイント
作業工程
MeCabのダウンロード。
MeCab: Yet Another Part-of-Speech and Morphological Analyzerから
mecab-X.X.tar.gz
mecab-ipadic-2.7.0-XXXX.tar.gz
mecab-ruby-X.X.tar.gz を落とす。
MeCabのインストール
Xcodeが入っている前提で。
% tar zxvf mecab-0.96.tar.gz % cd mecab-0.96 % ./configure % make % make check % sudo make install
% cd .. % tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz % cd mecab-ipadic-2.7.0-20070801 % ./configure % make % sudo make install
以下、utf-8を有効にするための作業。
MeCab: Yet Another Part-of-Speech and Morphological Analyzerの高度な使い方を参照。
下の両方をやったけど、結局前者と後者のどちらが有効なのかはわからんかった。
良い子のみんなは、上でconfigureするときにオプションをつけておこう。
辞書の configure オプションにて charset を変更し、辞書を再構築。
% tar zxfv mecab-ipadic-2.7.0-xxxx % ./configure --with-charset=utf8 % make
mecab-dict-index の -t オプションを使って直接文字コードの異なる辞書を再構築
% cd mecab-ipadic-2.7.0-xxxx % /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8 # make install
rubyバインディングのインストール
mecab-rubyのインストール(Mac OSX & Cygwin on Windows)の方法を参考にした。
まず、うちはLeopardなのでパッチを当てる。
*** mecab-ruby-0.96/extconf.rb.orig Sun Jul 30 20:48:52 2006 --- mecab-ruby-0.96/extconf.rb Fri Nov 24 17:17:02 2006 *************** *** 8,12 **** --- 8,13 ---- } $CFLAGS += ' ' + `#{mecab_config} --cflags`.chomp + $LDFLAGS = '-L/usr/local/lib' have_header('mecab.h') && create_makefile('MeCab')
パッチの当て方を忘れていたので復習。
適当なファイルにパッチを落として、
% cd mecab-ruby-0.96 % patch < パッチファイル名
パッチが当てられたら、
$ ruby extconf.rb
出来たMakefileで
そして、
$ make $ ruby test.rb
ところが、make中に問題発生。
g++ -arch ppc -arch i386 -pipe -bundle -o MeCab.bundle MeCab_wrap.o -L"." -L"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib" -L/usr/local/lib -lruby -lstdc++ -lmecab -lpthread -ldl -lm -liconv ld: warning in /usr/local/lib/libmecab.dylib, file is not of required architecture Undefined symbols for architecture ppc: "MeCab::Tagger::version()", referenced from: _wrap_Tagger_version(int, unsigned long*, unsigned long)in MeCab_wrap.o "MeCab::createTagger(char const*)", referenced from: new_MeCab_Tagger(char const*)in MeCab_wrap.o new_MeCab_Tagger() in MeCab_wrap.o "MeCab::Tagger::create(int, char**)", referenced from: _wrap_Tagger_create(int, unsigned long*, unsigned long)in MeCab_wrap.o "MeCab::Tagger::create(char const*)", referenced from: _wrap_Tagger_create(int, unsigned long*, unsigned long)in MeCab_wrap.o "MeCab::getTaggerError()", referenced from: new_MeCab_Tagger(char const*)in MeCab_wrap.o new_MeCab_Tagger() in MeCab_wrap.o ld: symbol(s) not found for architecture ppc collect2: ld returned 1 exit status lipo: can't open input file: /var/tmp//ccNajtSg.out (No such file or directory) make: *** [MeCab.bundle] Error 1
うちのはIntel Macなので、-arch ppcがすごく怪しい。消してしまえ!!
MakefileのCFLAGSの行を以下に書き換え。-arch ppcを消しました。
CFLAGS = -fno-common -arch i386 -Os -pipe -fno-common -I/usr/local/include
それでmakeしたら通って、test.rbも動きました!! やっほい!!
仕上げに、
$ sudo make install
終わりっ!! お疲れ様でした。
番外編 上のやり方を実行する前に、こんなのを発見してしまったので試してみた。
LiveCoding行ってきましたよ & MeCabメモ - もち
$ sudo port install mecab +utf8 # これでutf-8もバッチリ?+sjisでShift-JISの辞書ファイルも $ sudo port install rb-mecab
確かにportでインストールしたruby上ではバッチリ動くみたい。
そこで、Xcodeのruby上で動くようにがんばってみました。
(gemsで入れたパッケージ入りなので、多少愛着があるのです。)
.bashrcに以下を登録してみた。
#MacPorts用パス export PATH=/opt/local/bin:/opt/local/sbin/:$PATH export MANPATH=/opt/local/man:$MANPATH #ruby用パス export RUBYLIB=$RUBYLIB:/opt/local/lib/ruby export RUBYLIB=$RUBYLIB:/opt/local/lib/ruby/1.8 export RUBYLIB=$RUBYLIB:/opt/local/lib/ruby/site_ruby/1.8/i686-darwin9.0.0 export RUBYLIB=$RUBYLIB:/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.0.0
しかし、これではgemsで入れたパッケージがうまく動かない。
他にもいろいろいじってみたけど、断念。
結局、最初のようにmakeでインストールしました。