CaboChaをPythonで使う Windows10-64bit

#はじめに
MeCabをPythonに導入したので、次はCaboChaを導入してみました。
Pythonからの呼び出し(UTF-8)とコマンドプロンプトからの呼び出し(SHIFT-JIS)両方出来るように設定しています。

#環境
Anaconda3 2018.12 32-bit
Python 3.68 32-bit
***CaboChaを使用するためには現状32-bitのPythonからしか出来ないので、Anacondaは32-bitをインストールします。
###ただ、Python 32-bitだとTensorFlowが動かない。
と言う事で、TensorFlow使いの方は
AnacondaでインストールするPythonは64-bit
Anacondaを使わず以下のPythonサイトのインストーラでPython 32-bitはCabocha用にインストールすれば
64bit、32-bitの使い分けが可能なので、環境を使い分けるのがよいかと思います。
https://www.python.org/

以下のCabochaの導入は32-bitのPython上で行います。

#導入する物
MeCab 0.996 32-bit
CaboCha 0.69 32-bit
Build Tools for Visual Studio 2017

#導入方法
##１．MeCabのインストール
CaboChaは形態素解析にMeCabを利用します。
以下の記事のようにインストールを行いSHIFT-JIS、UTF-8両方の文字コードで利用できるようにします。
https://qiita.com/zincjp/items/55960801d99e55c9f2a6
##２．CaboChaのインストール
###2-1.CaboChaをUTF-8でインストール
CaboCha-0.69.exeファイルをダブルクリックしてインストールする際に文字コードはUTF-8を指定する。
###2-2.CaboCha設定ファイルのファイル名変更
C:\Program Files (x86)\CaboCha\modelフォルダ内の以下4ファイルのファイル名を変更
charset-file.txt→charset-file-u.txt
ne.ipa.model→dep.ipa-u.model
chunk.ipa.model→chunk.ipa-u.model
dep.ipa.model→dep.ipa-u.model

C:\Program Files (x86)\CaboCha\etcフォルダ内の1ファイルのファイル名を変更
cabocharc→cabocharc-u
###2-3.Cabocharc-uファイルを変更
2-2.でファイル名を変更したcabocharc-uを以下の通り記載を変更する。

6行目　
(変更前) charset-file = $(rcpath)\..\model\charset-file.txt
(変更後) charset-file = $(rcpath)\..\model\charset-file-u.txt
39行目
(変更前) parser-model  = $(rcpath)\..\model\dep.ipa.model
(変更後) parser-model  = $(rcpath)\..\model\dep.ipa-u.model
48行目
(変更前) chunker-model = $(rcpath)\..\model\chunk.ipa.model
(変更後) chunker-model = $(rcpath)\..\model\chunk.ipa-u.model
54行目
(変更前) ne-model = $(rcpath)\..\model\ne.ipa.model
(変更後) ne-model = $(rcpath)\..\model\ne.ipa-u.model
60行目
(変更前) # mecabrc = somewhere/mecabrc
(変更後) mecabrc = C:\Program Files (x86)\MeCab\etc\mecabrc-u

###2-4.CaboChaをSHIFT-JISでインストール
再度CaboCha-0.69.exeファイルをダブルクリックしてインストールする。
その際の文字コードはSHIFT-JISを指定する。
SHIFT-JISではファイル名の変更、ファイルの編集は特になし。
###2-5.MeCab、CaboChaフォルダをPATHを通す。
以下の記載を環境変数のPATHに追加し、MeCab,CaboChaにPATHを通す。
C:\Program Files (x86)\MeCab\bin
C:\Program Files (x86)\CaboCha\bin
##3.Build Tools for Visual Studio 2017をインストール
###3.1Visual Studioインストーラのダウンロード
以下サイトよりBuild Tools for Visual Studio 2017をダウンロード
https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2017
###3-2.BuildTools for Visual Studio 2017のインストール
ダウンロードされたvs_buildtools__1004014058.1547432936.exeをダブルクリックしてインストール。
###3-3.ワークロードを選択
Visual C++ Build Toolsをチェックしインストールボタンをクリックするといくつかのコンポーネントがインストールされる。

##4.PythonからCaboChaを使えるようにする
###4-1.caboChaのtar.bz2ファイルをダウンロード
caboCha-0.96.tar.bz2をダウンロード
###4-2.caboChaのtar.bz2を展開
一度の展開でcabocha-0.69.tarまでしか展開されない場合は再度展開して
cabocha-0.69フォルダにする
###4-3.展開されたcaboCha-0.69フォルダをC:\にコピー
###4-4.setup.pyの変更
C:\cabocha-0.69\pythonフォルダ内のsetup.pyを以下のように書き換える。

