形態素解析ツールインストール(MeCab,Juman++,Janome,GiNZA)

日本語のテキスト処理には形態素解析ツールが欠かせませんが、都度ツールのインストール方法を調べるのが面倒だったので、以下の4つについてインストールをまとめました

- MeCab
- Juman++
- Janome
- GiNZA

インストール環境：Ubuntu 18.04

## MeCab
[公式サイト](https://taku910.github.io/mecab/)より引用
> MeCabは 京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。


```
apt-get install -y mecab libmecab-dev mecab-ipadic-utf8
```

デフォルトの辞書では新語などの固有名詞が形態素に分解されてしまうため`mecab-ipadic-NEologd`を使用する事が多い。
この辞書を使って分割した際の単語の粒度が形態素になるか分からないので、形態素辞書ではなく「単語分かち書き」用の辞書という扱いになる[^1]

```
cd /usr/local/src
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n

#すべての辞書をインストールする場合
# ./bin/install-mecab-ipadic-neologd -n -a
#デフォルトのインストール先の確認する場合
# echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

#デフォルトの辞書をmecab-ipadic-neologdにする
sed -i 's/dicdir.*/dicdir = \/usr\/lib\/x86_64-linux-gnu\/mecab\/dic\/mecab-ipadic-neologd/' /etc/mecabrc
```

上がMeCabデフォルト、下がmecab-ipadic-NEologdを使用した場合の形態素解析結果
東京スカイツリーを固有名詞として扱い、分解していないことが分かる

```
東京	名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
スカイ	名詞,一般,*,*,*,*,スカイ,スカイ,スカイ
ツリー	名詞,一般,*,*,*,*,ツリー,ツリー,ツリー
EOS

東京スカイツリー	名詞,固有名詞,一般,*,*,*,東京スカイツリー,トウキョウスカイツリー,トーキョースカイツリー
EOS
```

pythonから使用するためには、pythonバインディングのライブラリをインストールする

```
pip install mecab-python3
```

pythonでの使用例

```python
import MeCab
#辞書を指定
mecab = MeCab.Tagger("-Owakati -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
mecab.parse("東京スカイツリ-")

#'東京スカイツリー \n'
```

なぜか`mecabrc`でMeCabが参照する辞書パスを変えても、`python-mecab`のデフォルト辞書が変わらず...直接指定しています


## Juman++
[黒橋・河原研究室](http://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN++)より引用
> JUMAN++は言語モデルを利用した高性能な形態素解析システムです．言語モデルとして Recurrent Neural Network Language Model(RNNLM) を用いることにより，単語の並びの意味的な自然さを考慮した解析を行います．それにより JUMAN，MeCab に比べ大きく性能が向上しています．

```
#パッケージのダウンロード
wget https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc3/jumanpp-2.0.0-rc3.tar.xz

#解凍、インストール
tar xf jumanpp-2.0.0-rc3.tar.xz
cd jumanpp-2.0.0-rc3
mkdir bld
cd bld
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
make
sudo make install
```

pythonから使用するには`PyKNP`を通して使用する
`PyKNP`は形態素解析器JUMAN++(JUMAN)と構文解析器KNPのpythonバインディング

```
pip install pyknp
```

```python
from pyknp import Juman
jumanpp = Juman()
result = jumanpp.analysis("東京スカイツリー")
for mrph in result.mrph_list():
   print(mrph.midashi)

#東京
#スカイツリー
```

- バージョンの場所:https://github.com/ku-nlp/jumanpp/releases


## Janome
[Janome v0.3 documentation](https://mocobeta.github.io/janome/)から引用
> Pure Python で書かれた，辞書内包の形態素解析器です。
依存ライブラリなしで簡単にインストールでき，アプリケーションに組み込みやすいシンプルな API を備える形態素解析ライブラリを目指しています。

別途外部エンジン、辞書などを使用しないのでpipのみでインストール可能
パッと形態素解析を試すのには丁度いい

```
pip install janome
```


## GiNZA
[GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜](https://www.slideshare.net/MegagonLabs/ginza-cabocha-udpipe-stanford-nlp)から引用

> GiNZA - 特長 •MITライセンスでモデルを含めて商用利用可能 • BCCWJ由来の依存構造解析モデルをフリーで利用可能 • 他の日本語UD解析系が使用するGSDコーパスの5倍以上の規模で学習 •pip一行ですべて導入完了 • SudachiPyおよび150万語彙を備えるSudachi辞書も一括インストール • MeCab・CaboCha等と比較してDocker等での環境構築が圧倒的に楽 •spaCyの豊富な機能セットを利用できる • 日本語以外の言語モデルへの切り替えが容易 (spaCy公式サポートは8言語) • 依存構造解析結果の視覚化 → displaCy • アノテーションツール → Prodigy 21

英語圏で有名な自然言語処理ライブラリであるspaCyのフレームワークに乗っかっており、形態素解析器にSudachiPyが使用されている
形態素解析用の辞書なども同時にインストールされる

```
 pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
```

```python
import spacy
nlp = spacy.load('ja_ginza')

doc = nlp("東京スカイツリー")
for token in doc:
   print(token)

#東京
#スカイツリー
```

******
個人的にはpip一発で入るGiNZAが楽だなーと思ったのですが、解析器にはそれぞれ特徴があるので、どうしても適用先に応じたものをインストールする必要がありそうです

他にも形態素解析器 Kytea[^2]、係り受け解析器 CaboCha[^3] などのインストールも試してみましたが、エラーで入れる事ができず。できれば追記していきます。

[^1]: [新語・固有表現に強い「mecab-ipadic-NEologd」の効果を調べてみた](https://engineering.linecorp.com/ja/blog/mecab-ipadic-neologd-new-words-and-expressions/)
[^2]: [Kytea](http://www.phontron.com/kytea/index-ja.html)
[^3]: [CaboCha](http://taku910.github.io/cabocha/)