MeCabとCaboChaをMacに導入してPythonから使ってみる

# TL;DR

- 自然言語処理には欠かせないライブラリであるMeCabとCaboChaをbrewでサクッと導入する
- ついでにpythonから使えるようにしちゃう

# 環境

- macOS X 10.13.3 High Sierra
- python 3.6

# Homebrewのインストール

Homebrewまだ入れてない方は`Terminal.app`を開いて以下コマンドを実行してください。

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

# ビルド等に必要なもののインストール

このあと必要となるもので、入ってないと困るものをインストールしておきます。

```
brew install git curl xz
```

# CRF++のインストール

CaboChaを使用する上で必要な依存ライブラリです。Homebrew経由でインストールできます。

```
brew install crf++
```

# MeCabのインストール

MeCabは形態素解析エンジンです。日本語の文章解析を行う上では欠かせないものです。

これもHomebrew経由でインストールできます。

```
brew install mecab mecab-ipadic
```

`mecab`というコマンドを叩くと使用することができます。

```
$ mecab
きょうはいい天気ですね。
きょう	名詞,副詞可能,*,*,*,*,きょう,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
いい	形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気	名詞,一般,*,*,*,*,天気,テンキ,テンキ
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね	助詞,終助詞,*,*,*,*,ね,ネ,ネ
。	記号,句点,*,*,*,*,。,。,。
EOS
```

mecabを終了するためには、`Ctrl+C`を入力します。

## 追加辞書のインストール（任意）

先程導入したIPA辞書（`mecab-ipadic`）でも十分なのですが、最近の語彙等に対応するためには追加辞書が必要です。

ここでは、有名な追加辞書である[mecab-ipadic-NEologd](https://github.com/neologd/mecab-ipadic-neologd)を使用します。

NEologdを使用するメリットについては、公式GitHubのREADMEによくまとまっているので、気になる方はご参照ください。
https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md

まずは、`mecab-ipadic-NEologd`をGitHub上からクローンしてきます。

```
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
```

以下コマンドを実行し、画面の指示に従うとインストールが完了します。

インストールする辞書はオプションで選べるのですが、基本的には標準設定で十分だと思います。

### 標準設定（一部の辞書はインストールされない）

```
./bin/install-mecab-ipadic-neologd -n
```

### 全辞書をインストールする場合

全辞書をインストールしたい場合は、合計2Gbyte程度の空き容量が必要です。

```
./bin/install-mecab-ipadic-neologd -n -a
```

## 追加辞書の使用方法

`mecab`コマンドに対して`-d`オプションで辞書の位置を指定することで使用することができます。

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

上記手順通りにインストールしていれば、`mecab-ipadic-NEologd`は、`/usr/local/lib/mecab/dic/mecab-ipadic-neologd/`にインストールされるはずです。

# CaboChaのインストール

さて、いよいよ本題です。

CaboChaは、係り受け解析エンジンです。これもHomebrewでインストールすることができます。

```
brew install cabocha
```

`cabocha`というコマンドを叩くと使用できます

```
$ cabocha
今日はいい天気ですね。
      今日は---D
          いい-D
    天気ですね。
EOS
```

終了するには、`Ctrl+C`を入力します。

# Pythonバインディングをインストールする

## MeCabのPythonバインディング

以下コマンドでインストールすることができます。

```
pip install mecab-python3
```

使い方は以下の様な感じです。

```python3
>>> import MeCab
>>> tagger = MeCab.Tagger("-Ochasen")
>>> print(tagger.parse("きょうはいい天気ですね。"))
きょう	キョウ	きょう	名詞-副詞可能
は	ハ	は	助詞-係助詞
いい	イイ	いい	形容詞-自立	形容詞・イイ	基本形
天気	テンキ	天気	名詞-一般
です	デス	です	助動詞	特殊・デス	基本形
ね	ネ	ね	助詞-終助詞
。	。	。	記号-句点
EOS
```

## CaboChaのPythonバインディング

CaboChaのリポジトリをクローンする必要がありますが、リポジトリサイズが100M超なのでzipで落とします。

```
curl -OL https://github.com/taku910/cabocha/archive/master.zip
unzip master.zip
cd cabocha-master
pip install python/
```

公式が提供しているPythonバインディングは上記手順でインストールすることができます。

ただ、公式のものは少し使い方が煩雑です。
そこで、kenkovさんがPython3用のラッパーライブラリを開発しています。こちらがわりと便利なので、お好みで導入してください。
https://github.com/kenkov/cabocha

以下コマンドでインストールすることができます。

```
git clone https://github.com/kenkov/cabocha
pip install cabocha/
```

GitHubの[README](https://github.com/kenkov/cabocha/blob/master/README.rst)によると、使い方は、以下の様な感じです。

```python3
>>> from cabocha.analyzer import CaboChaAnalyzer
... analyzer = CaboChaAnalyzer()
... tree = analyzer.parse("日本語の形態素解析はすごい")
... for chunk in tree:
...     for token in chunk:
...         print(token)
...
Token("日本語")
Token("の")
Token("形態素")
Token("解析")
Token("は")
Token("すごい")
```

チャンクの係り先は、以下のようにして取得します。

```python3
>>> chunks = tree.chunks
>>> start_chunk = chunks[0]
>>> start_chunk.next_link
Chunk("形態素解析は")
>>> start_chunk.next_link.next_link
Chunk("すごい")
>>> # 次の呼び出しは EndOfLinkException 例外が発生する
>>> # start_chunk.next_link.next_link.next_link
```

# 参考サイト

https://qiita.com/yuichy/items/5c8178e5cc3711386b77
https://qiita.com/yoshikyoto/items/1a6de08a639f053b2d0a
https://qiita.com/grachro/items/4fbc9bf8174c5abb7bdd
https://github.com/kenkov/cabocha
https://github.com/taku910/cabocha
https://qiita.com/nezuq/items/f481f07fc0576b38e81d
https://qiita.com/grachro/items/4fbc9bf8174c5abb7bdd