memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

mecab-javaではまる

macportsmecabmecab-javaをインストールしてjavamecabを使えるようにセットアップしてみました。これが意外とはまる。。。結局、macportsmecab-javaでインストールしたライブラリはターミナルからは何とか使えたのですが、eclipseから使うことはできませんでした。なぜだろう?いろいろやったので記憶に残っていませんが、とりあえず確認ができたものだけ書きます。

macportsmecab-utf8をインストールします。手順はあちこちにあります。辞書は自動的に入ります。

その後、mecabのサイトよりmecab-java0.98をダウンロードしてMakefileを書き換えて(patchが出ているようですがそれを当てても環境が異なると書き換えが必要です)書き換えたポイントはJAVA_HEADERのパス(/usr/bin/javaのリンク先)とJAVAC, JAVA, JAR変数のパス、mecab-configのパスです。これでmakeが成功した後、make testとやるとtestプログラムの実行結果が見れます。

JAVA_HEADER=/System/Library/Frameworks/JavaVM.framework/Versions/Current/
#JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/Current

TARGET=MeCab

JAVAC=javac -encoding utf-8
JAVA=java -Dfile.encoding=utf-8
JAR=jar
CXX=g++
INCLUDE=$(JAVA_HEADER)/Headers

PACKAGE=org/chasen/mecab

LIBS=`/opt/local/bin/mecab-config --libs`
INC=`/opt/local/bin/mecab-config --cflags` -I$(INCLUDE)

all:
	$(CXX) -O3 -c -fPIC $(TARGET)_wrap.cxx  $(INC)
	$(CXX) -dynamiclib  $(TARGET)_wrap.o -o lib$(TARGET).dylib $(LIBS)
	$(JAVAC) $(PACKAGE)/*.java
	$(JAVAC) test.java
	$(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class

test:
	env DYLD_LIBRARY_PATH=. $(JAVA) test

clean:
	rm -fr *.jar *.o *.dylib *.class $(PACKAGE)/*.class
	
cleanall:
	rm -fr $(TARGET).java *.cxx

ちなみに、このあとにmacports版のmecab-javaをインストールし、上記のMakefileの以下の行を書き換えると一応macports版のmecab-javaでtestプログラムが動作するようです。

	env DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib $(JAVA) test

さらに、このtestプログラムをeclipseに持っていき、環境でDYLD_FALLBACK_LIBRARY_PATHを設定するとうまくいくと思いきや。。。だめ。DYLD_LIBRARY_PATHで設定するとmecabライブラリには到達できるようですが以下のメッセージが表示されダメ。

Error occurred during initialization of VM
Unable to load native library: libjava.jnilib

もうあれこれ探してやってみましたがダメ。もう諦めてmacports版のmecab-javaはアンインストールしてeclipseからは上記の最初にインストールしたオリジナル版を使うことにしました。そのうちmacportsのアップデートで修復されるでしょう。。。

あ、ちなみにtestプログラムを実行すると以下のような結果が得られます。参考まで。

0.98
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
EOS

	BOS/EOS,*,*,*,*,*,*,*,*
太郎	名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
二郎	名詞,固有名詞,人名,名,*,*,二郎,ジロウ,ジロー
に	助詞,格助詞,一般,*,*,*,に,ニ,ニ
この	連体詞,*,*,*,*,*,この,コノ,コノ
本	名詞,一般,*,*,*,*,本,ホン,ホン
を	助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
渡し	動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た	助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。	記号,句点,*,*,*,*,。,。,。
	BOS/EOS,*,*,*,*,*,*,*,*
EOS