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/HeadersLIBS=`mecab-config --libs`
INC=`mecab-config --cflags` -I$(INCLUDE) -I$(INCLUDE)/linuxall:
$(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=UTF8test:
env LD_LIBRARY_PATH=. $(JAVA) testclean:
rm -fr *.jar *.o *.so *.class $(PACKAGE)/*.classcleanall:
rm -fr $(TARGET).java *.cxx
これでmakeすると、新規に2つのファイルが作成されます。
- MeCab.jar
- libMeCab.so
Eclipseで実行する時はJavaプロジェクトを作成しMeCab.jarを外部ライブラリとして追加します。そして、mecab-java-097フォルダ内のtest.javaをEclipseを取り込み、以下のように書き換えます。
File f = new File("/Users/hogehoge/mecab-java-097/libMeCab.so"); System.load(f.toString());
これで、ライブラリがロードでき、実行できます。