CaboCha & Python3の環境構築(Windows版)

## 最終的にやりたいこと
 定期的に送られてくる報告書の類(書かれていることは毎回似通っている)を、一定のフォーマット・一定の文体で要約したい、というのが最終的なゴールです。既存の要約アルゴリズムも使うかもしれませんが、元の文は数パターン(ただし色々修飾がついている)のため、情報の優先順位をルールベースで実装しながらきっちり目的の文型に収めたいと思っています。
　まずは修飾関係を解析するためのCaboChaをPythonから呼び出せる環境を作ります。

## セットアップ後の主要要素 & バージョン
- Windows 10
- Python 3.7.1(32bit)
- Mecab本体：[Mecab 0.996 (32bit Windows用exe版)] (http://taku910.github.io/mecab/)
- MeCab-Pythonバインド：[mecab-python-windows] (https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43) 
- CaboCha本体：[CaboCha 0.69 (32bit Windows用exe版)] (https://taku910.github.io/cabocha/) 
- CaboCha-Pythonバインド：[CaboCha 0.69 (tarソースコードから作成)] (https://taku910.github.io/cabocha/) 
- Pythonのバージョンに応じたC++コンパイラ (今回はBuild Tools for Visual Studio 2017でC++ 14.1をインストール)

## (1) MeCabのインストールとPythonからのバインディング
* [Mecab公式サイト] (http://taku910.github.io/mecab/)からWindows用のexeをダウンロードし、UTF8を指定してインストールする。(場所は任意だが、デフォはC:\Program Files (x86)\MeCab)
* Pythonからのバインディングは、先人の恩恵にあずかってpip install mecab-python-windowsを実行する<br>
参考)[https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43](https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43)<br>
 ※自分でコンパイルする方法は割愛。というかCaboChaが苦戦するので、MeCabは体力温存で。
* Pythonの対話シェルまたは一度ファイルに保存して、以下のコードを実行して結果が返ればOK。

```python:PythonからのMeCab実行(MeCab公式サイト例文よりPython3用に微修正)
import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("今日もしないとね"))
```
※以下のような結果が返る
今日    キョウ  今日    名詞-副詞可能
も      モ      も      助詞-係助詞
し      シ      する    動詞-自立       サ変・スル      未然形
ない    ナイ    ない    助動詞  特殊・ナイ      基本形
と      ト      と      助詞-接続助詞
ね      ネ      ね      助詞-終助詞
EOS

## (2) CaboChaのダウンロードとインストール

* [CaboCha公式サイト] (https://taku910.github.io/cabocha/)から、**Windows用のexe**と**ソースのtar.gz**を両方ダウンロードする。
* MeCab同様、exe形式のインストーラーを起動して、UTF8を指定してインストールする。 (場所は任意だが、デフォはC:\Program Files (x86)\CaboCha)
* ソースのtar.gzを適当な場所に解凍しておく。
* 最後に、環境変数のパスに”C:\Program Files (x86)\CaboCha\bin”を通してcabochaを実行できるようにしておく。
　これはpythonがdllにアクセスするためにも必要で、実施しておかないとPythonからCaboChaを実行したときにエラーになる。


## (3) Visual C++コンパイル環境を整える
　Visual Studio 2017等の統合開発環境、またはBuild Toolsなどのコンパイラが入っていない場合、それらをインストールする必要があります。
　Python 3.5以降であれば、Build Tools for Visual Studio 2017でC++ Build ToolsをインストールすればOKです。その他のバージョンを使っている場合、必要なVisual C++のバージョンが異なるため、詳しくは、[こちら「WindowsでCaboCha-Python3バインディング」](https://qiita.com/ayuchiy/items/d8afcffb27fcc10f6947)を参考に、パッケージを選択してください。

## (4) CaboChaをPython3から使えるようにする
　いよいよ環境構築の山場、CaboChaをPython3から扱えるようにバインドをコンパイルします。

* まず、pip install --upgrade setuptoolsを実行して、setuptoolsを念のため最新化しておきます。
* 次に、ダウンロードしておいたCaboChaソースコード.tar.gzを解凍したフォルダのpythonディレクトリに移動します。
* pythonディレクトリの下にあるsetup.pyをWindows用に修正します。修正箇所と内容は後述しますが、他に[WindowsにCabocha 0.68をいれてPythonで係り受けを解析してみる](https://qiita.com/mima_ita/items/161cd869648edb30627b)が参考になると思います。

* python setup.py installを実行します。

無事に完了すればセットアップは終わりです。
コンパイルエラーが出た場合は、[こちら「WindowsでCaboCha-Python3バインディング」](https://qiita.com/ayuchiy/items/d8afcffb27fcc10f6947)を参考にしてください。

```:実行例
> pip install --upgrade setuptools

> cd cabocha-0.69\python
　# 解凍したcabochaのソースコード

> (ここでsetup.pyを修正する)

> python setup.py 
```

## (5)　Python3からCaboChaを使ってみる
CaboChaのサンプルコードを参考に、以下のようなコードを書いて、実行できれば完了です。
※setup.pyと一緒に配布されているtest.pyを参考にPython2系のprint文をprint()に変更・簡易化したもの

```python:サンプルコード
import CaboCha

c = CaboCha.Parser()

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

print(c.parseToString(sentence))
```

```:実行例
> python test.py
  太郎は-----------D
      この-D       |
        本を---D   |
        二郎を-D   |
            見た-D |
            女性に-D
            渡した。
EOS
```


## 参考）setup.pyの修正前・修正後
setup.pyは、下記３つのコメントアウト行で、Windows版にはないcabocha-configを実行して取得する値を直接ハードコードします。


```python:修正内容
#!/usr/bin/env python

from distutils.core import setup,Extension,os
import string

def cmd1(str):
    return os.popen(str).readlines()[0][:-1]

def cmd2(str):
    return cmd1(str).split()

setup(name = "cabocha-python",
	# ↓下記のように直す version = cmd1("cabocha-config --version"),
	version = "0.69",                 
	py_modules=["CaboCha"],
	ext_modules = [
		Extension("_CaboCha",
			["CaboCha_wrap.cxx",],
			# ↓下記のように直す include_dirs=cmd2("cabocha-config --inc-dir"),  
			include_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
			# ↓下記のように直す library_dirs=cmd2("cabocha-config --libs-only-L"),
			library_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
			libraries=cmd2("cabocha-config --libs-only-l"))
			])
```




## 参考サイト
#### MeCab, CaboChaについて
* [MeCab: Yet Another Part-of-Speech and Morphological Analyzer] (http://taku910.github.io/mecab/)
* [CaboCha/南瓜: Yet Another Japanese Dependency Structure Analyzer](https://taku910.github.io/cabocha/)


#### 要約という分野について
* [大自然言語時代のための、文章要約] (https://qiita.com/icoxfog417/items/d06651db10e27220c819)
* [テキスト自動要約メモ Negative/Positive Thinking] (http://d.hatena.ne.jp/jetbead/20130328/1364403521)