mecab-ipadic-neologd辞書を組み込んだ、lucene kuromojiを作成するコンパイル環境をdocker化しました。
環境構築
git clone https://github.com/ft28/practice.git
cd solr/neologd
docker-compose build
jar ファイル作成
docker-compose run jdk ./solr/build.sh
上記コマンドを実行すると、mecab, mecab-ipadic, lucene-solrの各リポジトリを取得、dockerコンテナ内でコンパイルが実行され、neologd辞書を含んだ lucene kuromoji jarファイルがsolrディレクトリ以下に作成されます。このjarファイルを、既存jarファイルと置き換えると、solrでneologd辞書を使った形態素解析が可能になります。
neologd 辞書のコンパイルオプション
build.sh でneologd辞書をコンパイルする際には、[build.shのL59]
(https://github.com/ft28/practice/blob/master/solr/neologd/solr/build.sh#L59) のように、--ignore_noun_ortho オプションを追加して、一般名詞/固有名詞の表記ゆれ無効にしました。
--ignore_noun_ortho を指定せず辞書を作成して、solr の schema.xmlで、solr.JapaneseBaseFormFilterFactory をフィルタとして登録すると、
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<!-- トークン化 -->
<tokenizer class="solr.JapaneseTokenizerFactory" mode="normal" />
<!-- 基本形になおす -->
<filter class="solr.JapaneseBaseFormFilterFactory"/>
</analyzer>
</fieldType>
「ミツミ」を解析した時の最終出力が「三身」になってしまうという問題が発生します。
JT | text | ミツミ |
baseForm | 三身 | |
JBFF | text | 三身 |
これは neologd-common-noun-ortho-variant-dict-seed.20170228.csv 内で以下のようなデータが作成されているため発生します。
ミツミ,1285,1285,5527,名詞,一般,*,*,*,*,三身,ミツミ,ミツミ
そこで、上記辞書データファイルを作成しないよう --ignore_noun_ortho を指定して、辞書データ作成を行います。
まとめ
普段は、サーバープロセスを動かすために使っているdockerコンテナですが、今回はコンパイル実行環境としてdockerコンテナを活用し、dockerさえ動いていればコマンド一つで必ずコンパイル可能な環境を実現できました。
参考
[修正されたmecab-ipadic-neologdの辞書を、Lucene Kuromojiに適用してみる]
(http://d.hatena.ne.jp/Kazuhira/20150316/1426520209)
- jar ファイルのコンパイル手順はこちらのサイトを参考にしました。