```
#!/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 = "0.69",
    py_modules=["CaboCha"],
    ext_modules = [
        Extension("_CaboCha",
            ["CaboCha_wrap.cxx",],
            include_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
            library_dirs=[r"C:\Program Files (x86)\CaboCha\sdk"],
            libraries=['libcabocha'])
])
```
元ファイルとの対比で書き換えた箇所は
13行目　バージョン
18-19行目　CaboChaのsdkフォルダの場所
20行目 ライブラリファイルの指定

###4-5.PythonからCaboChaを使えるようにする
Anaconda NavigatorのOpen Terminalでコマンドプロンプトを起動。
以下のコマンドでC:\cabocha-0.69\pythonフォルダに移動

```
cd ../..\cabocha-0.69\python
```
引き続き以下のコマンドでコンパイル→インストールする。

```
python setup.py install
```
以下のように表示されPythonからCaboChaが使えるようになる。

```
(base) C:\cabocha-0.69\python>python setup.py install
running install
running build
running build_py
creating build
creating build\lib.win32-3.6
copying CaboCha.py -> build\lib.win32-3.6
running build_ext
building '_CaboCha' extension
creating build\temp.win32-3.6
creating build\temp.win32-3.6\Release
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:\Program Files (x86)\CaboCha\sdk" -IC:\Users\（ユーザー名）\Anaconda3\include -IC:\Users\（ユーザー名）\Anaconda3\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /EHsc /TpCaboCha_wrap.cxx /Fobuild\temp.win32-3.6\Release\CaboCha_wrap.obj
CaboCha_wrap.cxx
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:\Program Files (x86)\CaboCha\sdk" /LIBPATH:C:\Users\（ユーザー名）\Anaconda3\libs /LIBPATH:C:\Users\（ユーザー名）\Anaconda3\PCbuild\win32 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Tools\MSVC\14.16.27023\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\um\x86" libcabocha.lib /EXPORT:PyInit__CaboCha build\temp.win32-3.6\Release\CaboCha_wrap.obj /OUT:build\lib.win32-3.6\_CaboCha.cp36-win32.pyd /IMPLIB:build\temp.win32-3.6\Release\_CaboCha.cp36-win32.lib
   ライブラリ build\temp.win32-3.6\Release\_CaboCha.cp36-win32.lib とオブジェクト build\temp.win32-3.6\Release\_CaboCha.cp36-win32.exp を作成中
コード生成しています。
コード生成が終了しました。
running install_lib
copying build\lib.win32-3.6\CaboCha.py -> C:\Users\（ユーザー名）\Anaconda3\Lib\site-packages
copying build\lib.win32-3.6\_CaboCha.cp36-win32.pyd -> C:\Users\（ユーザー名）\Anaconda3\Lib\site-packages
running install_egg_info
Writing C:\Users\（ユーザー名）\Anaconda3\Lib\site-packages\cabocha_python-0.69-py3.6.egg-info
```

以上で導入は終了です。

#PythonでCaboChaを使う
Pythonで以下の様にCaboChaの動作を確認する。

```
import CaboCha

c = CaboCha.Parser("-r C:\PROGRA~2\cabocha\etc\cabocharc-u")

sentence = "私はハンバーグを食べた。"

print(c.parseToString(sentence))

tree =  c.parse(sentence)
print(tree.toString(CaboCha.FORMAT_TREE))
print(tree.toString(CaboCha.FORMAT_LATTICE))


        私は---D
  ハンバーグを-D
        食べた。
EOS
        私は---D
  ハンバーグを-D
        食べた。
EOS
* 0 2D 0/1 -2.127378
私       名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は       助詞,係助詞,*,*,*,*,は,ハ,ワ
* 1 2D 0/1 -2.127378
ハンバーグ   名詞,一般,*,*,*,*,ハンバーグ,ハンバーグ,ハンバーグ
を       助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 2 -1D 0/1 0.000000
食べ      動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
た       助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。       記号,句点,*,*,*,*,。,。,。
EOS
```
#コマンドプロンプトからCaboChaを使う
コマンドプロンプトを立ち上げ以下のように動作を確認する。

```
C:\Users\（ユーザー名）>cabocha
私はハンバーグを食べた。
        私は---D
  ハンバーグを-D
        食べた。
EOS
```
#エラーの種類
ここに行き着くまでいろいろ検討してきましたが一番の山場は4-5のpython setup.py installの際にエラーが出ました。
詳細は時間があるときに記載しますが、以下の2つのエラーが良く出ました。
・vcvarsall.batが見つかりません。
Build Tools for Visual Studioで導入したCコンパイラのバージョンがPythonをコンパイルしたバージョンと異なる場合に出ます。
・link2001のエラー
link2001でio.h等のヘッダファイルがインクルードできないと言うエラーはPythonが64-bitの場合に起こります。