Mecabのシステム辞書・ユーザ辞書の利用方法について

# はじめに
　オープンソースの日本語形態素解析器：[MeCab](http://taku910.github.io/mecab/)の辞書を利用する方法を備忘録として記録します。
　MeCabの辞書には、システム辞書とユーザ辞書があります。
　システム辞書の方が処理が早いと言われており、ユーザ辞書を使用する機会は少ないと思われる。
　また、MeCab用の新語辞書・固有表現に強いシステム辞書：mecab-ipadic-NEologdが公開されている。mecab-ipadic-NEologdは、毎週２回（月曜日と木曜日）に一般サイト（はてなキーワードや郵便番号データやSNS，ニュース記事など）から情報を収集して更新されている。
 
参考サイト：
　[MeCab公式サイト](http://taku910.github.io/mecab/#install-windows)
　[MeCabの辞書をカスタマイズする](http://www.mwsoft.jp/programming/nlp/mecab_dictionary_customize.html)
　[mecab-ipadic-neologd - GitHub](https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md)

# 環境
　OS：Red Hat Enterprise Linux 7.2
　MeCab：0.996
　
# MeCabのシステム辞書インストール
　MeCab本体のインストールは既に完了している状態から始める。
　MeCabの公式ページにおいて、MeCab用の辞書が公開されており[IPA 辞書](https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM)を使用するのが推奨されている。公開されているIPA辞書は、文字コードがEUC-JPで提供されており、公式な手順では辞書のコンパイル時にUTF-8に毎回変換して使用する手順となっている。
　しかしながら、外字などのUnicode環境固有コードを含む文字を辞書に登録する場合などに不自由があるため、コンパイル前のCSVファイルをUTF-8にしておく方法を記述します。

1. システム辞書をUTF-8化
2. 辞書のインストール
3. 辞書の更新手順

#### システム辞書をUTF-8化
[IPA 辞書](https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM)から辞書ファイルをダウンロードして、パソコン上(自分の場合はWindowsです)で解凍します。
　解凍したら、mecab-ipadic-2.7.0-20070801フォルダ配下のcsvファイルおよびdefファイルをテキストエディタで開き、エンコードをUTF-8，改行コードをLFに変更して上書きする。
　mecab-ipadic-2.7.0-20070801フォルダ配下のMakefileファイル開き、「-f EUC-jp」から「-f utf8」に変更して上書き保存する。
 
```vi:Makefile
＜省略＞
matrix.bin char.bin sys.dic unk.dic:
        $(mecab_dict_index) -d . -o . -f utf8 -t utf8
        echo To enable dictionary, rewrite /usr/local/etc/mecabrc as \"dicrc = /usr/local/lib/mecab/dic/ipadic\"
＜省略＞
```

　変換後は、必要に応じて再度圧縮しておく。
 
#### 辞書のインストール
　以下のコマンドで辞書のインストールを行います。

```
$ tar xvf mecab-ipadic-2.7.0-20070801.tar.gz
$ cd mecab-ipadic-2.7.0-20070801/
$ ./configure
$ make
$ sudo make install
```

#### 辞書の更新手順
　システム辞書に追加したい場合は、既存のCSVファイルに追記するか、新規でCSVファイルを追加します。
　辞書のコンパイルは、mecab-ipadic-2.7.0-20070801フォルダ配下にあるCSVファイルをすべてコンパイルしてくれます。
 
```
$ make clean
$ make
$ sudo make install
```

#### システム辞書の格納先
　システム辞書は以下のディレクトリに格納されます。システム辞書の保存先は、`/usr/local/bin/mecab-config`ファイルを編集することで、コンパイル時の格納先を変更できるようです。

```vi:格納先ディレクトリ
/usr/local/lib/mecab/dic/ipadic
```

# ユーザ辞書の追加
　ユーザ辞書は、システム辞書と同一のフォーマットでCSVファイルを作成します。`mecab-dict-index`コマンドでバイナリ形式に変換してからユーザ辞書の登録を行います。

#### ユーザ辞書の作成
　文字コードをutf-8でユーザ辞書：user.csvを作成し、以下のコマンドでユーザ辞書をコンパイルします。

```
$ cd /tmp/MeCab/
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic/ -u user.dic -f utf-8 -t utf-8 user.csv
$ cp -p user.* /usr/local/lib/mecab/dic/userdic/
```

#### ユーザ辞書の登録
　MeCabの設定ファイル：`/usr/local/etc/mecabrc`に以下の形式で定義を追加する。また、ユーザ辞書はカンマで区切って指定することで複数認識させることができます。

```
userdic = /usr/local/lib/mecab/dic/userdic/user.dic,/usr/local/lib/mecab/dic/userdic/user2.dic
```

　MeCab起動時にコマンドラインでユーザ辞書を指定する場合は、`-u`オプションを指定します。

```
$ mecab -u /usr/local/lib/mecab/dic/userdic/user.dic
```

# mecab-ipadic-NEologdのオフラインインストール
　外部サイトに接続できない環境でインストール手順を整理しておきます。
　mecab-ipadic-NEologdを[ダウンロード](https://github.com/neologd/mecab-ipadic-neologd)します。
　ダウンロードした資源は、文字コードがUTF-8になっているため、そのまま使用します。
　また、１つのサーバ(MeCab)にて、IPA辞書とNEologd辞書のどちらのシステム辞書を切り替えて使用できるようにします。
　そのための手順は以下のとおりとなります。

1. IPA辞書を退避
2. NEologd辞書をコンパイル
3. IPA辞書の復元
4. デフォルトのシステム辞書設定

#### IPA辞書を退避
　既存のIPA辞書を退避します。
 
```
mv /usr/local/lib/mecab/dic/ipadic /usr/local/lib/mecab/dic/ipadic_bak
```

#### NEologd辞書をコンパイル
　`mecab-ipadic-neologd-master.zip`をIPA辞書をコンパイルした際に使用したディレクトリに格納します。`mecab-ipadic-2.7.0-20070801`ディレクトリが存在していることを前提で記述します。
 
```
$ unzip mecab-ipadic-neologd-master.zip
$ cd mecab-ipadic-neologd-master/seed/
$ xz -dv *.csv.xz
$ mv *.csv ../../mecab-ipadic-2.7.0-20070801/
$ cd ../../mecab-ipadic-2.7.0-20070801/
$ ./configure
$ make clean
$ make
$ su
# sudo make install
# mv /usr/local/lib/mecab/dic/ipadic /usr/local/lib/mecab/dic/neologd
```
#### IPA辞書を復元
　既存のIPA辞書を復元します。
 
```
mv /usr/local/lib/mecab/dic/ipadic_bak /usr/local/lib/mecab/dic/ipadic
```

#### デフォルトのシステム辞書設定
　デフォルトで使用するシステム辞書のディレクトリを指定します。

```vi:/usr/local/etc/mecabrc
dicdir =  /usr/local/lib/mecab/dic/ipadic
```

　一時的にシステム辞書を変更する場合は、以下のコマンドでMeCabを起動します。

```
$ mecab -d /usr/local/lib/mecab/dic/neologd
```

# 参考サイト

[MeCabのコマンドライン引数一覧とその実行例](http://www.mwsoft.jp/programming/munou/mecab_command.html)
[mecab-ipadic-neologdがすごいという話](http://kivantium.hateblo.jp/entry/2015/03/15/175612)