この記事のまとめ:
- 64-bit版Windows環境上でMeCab用Pythonモジュールをインポートするまでの手順をまとめます。
背景:
日本語解析を少しやってみようと思って、形態素解析ツールのMeCabをWindows (64-bit)上のPythonで使ってみようと思ったのですが、これがなかなかの曲者でした。Windows 64-bit環境でPythonからMeCabを使うのはとてもめんどくさいです。とりあえずMeCab用Pythonモジュールをインストールして、それをインポートするところまではできたので、私のケースの対処法を書いておきます。
MeCabをPythonで使えるようにするための流れ
- MeCab本体(32-bit)をインストールする
- MeCab本体を64-bitでコンパイルし直し、関連ファイルを64-bit版に更新する
- MeCabのPythonモジュールをビルドし、インストールする
- MeCabの動作確認
実行環境
- Windows 8.1 64-bit
- Python 3.4 (64-bit版Anacondaの仮想環境上)
MeCabのインストール
まずはMeCab本体(32-bit)をインストールします。
下記のURLを開き、"Binary package for MS-Windows"にある"mecab-0.996.exx"をダウンロードし、インストールします。 インストール時に文字フォーマットを聞かれますので、UTF-8を選択します。
http://taku910.github.io/mecab/#download
MeCab本体の64-bit化
ここからが少し手間がかかります。
先ほどインストールしたMeCabは32-bit版なので64-bitアプリケーション化します。
Visual Studio 2015のインストール
64-bitアプリケーションにするために、64-bitコンパイラでコンパイルを行います。MeCabはC++で記述されているようなので64-bit版VC++コンパイラを使います。そのVC++コンパイラをインストールするために、Visual Studioをインストールします。
Visual Studio 2017ではうまくMeCabをインストールできませんでしたので、バージョンはVisual Studio 2015にした方が良いです。
Visual Studio 2015は下記URLからダウンロードできます。 https://www.visualstudio.com/vs/older-downloads/
インストール時にVC++のパッケージ類にチェックを入れて、VC++のパッケージ類をインストールします。
Makefile.msvcの作成と修正
再度、下記のMeCabのダウンロードページを開き、"Source"にある"mecab-0.996.tar.gz"をダウンロードし、解凍します。 http://taku910.github.io/mecab/#download
解凍したフォルダーの中にsrcというフォルダーがあります。この中のMakefile.msvc.inをコピーして、Makefile.msvcに名前を変更します。
さらにこのファイルを開き、下記の通りに変更します。
▼ 6行目
/MACHINE:X86を/MACHINE:X64に変更します。
▼ 8-9行目
-DDIC_VERSION、-DVERSIONを使用するバージョンに変更します。
feature_index.cppの修正
次にfeature_index.cppを開き、下記の通りに変更します。
▼ 356行目
size_t型からunsinged int型に変更します。
writer.cppの修正
最後にwriter.cppを開き、下記の通りに変更します。
▼ 260行目
変数latticeをunsigned int型にキャストします。
MeCabを64-bitでコンパイル
Visual Studio 2015をインストールすると、スタートメニューに"VS2015 x64 Native Tools Command Prompt"がインストールされているはずですので、これを実行します。
先ほどのsrcフォルダーまで移動し、Make.batを実行します。
いくつかWarningが出るかもしれませんが、エラー終了しなければ問題ないです。
MeCab本体の関連ファイルの更新
先ほどコンパイルによって生成したいくつかのファイルをMeCab本体にコピーして上書きします。
srcフォルダー内にあるすべての.exeファイルとlibmecab.dllをC:\Program Files (x86)\MeCab\binにコピーして上書きします。
※MeCabのインストール時にインストールフォルダーを変更された場合は変更先のフォルダーを対象となります。
また、srcフォルダー内にあるすべての.libファイルをC:\Program Files (x86)\MeCab\sdkにコピーして上書きします。
そして、C:\Program Files (x86)\MeCab\binを環境変数のPATHに追加します。
環境変数が有効化されるのはPCの再起動後なのでPCを再起動します。
MeCab本体の64-bit化はこれで終了です。
Python用MeCabモジュールのインストール
3度目になりますが、下記のMeCabのダウンロードページを開き、"perl/ruby/python/java バインディング"の"ダウンロード"を開き、"mecab-python-0.996.tar.gz"をダウンロードし、解凍します。
http://taku910.github.io/mecab/#download
setup.pyの修正
解凍したフォルダーの中にあるsetup.pyを開き、下記の通りに変更します。
▼ 13行目
versionを実際の数値を直接代入します。
▼ 18~20行目
include_dirsとlibrary_dirsをsdkフォルダーの値に直接代入します。また、librariesにこちらも直接ファイル名を代入します。
これらはすべてWindowsではmecab-configというものが入っていないための対処です。
mecab.hに追記
C:\Program Files (x86)\MeCab\sdk\mecab.hを下記の通りに1行追記をします。
▼ 775行目辺り
Python用MeCabモジュールのビルドとインストール
コマンドプロンプトなどを開き、Anacondaでの仮想環境をアクティベートします。 ※Anacondaを使用していなければこの作業は無視して次に進んでください。
先ほど編集したsetup.pyがあるフォルダーに移動します。
python setup.py buildとその後にpython setup.py installを実行します。その実行例は下記のようになります。
インストール確認
MeCab用Pythonモジュールが問題なくインストールできていれば、下記のPython構文が通るはずです。
これが通ればインストールは完了です。
ビルド失敗時のトラブルシューティング
いままでVisual Studio 2015以外にインストールしたことがなければおそらく問題なく、ビルドが通るはずですが、他のバージョンなどを以前入れていたりすると余計な環境変数が残っており、失敗する可能性があります(私がVisual Studio 2017ではじめに試したためそうなっていました)。
私の場合は、vcvarsall.batファイルが見つからないというエラーが発生しました。
この原因は、Anacondaの仮想環境の設定ファイルが入っているフォルダ内のLib/distutils/msvc9compiler.pyのファイルもしくは環境変数を追加すれば解決しました。
私の場合は下記のディレクトリーに保存されていました。
msvc9compiler.pyファイルの231行目辺りにある下記の構文で問題が起こっていました。
上記は環境変数であるVS140COMNTOOLS(Visual Studio 2015の場合)を読むためにversionという変数には140という値が入っていなければならないのですが、私の場合Visual Studio 2017の値である100という値が入ってしまっており、このversionという変数が正しい値が入らないことが原因となっていました。なお、VS140COMNTOOLSには、Visual C++のインストールフォルダー(デフォルト設定の場合:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC)を示す値が入っており、その配下にvcvarsall.batファイルがあります。そのため、VS100COMNTOOLSという誤った環境変数を読み込んでしまい、正しくvcvarsall.batにたどり着けないということが起こっていました。
このversionという変数がどこでどのように読み込まれているかまでは追っていないので真因まではわかっていないのですが、下記のいずれかの方法で暫定対処が可能です。
- 環境変数
VS100COMNTOOLSを作り、VS140COMNTOOLSと同じ値を代入する msvc9compiler.pyの当該構文を下記のように直接VS140COMNTOOLSとする。
なお、Visual Studio 2017ではVisual Studio 2015以前とフォルダー構成が大きく変わっているようで正しくファイルを読み込めないエラーが発生していたため、うまくいかないということがわかっています。
MeCabの動作確認
インストール確認に続いて、動作確認をします。
下記を実行して、下記の通りの結果を得られていれば正しく動いています。
MeCab実行時のトラブルシューティング
ただし、環境によっては下記のようなエラーが出る場合があります。 (何の差分によってこのエラーが出たり、出なかったりするのかまでは調べていません。)
この場合には、新しくMECABRCという環境変数を追加します。値は、C:\Program Files (x86)\MeCab\etc\mecabrcとします。
環境変数を有効化させるためにPCを再起動します。
これで正しく動作しているはずです。
参考
この記事を書くために下記のサイトを参考にさせていただきました。
- http://onlybrain.exblog.jp/25402951/
- http://qiita.com/o__mura/items/31fb75df6183199e95b6 ★
- http://www.ipentec.com/document/document.aspx?page=mecab-compile-for-x64-windows-use-x64-windows
- http://seesaawiki.jp/spz/d/Windows��mecab-python��Ƴ��
- http://taku910.github.io/mecab/#download
- http://tadaoyamaoka.hatenablog.com/entry/2017/04/24/205509
今回は以上です。 最後まで読んでいただき、ありがとうございます。

コメントを投稿