Windows 7 64bit　に　MeCab (和布蕪)　と　Python のバインディングを導入 (2016/08/18)

# はじめに
Windows 7 64bit に MeCabを導入するのに思ったよりも大変だと思ったので備忘録として投稿します。

MeCabは形態素解析ツールです。基本的に下記のことをしてくれます。
- 日本語の文を形態素（意味の通る最小のブロック）に分けてくれる
- 形態素の持つ品詞を分析してくれる

１行目：入力したテキスト、３行目以下：結果
![result.png](https://qiita-image-store.s3.amazonaws.com/0/89402/77e8a77a-49bc-0979-2b23-3f86246b1c67.png)

参考にした情報は以下（ありがとうございました！）：
- [64bit Windows + python 2.7 + MeCab 0.996　な環境をつくる](http://qiita.com/h_kabocha/items/5bee9e9b852aed11411b#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)
- [Windows 64bitで、mecab-python](http://pop365.cocolog-nifty.com/blog/2015/03/windows-64bit-m.html)

# 導入に必要なもの
- python 2.7.11
- Microsoft Visual Studio 2015
- mecab-0.996.exe
- mecab-0.996.tar.gz
- mecab-python-0.996.tar.gz

# 手順
### 1. 「導入に必要なもの」を全てダウンロード・インストールする
mecab-0.996.exe, mecab-0.996.tar.gz, mecab-python-0.996.tar.gzは[こちら](http://taku910.github.io/mecab/#download)からダウンロードできます。

### 2. MeCab本体をインストール
mecab-0.996.exeを実行して環境変数を書く。
1. mecab-0.996.exeを実行する。辞書の文字コードはutf-8にしています（汎用性もあるし、筆者が慣れてるからです）。
2. 環境変数のPATHに`C:\Mecab\bin` を追加
3. 環境変数MECABRCを新たに作り、`C:\Mecab\etc\mecabrc`を設定
4. `C:`以下にMecabのディレクトリがなければ作成（`C:\Mecab\`の状態）

- この時、Mecabフォルダ以下にbinとsdkフォルダも作成
- ※環境変数は各自で異なる場合があるので確認してください。

<font color = "red">（2016/8/18追記）mecab-0.996.exeを実行すると、```C:\Program Files (x86)\```以下にMeCabフォルダが作成されます。
そのフォルダを```C:\```に入れてしまえば4番を行う必要はありません。記事作成中に気づいた・・・orz</font>
### 3. MeCabソースの修正、ビルド
ここで、参考にしていた情報を見ながらやってたらファイル指定のところでミスがあって、自分のPCに合わせるのに時間がかかりました。（知識がなさすぎて、2回アンインストールして3回目でできました笑）
<ol><li> [mecab-0.996.tar.gz](http://taku910.github.io/mecab/#download) を展開
<li> mecab-0.996/srcフォルダ内のいくつかのファイルを修正。（旧）以下を（新）以下に変更してください

<ul><li> Makefile.msvc.in 内を　Windows 7 64bit用に修正
<li>6行目　/MACHINE:X86　→　/MACHINE:<font color = "red">X64</font>

```Makefile.msvc.in
LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X86 ADVAPI32.LIB
LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X64 ADVAPI32.LIB
 ```


<li>8行目　-DDIC_VERSION=@DIC_VERSION@ →　-DDIC_VERSION=<font color = "red">102</font>

 ```Makefile.msvc.in
 （旧）-DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \
 （新）-DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
 ```
</li><li> 9行目 -DVERSION="\"@VERSION@"\"" →　-DVERSION="\"<font color = "red">0.996</font>\""

 ```Makefile.msvc.in
 （旧） -DVERSION="\"@VERSION@\"" -DPACKAGE="\"mecab\"" \
 （新） -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
 ```
</li><li> 11行目　"\"c:\\Program Files\\mecab\\etc\\mecabrc\"" →　 <font color = "red">"\"c:\\mecab\\etc\\mecabrc\""</font>
<li> mecabrcの場所を指定してください

 ```Makefile.msvc.in
 （旧） -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
 （新） -DMECAB_DEFAULT_RC="\"c:\\mecab\\etc\\mecabrc\""
 ```
</li><li> feature_index.cpp 356行目 size_t　→　<font color = "red">unsigned int</font>
 
 ```feature_index.cpp
 （旧）case 't':  os_ << (size_t)path->rnode->char_type;     break;
 （新）case 't':  os_ << (unsigned int)path->rnode->char_type;     break;
 ```
</li><li> writer.cpp 260行目　size_t　→　<font color = "red">unsigned int</font>

 ```writer.cpp
 （旧）case 'L': *os << (size_t)lattice->size(); break;
 （新）case 'L': *os << (unsigned int)lattice->size(); break;
 ```
</li><li> mecab.h 1125行目　#ifndef SIWG　→　<font color = "red">#ifndef SWIG</font>

 ```mecab.h
 （旧） #ifndef SIWG
 （新） #ifndef SWIG
 ```
</li><li> common.h include部分に追記 <font color = "red">#include <iterator></font> 

 ```mecab.h
（新） #include <iterator>
 ```

</ul><li> mecab-0.996/src内でビルドする。コマンドプロンプトの管理者権限で行って下さい。

```
> call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
> nmake -f Makefile.msvc.in
```

<ul><li> <font color = "blue">vcvarsall.bat</font> が入っているディレクトリを指定してください（私の場合は Microsoft Visual Studio 14.0 以下）
<li> <font color = "blue">vcvarsall.bat</font>が入っていない場合は、<strong>「PythonがコンパイルされたCコンパイラがない」</strong>ということですので、
Python 2.7をお使いの場合は[こちら](https://www.microsoft.com/en-us/download/details.aspx?id=44266)からコンパイラをダウンロードしてください
<li>詳しくは、[PythonでUnable to find vcvarsall.batと言われる際のまとめ](http://isiz.hateblo.jp/entry/2015/08/22/Python%E3%81%A7Unable_to_find_vcvarsall.bat%E3%81%A8%E8%A8%80%E3%82%8F%E3%82%8C%E3%82%8B%E9%9A%9B%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81)を参考にして下さい

</ul><li> ```C:\Mecab\bin``` 以下にmecab-0.996/src内でビルドした以下のファイルをコピーしてください。
<ul><li>libmecab.dll
</li><li>mecab-cost-train.exe
</li><li>mecab-dict-gen.exe
</li><li>mecab-dict-index.exe
</li><li>mecab-system-eval.exe
</li><li>mecab-test-gen.exe

</ul><li>  ```C:\Mecab\sdk``` 以下にmecab-0.996/src内でビルドした以下のファイルをコピーしてください。
<ul><li>mecab.h
</li><li>libmecab.lib
</ul></ol>これでビルド完了です。

### 4. mecab for python のセットアップ
Unix版でしか動かないPythonをWindows用に書き換えます。
<ol><li>[mecab-python-0.996.tar.gz](http://taku910.github.io/mecab/#download)を展開
</li><li>setup.pyを下記のように書き換えます。


```setup.py
#!/usr/bin/env python
from distutils.core import setup,Extension,os
setup(name = "mecab-python",
version = "0.996",
py_modules=["MeCab"],
ext_modules = [
Extension("_MeCab",
["MeCab_wrap.cxx",],
include_dirs=[r"C:\Mecab\sdk"],
library_dirs=[r"C:\Mecab\sdk"],
libraries=["libmecab"])
])
```
<ul><li>include_dirsとlibrary_dirsのディレクトリは2-4で作成したsdkフォルダを指定してください。

</li></ul><li>ビルドしてbuildフォルダを作成する。

```
> python setup.py build
```

</li><li>インストールする。各種ファイルがpythonインストール先のLib\site-packagesにコピーされます。

```
> python setup.py install
```

</li></ol>

### 5.辞書とmecabrcをMecabファイルに入れる
```C:\Mecab\```以下に```C:\Program Files (x86)\MeCab```内にあるetcとdicフォルダをコピーして入れる。

これで全て完了です！

# 試してみる
早速Pythonで試してみました。
最近横須賀のイベントで米軍基地内に入ることができたので、テキスト文はこれ。

```text.txt
横須賀の米軍基地見学楽しかった！
```

コマンドプロンプト上でpython。

```py

>python
Python 2.7.11
> import MeCab
> import sys
> m = MeCab.Tagger('mecabrc')
> f = open('text.txt','r')
> text = f.read().decode('utf-8')
> f.close()
> f = open('result.txt','w')
> f.write(m.parse(text.encode('utf-8')))
> f.close()
```

結果はこんな感じ
![result.png](https://qiita-image-store.s3.amazonaws.com/0/89402/77e8a77a-49bc-0979-2b23-3f86246b1c67.png)