Solr-1.4.1でcmecab-javaを使ってみる
久しぶりにjava関連の内容。
Java
今回利用するバージョンは 1.6.0_20
javaはOSにインストールされているものをそのまま利用する。但し、一点だけ注意が必要。id:from_kyushu:20090713 に記載のある通り、JDK6を利用すると標準出力の際の文字コードがSJISになってしまう。
今回、MeCabで利用する辞書はUTF-8を前提としているほか、MacOSのTerminal.appは文字コードが標準でUTF-8に設定されていることもあり何かと不都合があるので、以下のように設定を行う。
alias javac='javac -encoding UTF-8' alias java='java -Dfile.encoding=UTF-8'
Solr
http://lucene.apache.org/solr/
何かと話題に登ることも多いオープンソースの検索エンジンApache Solrも2010年6月下旬にバージョン1.4.1がリリースされているので、こちらを利用する。ダウンロードミラーサイトからアーカイブファイル(zipまたはtgz)をダウンロードし、適当な作業ディレクトリでアーカイブを展開する。
展開してできたディレクトリの中にexampleというディレクトリがあるので、今回はそれをそのまま使うことにする。exampleディレクトリに移動して、Solrを起動してみよう。
$ cd apache-solr-1.4.1/example $ java -jar start.jar
ログが止まったところで起動完了なので、ブラウザでadmin画面を確認する。
http://localhost:8983/solr/admin/
MeCab
MeCab http://http://mecab.sourceforge.net/
MeCab(めかぶ)はオープンソースの日本語形態素解析エンジン。同じ日本語形態素解析器としては KAKASI, JUMAN, ChaSen などがあるがそれらと比べて高速に動作するとのこと。
インストールについてはMacPortsを利用する。コマンドは以下のとおり。
$ sudo port install mecab $ sudo port install mecab-ipadic-utf8
インストールが完了したら、一箇所だけ手書きで修正
$ sudo vi /opt/local/etc/mecabrc
dicdir = /opt/local/lib/mecab/dic/ipadic ↓ dicdir = /opt/local/lib/mecab/dic/ipadic-utf8
cmecab-java
cmecab-java http://code.google.com/p/cmecab-java/
今回の主役。
インストール方法については↑のサイト(GoogleCode)のwikiに日本語で記載があるので、それを参考にしながらやる。
事前準備
wikiに記載されているネイティブライブラリも含めたすべての構築を行うので、以下のツール類もインストールしておく。
$ sudo port install apache-ant $ sudo port install scons $ sudo port install protobuf-java
ダウンロード&展開
$ cd workspace $ curl -O http://cmecab-java.googlecode.com/files/cmecab-1.7.tar.gz $ tar zxf cmecab-1.7.tar.gz
Javaライブラリの構築
展開したディレクトリに移動して、antでビルド。
cmecab-1.7/binディレクトリにcmecab-1.7.jarが生成されている。
これをapache-solr-1.4.1/example配下にコピー。
$ mkdir ../apache-solr-1.4.1/example/solr/lib $ cp ../cmecab-1.7/bin/cmecab-1.7.jar ../apache-solr-1.4.1/example/solr/lib/.
このほかに、今回はLocalProtobufTaggerなども利用する前提なので、cmecab-1.7/lib配下のjarもsolrのプラグインディレクトリにコピーする。
$ cp ../cmecab-1.7/lib/*.jar ../apache-solr-1.4.1/example/solr/lib/.
ネイティブライブラリの構築
展開したディレクトリ配下、jniディレクトリに移動して、まずは設定変更。
SConstruct - 34行目付近から
@@ -34,11 +34,12 @@ incpath = [join(javahome, 'include'), join(javahome, 'include', 'solaris')] else: - javahome = '/usr/lib/jvm/java-6-sun' + javahome = '/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home' incpath = [join(javahome, 'include'), - join(javahome, 'include', 'linux')] + join(javahome, 'include', 'linux'), + r'/opt/local/include'] - libpath = ['/usr/lib', '/usr/local/lib'] + libpath = ['/opt/local/lib', '/usr/lib', '/usr/local/lib'] libs = ['mecab', 'protobuf'] ccflags = (['-Wall', '-g', '-O2'] +
編集ができたら、さっそくビルド。
すると、jniディレクトリに以下のライブラリが生成されている。
libCMeCab.dylib libCMeCab_protobuf.dylib
あとはこれを java.library.path で指定されたパス配下にコピー。
$ sudo cp libCMeCab* /Library/Java/Extensions/.
ここまで出来たらあとは http://code.google.com/p/cmecab-java/wiki/HowToUse に書かれている通りにschema.xmlに定義を追加して、solrを起動し直せばOK*1。