先日、Atilika Kuromojiの0.9.0がリリースされたようです。
kuromoji - japanese morphological analyzer
オフィシャルサイトの記述は、0.7.7のままですが…
Maven Centralからダウンロードできます。
http://search.maven.org/#search|ga|1|g%3A%22com.atilika.kuromoji%22
はてなで、うまくリンクにならん…。
で、このKuromojiですが、0.7.7の頃はダメだったものの、0.9.0からはmecab-ipadic-NEologdの辞書が適用できるようになったので、mecab-ipadic-NEologdをKuromojiに組み込んでビルドするbashスクリプトを書きました。
以前に作ったLucene Kuromojiにmecab-ipadic-NEologdを組み込んでビルドするスクリプトの、Atilika Kuromoji版です。
Lucene Kuromojiに対して、mecab-ipadic-neologdの辞書を適用してビルドするbashスクリプトを書きました - CLOVER
必要なソフトウェアは、mecab-ipadic-NEologdが要求する以下のもの…
- C++ Compiler
- iconv (libiconv)
- xz
あと、このスクリプトでKuromojiをビルドするのに、以下が必要です。
MeCabとオリジナルのIPA辞書は、なければ勝手にダウンロードしてきてローカルビルドします。インストール済みであれば、そのままそれを使います。
スクリプトは、GitHubに置いています。
https://github.com/kazuhira-r/kuromoji-with-mecab-neologd-buildscript/blob/master/build-atilika-kuromoji-with-mecab-ipadic-neologd.sh
このスクリプトを、ダウンロードしてきて実行権限を付与します。
$ wget https://raw.githubusercontent.com/kazuhira-r/kuromoji-with-mecab-neologd-buildscript/master/build-atilika-kuromoji-with-mecab-ipadic-neologd.sh $ chmod a+x build-atilika-kuromoji-with-mecab-ipadic-neologd.sh
で、実行します。
$ ./build-atilika-kuromoji-with-mecab-ipadic-neologd.sh
実行時には、こんな感じでビルド時の情報が表示されます。
#################################################################### applied build options. [MeCab Version] ... mecab-0.996 [MeCab IPA Dictionary Version] ... mecab-ipadic-2.7.0-20070801 [Dictionary CharacterSet] ... utf-8 [mecab-ipadic-NEologd Tag (-N)] ... master [Kuromoji Kuromoji Version Tag (-K)] .. 0.9.0 [Kuromoji Package Name (-p)] ... com.atilika.kuromoji.ipadic ####################################################################
最終的には、このような結果が表示されます。
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ kuromoji-ipadic --- [INFO] Building jar: /xxxxx/kuromoji/kuromoji-ipadic/target/kuromoji-ipadic-0.9.0.jar [INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] Kuromoji ........................................... SUCCESS [ 0.003 s] [INFO] Kuromoji Core ...................................... SUCCESS [ 2.555 s] [INFO] Kuromoji IPADIC .................................... SUCCESS [06:39 min] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 06:42 min [INFO] Finished at: 2015-09-19T11:51:19+09:00 [INFO] Final Memory: 29M/3514M [INFO] ------------------------------------------------------------------------ -rw-rw-r-- 1 xxxxx xxxxx 86983210 9月 19 11:51 kuromoji-ipadic-neologd-0.9.0-20150918.jar ### [2015-09-19 11:51:20] [main] [INFO] END.
できあがったJARファイルは、こちらです。
-rw-rw-r-- 1 xxxxx xxxxx 86983210 9月 19 11:51 kuromoji-ipadic-neologd-0.9.0-20150918.jar
JARファイル名に入っている日付は、mecab-ipadic-NEologdの辞書の日付です。
試してみます。
sample_ipadic_neologd.groovy
import com.atilika.kuromoji.ipadic.Tokenizer def texts = ['すもももももももものうち', 'きゃりーぱみゅぱみゅは、2012年に「つけまつける」でデビュー!', '日本経済新聞でモバゲーの記事を読んだ', 'くりぃむしちゅーは、上田晋也と有田哲平の2人からなる日本のお笑いコンビ', '艦隊これくしょんは、角川ゲームスが開発し、DMM.comが配信しているブラウザゲーム'] def tokenizer = new Tokenizer() texts.each { text -> println("$text") println(' [' + tokenizer.tokenize(text).collect { it.surface }.join(', ') + ']') }
実行。
$ groovy -cp kuromoji-core-0.9.0.jar:kuromoji-ipadic-neologd-0.9.0-20150918.jar sample_ipadic_neologd.groovy
結果。
すもももももももものうち [すもももももももものうち] きゃりーぱみゅぱみゅは、2012年に「つけまつける」でデビュー! [きゃりーぱみゅぱみゅ, は, 、, 2012年, に, 「, つけまつける, 」, で, デビュー, !] 日本経済新聞でモバゲーの記事を読んだ [日本経済新聞, で, モバゲー, の, 記事, を, 読ん, だ] くりぃむしちゅーは、上田晋也と有田哲平の2人からなる日本のお笑いコンビ [くりぃむしちゅー, は, 、, 上田晋也, と, 有田哲平, の, 2, 人, から, なる, 日本, の, お笑いコンビ] 艦隊これくしょんは、角川ゲームスが開発し、DMM.comが配信しているブラウザゲーム [艦隊これくしょん, は, 、, 角川ゲームス, が, 開発, し, 、, DMM.com, が, 配信, し, て, いる, ブラウザゲーム]
OKそうですね。
できること
このスクリプトでは、オプションで以下のことが可能です。
- mecab-ipadic-NEologdのcheckout指定(デフォルトmaster、-Nで変更可)
- KuromojiのバージョンTag指定(デフォルト0.9.0、-Kで変更可)
- kuromoji-ipadicのパッケージ名変更(デフォルトcom.atilika.kuromoji.ipadic、-pで変更可)
例えば、パッケージ名を変えるとすると、以下のような指定になります。
$ ./build-atilika-kuromoji-with-mecab-ipadic-neologd.sh -p mykuromoji.ipadic
ビルド時の情報は、このようになります。
#################################################################### applied build options. [MeCab Version] ... mecab-0.996 [MeCab IPA Dictionary Version] ... mecab-ipadic-2.7.0-20070801 [Dictionary CharacterSet] ... utf-8 [mecab-ipadic-NEologd Tag (-N)] ... master [Kuromoji Kuromoji Version Tag (-K)] .. 0.9.0 [Kuromoji Package Name (-p)] ... mykuromoji.ipadic ####################################################################
この場合、パッケージ名は「mykuromoji.ipadic」となるので、JARファイルの中身はこのように。
$ jar -tvf kuromoji-ipadic-neologd-0.9.0-20150918.jar 0 Sat Sep 19 12:32:22 JST 2015 META-INF/ 133 Sat Sep 19 12:32:20 JST 2015 META-INF/MANIFEST.MF 0 Sat Sep 19 12:25:06 JST 2015 mykuromoji/ 0 Sat Sep 19 12:32:16 JST 2015 mykuromoji/ipadic/ 0 Sat Sep 19 12:25:06 JST 2015 mykuromoji/ipadic/compile/ 12171 Sat Sep 19 12:25:04 JST 2015 META-INF/LICENSE.md 4182 Sat Sep 19 12:25:04 JST 2015 META-INF/NOTICE.md 159 Sat Sep 19 12:25:04 JST 2015 META-INF/CONTRIBUTORS.md 3463720 Sat Sep 19 12:32:10 JST 2015 mykuromoji/ipadic/connectionCosts.bin 111403532 Sat Sep 19 12:32:10 JST 2015 mykuromoji/ipadic/tokenInfoFeaturesMap.bin 2734 Sat Sep 19 12:32:10 JST 2015 mykuromoji/ipadic/tokenInfoPartOfSpeechMap.bin 1623 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/Token.class 2580 Sat Sep 19 12:32:10 JST 2015 mykuromoji/ipadic/unknownDictionary.bin 3498 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/compile/TokenInfoDictionaryCompiler.class 924 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/compile/DictionaryCompiler.class 2256 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/compile/DictionaryEntry.class 1226 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/Tokenizer.class 125928179 Sat Sep 19 12:32:12 JST 2015 mykuromoji/ipadic/doubleArrayTrie.bin 398718 Sat Sep 19 12:32:12 JST 2015 mykuromoji/ipadic/characterDefinitions.bin 1662 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/Tokenizer$Builder$1.class 57239640 Sat Sep 19 12:32:16 JST 2015 mykuromoji/ipadic/tokenInfoDictionary.bin 75775412 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/tokenInfoTargetMap.bin 4776 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/Tokenizer$Builder.class 211 Sat Sep 19 12:32:18 JST 2015 mykuromoji/ipadic/Tokenizer$1.class 0 Sat Sep 19 12:32:44 JST 2015 META-INF/maven/ 0 Sat Sep 19 12:32:44 JST 2015 META-INF/maven/com.atilika.kuromoji/ 0 Sat Sep 19 12:32:44 JST 2015 META-INF/maven/com.atilika.kuromoji/kuromoji-ipadic/ 7625 Sat Sep 19 12:24:50 JST 2015 META-INF/maven/com.atilika.kuromoji/kuromoji-ipadic/pom.xml 120 Sat Sep 19 12:32:20 JST 2015 META-INF/maven/com.atilika.kuromoji/kuromoji-ipadic/pom.properties
出力されるJARファイルの名前は変わりません。
良いこと、悪いこと
Lucene Kuromojiとmecab-ipadic-NEologdの組み合わせに対するPros/Consはこんな感じです。
Pros
Cons
- ビルドが遅い。Lucene Kuromojiの3倍くらいかかる(手元では、6分…)
- コンパイルするのに、現時点でヒープが4G必要(辞書のエントリ数の増加に伴い、今後も要求するヒープは増えるでしょう)
- 0.9.0のKuromojiでしか使えない
Atilika Kuromojiは、0.7系以降に大きくモジュール構成が変わっているので、もしかして追従が難しいのかな…と思わないでもないですが。
Lucene Kuromojiのビルドスクリプトも、Luceneの新バージョンが出る度にちょこちょことメンテナンスしているので、こちらも合わせてやっていこうと思います。