kuromojiをneologdの辞書に対応させる

デフォルトの辞書のままkuromojiを使うというのは、相当不利だということがわかってきて、新しい言葉に対応しているneologdを使えるようにしたいと思った。次のサイトが最終的に参考にできた。感謝いたします。
http://d.hatena.ne.jp/Kazuhira/20150814/1439565514
3年前のものだが、タイムスタンプなどを、ちょっと変えるだけで、結果的にうまく言ったのでそれを記載しておく。以下、macでやっているので誤解なく。

適当なフォルダに移動し、kuromojiのソースを取ってくる。

$ git clone https://github.com/atilika/kuromoji.git

CSV辞書を作成する。

$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ libexec/make-mecab-ipadic-neologd.sh

先ほどのkuromojiのフォルダへ移動し、フォルダを作成し、CSVの辞書をコピーする。ここで、../mecab-ipadic-neologd/build/にある、辞書のタイムスタンプを確認しなければならない。この時点では、20180831となっていた。

$ mkdir kuromoji-ipadic/dictionary
$ cp -R /path/to/mecab-ipadic-neologd/build/mecab-ipadic-2.7.0-20070801-neologd-20180831 kuromoji-ipadic/dictionary

ビルドを行う前に、コンパイル時のヒープを広げておく。

$ export MAVEN_OPTS='-Xmx4g'

ビルドします。mavenが必要になる。

$ mvn -pl kuromoji-ipadic -am package -DskipTests=true -DskipDownloadDictionary=true -Dkuromoji.dict.dir=kuromoji-ipadic/dictionary/mecab-ipadic-2.7.0-20070801-neologd-20180831 -Dkuromoji.dict.encoding=utf-8

これで、kuromoji-ipadic/target/に、jarファイルができている。

-rw-r--r--  1 washida  staff  112358570  9  9 08:42 kuromoji-ipadic-1.0-SNAPSHOT.jar

これだけでいいかと思ったのが浅はかだった。これをまえのkuromojiと同じようにライブラリファイルとしてくっつければ動くかと思ったのだが、クラスが見つからないという激しいエラーが出て失敗。ここで使っている親クラスがないぜということだった。結局それが、kuromoji-coreフォルダにあることがわかったので、そこもビルドする。まえのコマンドラインのフォルダだけ変えた。それでいいのかどうかわからなかったが、まあ、ビルドが成功したのでOK。

$ mvn -pl kuromoji-core -am package -DskipTests=true -DskipDownloadDictionary=true -Dkuromoji.dict.dir=kuromoji-ipadic/dictionary/mecab-ipadic-2.7.0-20070801-neologd-20180831 -Dkuromoji.dict.encoding=utf-8

これで、kuromoji-core/targetにjarファイルができているので、これも同時に、ライブラリとして登録したら、うまくビルドできた。

import com.atilika.kuromoji.ipadic.Token;
import com.atilika.kuromoji.ipadic.Tokenizer;
public class KuromojiNeologdTest2 {

    public static void main(String[] args) {
        Tokenizer tokenizer = new Tokenizer();
        String phrase = "溺れる者は藁をも掴む";
        for (Token token : tokenizer.tokenize(phrase)) {
            System.out.println(token.getBaseForm());
            System.out.println(token.getConjugationForm());
            System.out.println(token.getConjugationType());
            System.out.println(token.getPartOfSpeechLevel1());
            System.out.println(token.getPartOfSpeechLevel2());
            System.out.println(token.getPartOfSpeechLevel3());
            System.out.println(token.getPartOfSpeechLevel4());
            System.out.println(token.getPronunciation());
            System.out.println(token.getReading());
            System.out.println();
        }
    }
}

以前のkuromojiだと、ことわざの中身を形態要素解析してしまっていたが、これは、丸ごと扱っている。

run:
溺れる者は藁をも掴む
*
*
名詞
固有名詞
一般
*
オボレルモノハワラオモツカム
オボレルモノハワラヲモツカム

最後に、kuromoji-ipadicの他にkuromoji-ipadic-neologdフォルダもあって、neologdが付いているのでそっちの方がいいかと思ったが、どう違うかわからない。ただ、こちらの方がneologdが付いているので、いいような気がして、そちらをコンパイルして、使って見たが、結果も同じものだった。後者を使おうと思っている。