python3からcabochaを使ってみる

# python3からcabochaを使ってみた備忘録
こんにちは。
新卒マイナス１年目エンジニアの和尚です。

[前回のmecab](https://qiita.com/osyou-create/items/c7864a5200238d8678aa)に引き続き、今回はpython3からcabochaを使えるようにします。
yumで簡単に導入する手段が見つからなかったので、公式サイトに乗っ取ってcabochaを導入していこうと思います。

### 開発環境
- centOS6
- python 3.6.2

### この記事の目標
1. centOS6上でcabochaを使えるようにする。
2. python3からcabochaを呼び出す。

### 想定読者
- (pythonを使用して)自然言語処理初心者
- エンジニアの卵か雛

## 事前準備
>*参考資料*
[cabocha公式サイト](https://taku910.github.io/cabocha/)
[CRF++公式サイト#download](https://taku910.github.io/crfpp/#download)

linux(Unix)でcabochaを利用するには以下のものが必要なのでインストールします。

- CRF++ (0.55以降)
- MeCab (0.993以降)
- mecab-ipadic, mecab-jumandic, unidic のいずれか

mecabとmecab-ipadicは[前回の記事](https://qiita.com/osyou-create/items/c7864a5200238d8678aa)を参考にしてインストールしてください。

### CRF++のダウンロード
1. CRF++公式サイトから最新版をダウンロードしてファイル転送ツールを利用してcentOS上に置いてください。
2. もしくはwgetでファイルをダウンロードしてください。

```
$ wget "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7QVR6VXJ5dWExSTQ" -O CRF++-0.58.tar.gz
```

### CRF++のインストール
1. ファイルを解凍します。
2. ディレクトリを移動します。
3. インストールします。

```
$ tar zxfv CRF++-0.58.tar.gz
$ cd CRF++-0.58
$ ./configure
$ make
$ sudo make install
```

導入完了です。

## cabochaを導入する
>*参考資料* 
[CentOS 7 で MeCab と CaboCha で遊ぶ](https://mikazuki.hatenablog.jp/entry/2016/09/20/180853)

### cabochaのダウンロード
1. cabochaの最新版を公式サイトからダウンロードしてファイル転送ツールを利用してcentOS上に置いてください。
2. もしくはwgetでダウンロードしてください。

```
$ wget "https://googledrive.com/host/0B4y35FiV1wh7cGRCUUJHVTNJRnM/cabocha-0.69.tar.bz2" -O cabocha-0.69.tar.bz2
```

※なぜか僕の場合、エラーを吐いたので1でダウンロードしました。自分のgoogle driveに移してからwgetでインストールするなど、各自できる方法でインストールしてください。

### cabochaのインストール
1. ファイルを解凍します。
2. ディレクトリを移動する。
3. インストールをします。

```
$ bzip2 -dc cabocha-0.69.tar.bz2 | tar xvf -
$ cd cabocha-0.69
$ ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8
$ make
$ make check
$ sudo make install
```

### 動作確認

```
$ cabocha --version
cabocha of 0.69
```

## cabochaをpython3から使ってみる
### setup.pyからcabochaを使えるようにする。

```
$ cd python 
$ python setup.py build_ext
$ python setup.py install
$ sudo ldconfig
```
※cabocha-0.69/pythonで作業してください。

### python3からcabochaを呼び出せるか確認

```
$ python
>>> import CaboCha
```

ここでエラーが出なければ成功です。

### エラーが出た場合
僕はここで`ImportError: libcabocha.so.5`が出ました。
解決方法として、以下を実行しました。

```
$ sudo vi /etc/ld.so.conf
```

`/usr/local/lib`を行末に追加。

```
$ sudo ldconfig
```

### pythonファイルからcabochaを使用してみる。
ダウンロードしたcabochaに入っていたpythonのサンプルコードを実行してみます。
今回もコードがpython2用だったので、python3で実行できるように若干調整しました。

```python:test.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import CaboCha

# c = CaboCha.Parser("");
c = CaboCha.Parser()

sentence = "太郎はこの本を二郎を見た女性に渡した。"

print(c.parseToString(sentence))

tree =  c.parse(sentence)

print(tree.toString(CaboCha.FORMAT_TREE))
print(tree.toString(CaboCha.FORMAT_LATTICE))
```

```
  太郎は-----------D
      この-D       |
        本を---D   |
        二郎を-D   |
            見た-D |
            女性に-D
            渡した。
EOS

  太郎は-----------D

      この-D       |
        本を---D   |
        二郎を-D   |
            見た-D |
            女性に-D
            渡した。
EOS

* 0 6D 0/1 -2.457381
太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/0 1.509507
この    連体詞,*,*,*,*,*,この,コノ,コノ
* 2 4D 0/1 0.091699
本      名詞,一般,*,*,*,*,本,ホン,ホン
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 3 4D 1/2 2.359707
二      名詞,数,*,*,*,*,二,ニ,ニ
郎      名詞,一般,*,*,*,*,郎,ロウ,ロー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 4 5D 0/1 1.416783
見      動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
* 5 6D 0/1 -2.457381
女性    名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
* 6 -1D 0/1 0.000000
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。
EOS
```

上記の内容が表示されれば成功です！

## 最後に

前回に引き続き、自然言語処理によく利用されているcabochaをpython3から利用できるようにしてみました。

お疲れさまでした。