日本語形態素解析システム JUMAN++ における辞書の追加

# はじめに

JUMAN++ （Ver 1.02）の辞書の追加方法（ユーザ定義辞書の設定方法）について試行しましたので、その追加方法について記述します。

# 環境

* Ubuntu 20.04.1 LTS
* JUMAN++ 1.02

# JUMAN++のインストール

まず、[京都大学 黒橋・褚・村脇研究室](http://nlp.ist.i.kyoto-u.ac.jp/)の[JUMAN++のページ](http://nlp.ist.i.kyoto-u.ac.jp/?JUMAN%2B%2B)から、Ver 1.02のファイル（jumanpp-1.02.tar.xz、約600MB）をダウンロードします。その後、以下のコマンドでインストールします。makeするにあたって、g++とlibboost-all-devが必要なので、インストールします。

```
tar Jxvf jumanpp-1.02.tar.xz
cd jumanpp-1.02/
sudo apt-get install g++
sudo apt-get install libboost-all-dev
./configure --prefix=/usr/local
make
sudo make install
```

なお、インストールにあたっては、「[MeCabよりも高精度なJUMAN++をUbuntuにインストールしたよ](https://foolean.net/index.html@p=499.html)」のページを参考にしました。

# 辞書の追加

「**仕事の帰りに新風館に行った。**」という文章を形態素解析することを考えます（「新風館」については、[こちら](https://shinpuhkan.jp/)をご覧ください）。デフォルトの辞書を使用していると、以下のように「新風」と「館」に分かれて、それぞれ普通名詞として解析されます。解析結果を固有名詞とするには、辞書を追加します。

```
stack@stack:~/jumanpp/jumanpp-1.02/dict-build$ echo "仕事の帰りに新風館に行った。" | jumanpp
仕事 しごと 仕事 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:仕事/しごと カテゴリ:抽象物 ドメイン:家庭・暮らし;ビジネス"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
帰り かえり 帰り 名詞 6 普通名詞 1 * 0 * 0 "代表表記:帰り/かえりv 自他動詞:他:帰す/かえす 反義:動詞:行く/いく;動詞:来る/くる 連用形名詞化:形態素解析"
に に に 助詞 9 格助詞 1 * 0 * 0 NIL
新風 しんぷう 新風 名詞 6 普通名詞 1 * 0 * 0 "代表表記:新風/しんぷう カテゴリ:抽象物"
館 かん 館 名詞 6 普通名詞 1 * 0 * 0 "代表表記:館/かん 漢字読み:音 カテゴリ:場所-施設"
に に に 助詞 9 格助詞 1 * 0 * 0 NIL
行った いった 行く 動詞 2 * 0 子音動詞カ行促音便形 3 タ形 10 "代表表記:行く/いく 付属動詞候補（タ系） ドメイン:交通 反義:動詞:帰る/かえる"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
```

辞書の追加方法については、[JUMAN++ マニュアル v1.01](http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-manual-1.01.pdf)に記載がありますので、その方法に従って追加します。ダウンロードしたファイルを展開した```jumanpp-1.02/dict-build/userdic.mdic```を見て、それにならって、```jumanpp-1.02/dict-build/userdic```以下に例えば```user.dic```というファイルを新規作成して、以下の内容を記述します。どのように定義すれば良いかは、```userdic.mdic```および[JUMAN++ マニュアル v1.01](http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-manual-1.01.pdf)をご確認ください。

```
(名詞 (固有名詞 ((読み しんぷうかん)(見出し語 (新風館 1.1))(意味情報 "代表表記 新風館/新風館 副詞識別 自動獲得:テキスト"))))
```

そして、```jumanpp-1.02/dict-build```ディレクトリに移動して、以下のコマンドで辞書をビルドしてインストールします。```install.sh```を実行するために、zshが必要なのでインストールしておきます。なお、辞書のビルド（make）については時間がかかります。私の環境だと数分といったところです。

```
make
sudo apt-get install zsh
sudo ./install.sh --prefix /usr/local
```

実行結果は以下のとおりです。

```
stack@stack:~/jumanpp/jumanpp-1.02/dict-build$ make
cat userdic/*.dic > userdic.mdic
mkdir -p jumanpp_dic &&\
cat dic.mdic wikipediadic.mdic wiktionarydic.mdic webdic.mdic onomatopedic.mdic userdic.mdic | perl -Iscripts -Iscripts/lib/ scripts/jumandic2morphdic.perl --nominalize --okurigana > jumanpp.mdic &&\
mkdarts_jumanpp jumanpp.mdic jumanpp_dic/dic &&\
date +%Y-%m-%d-%h-%m-%s > jumanpp_dic/version
983427output nominalize
line break
size: 13038.
Making Double Array: 100% |*******************************************|                                    | 
Done!, Compression Ratio: 94.407 %
stack@stack:~/jumanpp/jumanpp-1.02/dict-build$ sudo ./install.sh --prefix /usr/local
cp ./jumanpp_dic/dic.base ./jumanpp_dic/dic.bin ./jumanpp_dic/dic.da ./jumanpp_dic/dic.form ./jumanpp_dic/dic.form_type ./jumanpp_dic/dic.imis ./jumanpp_dic/dic.pos ./jumanpp_dic/dic.read ./jumanpp_dic/dic.rep ./jumanpp_dic/dic.spos /usr/local/share/jumapp/.
cd /usr/local/share/jumanpp/
rm -f dic.imis.map dic.form.map dic.base.map dic.form_type.map dic.pos.map dic.read.map dic.rep.map dic.spos.map
Creating cache files
```

辞書をインストールした後の解析結果だと、「新風館」は固有名詞と解析されています。

```
stack@stack:~/jumanpp/jumanpp-1.02/dict-build$ echo "仕事の帰りに新風館に行った。" | jumanpp
仕事 しごと 仕事 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:仕事/しごと カテゴリ:抽象物 ドメイン:家庭・暮らし;ビジネス"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
帰り かえり 帰り 名詞 6 普通名詞 1 * 0 * 0 "代表表記:帰り/かえりv 自他動詞:他:帰す/かえす 反義:動詞:行く/いく;動詞:来る/くる 連用形名詞化:形態素解析"
に に に 助詞 9 格助詞 1 * 0 * 0 NIL
新風館 しんぷうかん 新風館 名詞 6 固有名詞 3 * 0 * 0 "代表表記 新風館/新風館 副詞識別 自動獲得:テキスト"
に に に 助詞 9 格助詞 1 * 0 * 0 NIL
行った いった 行く 動詞 2 * 0 子音動詞カ行促音便形 3 タ形 10 "代表表記:行く/いく 付属動詞候補（タ系） ドメイン:交通 反義:動詞:帰る/かえる"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
```