Windows10で、Pythonの64bit環境と32bit環境を共存させて、CaboChaを使えるようにしてみた 

# わたしの環境 
* Windows 10 64bit
* Python 3.9.7 64bit
* Jupyter Notebook 

# 概要
元々Pythonは64bit環境だけを使っていたのですが、
CaboChaを使うには32bit環境が必要ということで、
様々な先人の記事を参考にさせていただきながら、
試行錯誤で両者を共存させてみました。
大きな流れは以下の通りです。（私はこれだけのことに半日ほどかかりました。。。）

①Baseである64bit環境とは別に、32bitの仮想環境を作成する。
②32bit版のMeCabをインストール,Pythonで使えるようにする。
③32bit版のCaboChaをインストール,Pythonで使えるようにする。
④Base環境(64bit)と新しく作った32bit環境をJupyter Notebookから,
&emsp;用途に応じて選択できるようにする。


# 背景

最近自然言語処理を勉強し始め、あの有名な[言語処理100ノック 2020(Rev2)](https://nlp100.github.io/ja/)に挑戦しています。
色々な方の回答例も参考にしながら、なんとか第5章の「係り受け解析」まで進んだのですが、ここで急ブレーキが...
そうです、Python 64bit環境では、係り受け解析器の **<font color = red>CaboCha** が使えないのです。
CaboChaには32bit版しか存在しないのです。

第4章までは64bit版で問題なく進めるのですが、ここで大きく躓き苦労しましたので、
私のような初学者の方の参考になればと思いQiitaの記事にしておきます。

ちなみに第4章では有名な形態素解析エンジンの一つである **<font color = red>MeCab** を導入します。
MeCabも公式には32bit版しかないのですが、 世の中には素晴らしい方([ikegami-yukinoさん](https://github.com/ikegami-yukino))がいて、
簡単に64bit環境でもインストール、Pythonで使用できるよう情報公開してくれている方がいます。
MeCabだけ使えればよい、という方は↓より64bit版で導入することもできます。

[Windows用の64-bit版MeCabを簡単にインストールする](https://qiita.com/yukinoi/items/5dfc674c040f6d81a8a1)
[WindowsやmacやLinuxにpipでPython用MeCabバインディングをいれる](https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43)


それでは本題に入りましょう。
# ①Baseである64bit環境とは別に、32bitの仮想環境を作成
まず32bitの仮想環境を作成します。
コマンドプロンプトから、以下を順に実行します。

```ruby:まずはWindosを32ビットへ変更
set CONDA_FORCE_32BIT=1
#set CONDA_FORCE_32BIT= 　で64bitへ戻せる
```
```ruby:指定の名前で仮想環境を作成,32bitのパイソンをインストール
conda create -n *** -y python=*.*.* pip jupyter
```
`***`には任意の名前を指定してください。私は自然言語処理用の環境ということで`NLP`と付けました。
32bit版だと分かりやすい名前もいいかも知れません。

python=`*.*.*`にはpythonのバージョンを指定してください。
私は64bit版と揃えておきました。

`pip` `jupyter` については、このタイミングでインストールしておきます。

次に、環境を作成した仮想環境に切り替えます。
```ruby:環境切替
conda activate ***
```
***には先ほど設定した環境名を入れてください。
ちなみに元の環境に戻す時は以下のコマンドを実行します。
```
conda deactivate
```

# ②32bit版のMeCabをインストール,Pythonで使えるようにする。　
### インストール
まずは **MeCab** です。
・MeCabは[公式サイト](https://taku910.github.io/mecab/#download)より.exeファイルを入手してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824754/c226e839-be83-030a-b23e-2e2807cedc01.png)
・.exeファイルでインストーラーを起動し、 **`UTF-8`** を指定してインストールしてください。

### Pythonで使えるようにする
・pythonへのバインディングは、↑で紹介したYukinoさんの[恩恵](https://qiita.com/yukinoi/items/990b6933d9f21ba0fb43)にあずかり、pipで簡単に行えます。
```ruby:MeCabをバインディング
pip install mecab
```
・最後に環境変数のパスに **`C:\Program Files (x86)\MeCab\bin`** を通します。

# ③32bit版のCaboChaをインストール,Pythonで使えるようにする。
### インストール
次に **CaboCha** です。
・CaboChaは[公式のGoogleDrive](https://drive.google.com/drive/folders/0B4y35FiV1wh7cGRCUUJHVTNJRnM?resourcekey=0-ym0BJTHMkjw3y1AEgwwaxA)より、.exeファイルとtar.bz2ファイルを入手してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824754/d5f25dd0-9bbf-9051-df02-21441a84ecc9.png)

・MeCab同様に.exeファイルでインストーラーを起動し、 **`UTF-8`** を指定してインストールします。

### Pythonで使えるようにする

・tar.bz2ファイルはCドライブ直下に解凍し、**`cabocha-0.69`** の状態にしてください。

:::note info
Windows標準のソフトではtar.bz2は解凍できませんので、別途解凍ソフトをインストールしてください。

ちなみに私は定番（？）の **[Lhaplus](https://forest.watch.impress.co.jp/library/software/lhaplus/)** を利用しています。
:::

・MeCab同様に環境変数のパスに **`C:\Program Files (x86)\CaboCha\bin`** を通します。

・Visual C++環境を整えます。
&emsp;コンパイラが入っていない場合は、[マクロソフト公式](https://visualstudio.microsoft.com/ja/downloads/)から入手、インストールしてください。
&emsp;pythonのバージョンに対応したコンパイラをインストールする必要があります。以下をご参考にしてください。
&emsp;私は最新のVisual Studio Build Tools 2022をインストールしています。
&emsp;([WindowsCompliler](https://wiki.python.org/moin/WindowsCompilers)を参考に作成)

| Visual C++ | Python | Visual Studio |
|:-:|:-:|:-:|
|14.x | 3.5 -3.10|  2015以降 |
|   10.0|   3.3-3.4|  2009 |
|   9.0|2.6-2.7 or 3.0-3.2   |2008   |

・インストール時はC＋＋によるデスクトップ開発にチェックを入れてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824754/d050a70c-5c6a-6447-ae00-5cd35c2fc803.png)

・さきほど解凍したcabocha-0.69 → python →setup.pyの中身を以下のように編集します。
```ruby:編集後
#!/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行目 ライブラリファイルの指定

・さて、ようやく前準備が終わりましたので、導入していきます。
&emsp;コマンドプロンプトを起動し、以下の手順で進めます。
```ruby:まずはWindosを32ビットへ変更
set CONDA_FORCE_32BIT=1
```
```ruby:仮想環境へ切替
conda activate *** #***は作成した環境名
```
```ruby:setup.pyがあるディレクトリへ移動
cd C:\cabocha-0.69\python
```
```ruby:CaboChaをバインディング
python setup.py install
```
以上で導入自体は終了です。（長かった。。。）

# ④Base環境(64bit)と新しく作った32bit環境をJupyter Notebookから,用途に応じて選択できるようにする。
・先ほどに続けて以下のコードでカーネルを追加します。

```ruby:カーネルを追加
ipython kernel install --user --name=*** --display-name=***
#--name=***:追加する環境名
#--display-name=***:表示する名前
```


・以下のように選択できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824754/a95040ae-bf70-4306-16ec-c62a86c98794.png)

# 終わりに
以上で、全工程が終わりです。
私はググりまくり試行錯誤し半日以上を費やしましたが、
皆さんは少しでも時間短縮できれば幸いです。

# 参考にさせていただいた記事
[windows10 64bitのAnacondaにCaboChaを入れる](https://qiita.com/OR1202/items/42b8cef4565930e3f21f)
[WindowsでCaboCha-Python3バインディング](https://qiita.com/ayuchiy/items/d8afcffb27fcc10f6947)
[Jupyterで複数カーネルを簡単に選択するための設定](https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e)
[CaboChaをPythonで使う Windows10-64bit](https://qiita.com/zincjp/items/c268cf211dddeb79bd83)
[CaboCha & Python3の環境構築(Windows版)](https://qiita.com/ayuchiy/items/17a2d48116b2da7535eb)


# 言い訳
※当方、専門教育を受けたことがなく、本業のエンジニアでもありません。
&emsp;そのため、用語の使い方やコード内容にお見苦しい点があるかもしれませんが、
&emsp;ご指摘ご助言いただければ幸いです。