土曜日, 4月 18, 2009

[Solr] GoSenを使う

Javaで形態素解析ライブラリはもうSenしかない状況、、だと思っていましたが、(ちょっと途中で投げ出されている感はあるものの)GoSenのほうが辞書作成もJavaだけでできる等、整備されていて良さそうです。
ただ、Senはトークナイザだけを提供しているので、Solrで使うにはLucene-jaというのを別途取ってきて、そこに入っている"アナライザ"経由で使わなくてはなりません。
つまり、(Lucene-jaの)アナライザが使うトークナイザを、SenからGoSenに変えればよい。。のですが、GoSenはSenから多少構成が変わっているため「ただjarを入れ替え」るだけでは動きません。

細かくはまた別に書こうと思いますが、hideakiさんのブログを参考に、
・Lucene-ja(のSenTokenizer.javaを)書き換え
・無いと不便なbuild.xmlを作成
としたlucene-ja-gosenセットを作りましたので、上げておきます(JDK6で作ったので5で使うならlib以下にあるgosen.jarとか作り直しかも)。

ちなみに、GoSenでもsen.xmlは必要ですが(厳密にはこれはLucene-ja側で使うファイルなので当たり前)、testdata/dictionary/dictionary.xmlをコピーして使えばOKです。

簡単に使い方を。

1.Lucene-ja-gosenをダウンロードして解凍(DIR-Aとする)
2.中のGoSen.tgzをさらに解凍(DIR-Bとする)
4.DIR-B/testdata/dictionaryへ移動してant(辞書作成)
3.sen/confとディレクトリを掘る
5.そのディレクトリへdictionaryで出来たファイルをコピー
 cp *.sen sen/conf
6.そのディレクトリへ以下リネームしてコピー
 mv dictionary.xml sen/conf/sen.xml
7.動かしたいSolrのWEB-INF/libへ移動して以下コピー(※追加参照)
 cp DIR-A/lucene-ja-gosen*.jar (Solrの)WEB-INF/lib
 cp DIR-B/lib/gosen*.jar (Solrの)WEB-INF/lib
8.ココを参考にSolrのschema.xmlへ組込み(senの場合と全く同じで)

/sen/confは起動時の"-Dsen.home"指定を使いたくないからココにしているだけなので変更は可能です。が、辞書とsen.xmlは同じ場所に置きましょう。

追加:
 手順の7は、Solr自体がbuildできる状態なら、build.xmlと同じディレクトリにあるlib以下にこれらjarを入れておけば、適当に(WEB-INF/libに)はいるようなwarを作ってくれます。