Superdry Memorandom :-p

旧「superdry memorandum :-D」です

MecabのJavaバインディング

注意)今回のpostはめずらしくAndroidはぜんっぜん関係ありません。また自分用メモとして残しただけなので間違いがあってもご容赦願います。

日本語形態素解析ライブラリを使おうと思い立ちました。Java形態素解析するにはSenやGoSen、lgoなどがあるようですが、まずはMecabを使ってみるということで。mecab-0.98.tar.gzをダウンロード。

Mecabのインストールはこの辺を参考にしました。

Mecabの辞書作成はこの辺。

私はJavaが一番使い慣れてるので、Javaバインディングすることに。でもオフィシャルではぜんっぜん詳しく書いてません。まずはここでmecab-java-0.97.tar.gzをダウンロードします。

mecab-java-0.97.tar.gzを解凍し、makeしてやるとjavaバインディングに必要なファイルが作成できます。私の環境(Mac OS X(Lion))では、Makefileを以下の赤字のように書き換えるとmakeがうまく行きました。環境に応じて変えてやってください。


TARGET=MeCab
JAVAC=javac
JAVA=java
JAR=jar
CXX=c++
INCLUDE=/System/Library/Frameworks/JavaVM.framework/Headers

PACKAGE=org/chasen/mecab

LIBS=`mecab-config --libs`
INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/linux

all:
$(CXX) -O3 -c -fpic $(TARGET)_wrap.cxx $(INC)
$(CXX) -shared $(TARGET)_wrap.o -o lib$(TARGET).so $(LIBS)
$(JAVAC) $(PACKAGE)/*.java -J-Dfile.encoding=UTF8
$(JAVAC) test.java -J-Dfile.encoding=UTF8
$(JAR) cfv $(TARGET).jar $(PACKAGE)/*.class -J-Dfile.encoding=UTF8

test:
env LD_LIBRARY_PATH=. $(JAVA) test

clean:
rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.class

cleanall:
rm -fr $(TARGET).java *.cxx

これでmakeすると、新規に2つのファイルが作成されます。

Eclipseで実行する時はJavaプロジェクトを作成しMeCab.jarを外部ライブラリとして追加します。そして、mecab-java-097フォルダ内のtest.javaEclipseを取り込み、以下のように書き換えます。

File f = new File("/Users/hogehoge/mecab-java-097/libMeCab.so");
System.load(f.toString());

これで、ライブラリがロードでき、実行できます。