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

意識の高いLISPマシン

藤原惟/すかいゆき(@sky_y)の技術用ブログ

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

  • LDSHARED = gccgcc を、$(CXX) に置き換え
  • LIBS に、-liconv を追加

そして、

$ 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上ではバッチリ動くみたい。
そこで、Xcoderuby上で動くようにがんばってみました。
(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でインストールしました。