【Macメモ】MacのJupyter NotebookでCabochaを動かす

# はじめに
自分のMacにCabochaを導入したのだが、一箇所トラップがあってハマったので、自分用メモ

# 事前準備
MacにJupyter Notebookとbrewコマンドは導入済みであることが前提です。
Jupyter Notebookはanacondaから入れてしまうのが簡単です。

[anaconda サイト](https://www.anaconda.com/distribution/#macos)


* brewコマンド 
 
```
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

# Mecabの導入
最初のステップはMecabの導入です。以下の2つのbrewコマンドを実行します。

## Mecab導入

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

## Mecabテスト

　導入が正常終了したら、簡単なテストを実施します。
　コンソールで、``mecab``を実行し、入力プロンプトが出たら``これは日本語の文章です。``を入力して下さい。
うまくいくと、下記のような結果になるはずです。

```
$ mecab
これは日本語の文章です。
これ    名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は    助詞,係助詞,*,*,*,*,は,ハ,ワ
日本語    名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の    助詞,連体化,*,*,*,*,の,ノ,ノ
文章    名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。    記号,句点,*,*,*,*,。,。,。
EOS
```

結果を確認したら``ctrl+c``でコマンド入力状態に戻します。

## mecab-python3の導入

　最後のステップは、導入されたmecabをpythonのAPIとして利用できるようにすることです。
この目的のため、pipコマンドを利用してmecab-python3を導入します。

```
$ pip install mecab-python3
```

## mecab-python3のテスト
　mecab-python3の導入が正常終了したら、次のnotebookを実行して結果を確認します。

```py3
# MecabをPythonから呼び出す
import MeCab

# 解析対象文
text = 'これは日本語の文章です。'

# 利用パターン1 対象文書を分かち書きにする
tagger1 = MeCab.Tagger("-Owakati")
print('【利用パターン1】分かち書き')
print(tagger1.parse(text).split())
print()


# 利用パターン2 単語毎に分析結果を全部表示する
tagger2 = MeCab.Tagger()
print('【利用パターン2】品詞解析')
print(tagger2.parse(text))
```

次の結果が返ってきたら、OKです。

```

【利用パターン1】分かち書き
['これ', 'は', '日本語', 'の', '文章', 'です', '。']

【利用パターン2】品詞解析
これ	名詞,代名詞,一般,*,*,*,これ,コレ,コレ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
日本語	名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
文章	名詞,一般,*,*,*,*,文章,ブンショウ,ブンショー
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
EOS
```

# Cabochaの導入
次のステップがCabochaの導入です。

## Command Line Toolsのバージョン確認(重要)
次のコマンドで、``CLT``の行を見てCommand Line Toolsのバージョンを確認します。  

```
$ brew --config
```

結果例

```
HOMEBREW_VERSION: 2.1.3
ORIGIN: https://github.com/Homebrew/brew
HEAD: 099b047349d4ec67519206f15401d0e1cf90e953
Last commit: 7 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: fd1ef471a25cb83041e710018f9ad9686fc50d97
Core tap last commit: 30 hours ago
HOMEBREW_PREFIX: /usr/local
CPU: quad-core 64-bit broadwell
Homebrew Ruby: 2.3.7 => /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby
Clang: 10.0 build 1001
Git: 2.21.0 => /usr/local/bin/git
Curl: 7.54.0 => /usr/bin/curl
Java: 12.0.1
macOS: 10.14.5-x86_64
CLT: 9.4.0.0.1.1526532315
Xcode: 10.2.1
```

これから行うビルド作業では、CLTのバージョンが9.4である必要があります。  
もし、CLTのバージョンはこれより大きなものの場合、[Appleダウンロードサイト](https://developer.apple.com/download/more/)から、Command Line Tools 9.4をダウンロード・導入するようにして下さい。

## 必要モジュールの導入
次に、下記のコマンドで、必要なモジュールを導入しておきます。

```
$ brew install git curl xz
$ brew install crf++
```

## Cabochaの導入
いよいよCabochaの導入です。次のコマンドで導入します。

```
$ brew install cabocha
```

## Cabochaのテスト
上記の導入が一通り終わったら、いったんコマンドラインでテストをします。

```
$ cabocha
```

コマンドが実行され、入力プロンプトが出たら``今日はいい天気ですね``と入力してenterキーを押してください。
下記の結果が出れば正常に動いているので、``ctrl + c``で抜けます。

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

## Python用ラッパーの導入
次に、CabochaをPythonから呼び出せるようにします。 少し長いのですが、以下の手順で導入してください。

```
# 作業用ディレクトリは適当に決めて下さい
WORK_DIR=(作業用ディレクトリ)
cd $WORK_DIR

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

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

(備考)CLTのバージョンが古いと最後のpipコマンドでビルドに失敗します。

## Python用ラッパーのテスト
次のコマンドでテストしてみて下さい。

```py3
# Cabochaの利用 (Tokenの取得)
from cabocha.analyzer import CaboChaAnalyzer
analyzer = CaboChaAnalyzer()
tree = analyzer.parse('今日はいい天気ですね')
for chunk in tree:
    for token in chunk:
        print(token

# Cabochaの利用 (チャンクを先頭からたどる)
chunks = tree.chunks
start_chunk = chunks[0]
print('開始チャンク: ', start_chunk)
next_chunk = start_chunk.next_link
print('次のチャンク: ', next_chunk)
```

次のような結果が返ってくれば成功です。


```
Token("今日")
Token("は")
Token("いい")
Token("天気")
Token("です")
Token("ね")
開始チャンク:  Chunk("今日は")
次のチャンク:  Chunk("天気ですね")
```