WindowsのPythonでMecabを実行する(+Cygwinでも実行する)
環境
Windows10 (64bit) Microsoft Visual Studio 2015 python3.5(Windows版) mecab-0.996.exe mecab-0.996.tar.gz mecab-python-0.996.tar.gz cygwin
Visual Studio Community2015
のインストール時
VisualC++ - VisualC++2015用の共通ツール もインストールする事
注意点
以下の手順実行後はコマンドプロンプトからのmecab実行が行えなくなった。
恐らくだが、元々Windows用のMeCabは32ビット用となっており、本作業では32ビットから64ビット用に編集しているコードの関係でコマンドプロンプトからの動作が出来なくなったのではと考える。
各種パス
C:\Program Files (x86)\Microsoft Visual Studio 14.0
C:\MeCab
C:\Python3.5
C:\cygwin
手順
※以下、コマンド「sublime」はcygwinの関数でSublimeText2を起動してる。
mecab-0.996.exe
をクリックしてインストール実行。
辞書の文字コードはUTF-8
インストール先は任意、今回は
C:\MeCab
環境変数PATHに
C:\MeCab\bin
を追加
MECABRCに
C:\MeCab\etc\mecabrc
を追加する。
http://taku910.github.io/mecab/#download
のSourceから
mecab-0.996.tar.gzをダウンロードして解凍
cygwinで作業
$ cd /tmp/ $ cp -p /shortcut/desktop/mecab-0.996.tar.gz ./ $ tar zxf mecab-0.996.tar.gz
MeCabソースを32bit用から64bit用に変更
$ sublime mecab-0.996/src/Makefile.msvc.in
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
-DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \ ↓変更↓ -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
-DVERSION="\"@VERSION@\"" -DPACKAGE="\"mecab\"" \ ↓変更↓ -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
-DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\"" ↓変更↓ -DMECAB_DEFAULT_RC="\"C:\\MeCab\\etc\\mecabrc:\""
feature_index.cpp
$ sublime mecab-0.996/src/feature_index.cpp
case 't': os_ << (size_t)path->rnode->char_type; break; ↓変更↓ case 't': os_ << (unsigned int)path->rnode->char_type; break;
writer.cpp
$ sublime mecab-0.996/src/writer.cpp
case 'L': *os << lattice->size(); break; ↓変更↓ case 'L': *os << (unsigned int)lattice->size(); break;
common.h
$ sublime mecab-0.996/src/common.h
#include <sstream> #include <iterator> ↓追記↓ #include <iterator>
コマンドプロンプトは管理者権限で起動。
mecab-0.996\src内でビルド実行
cd C:\cygwin\tmp\mecab-0.996\src call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64 nmake -f Makefile.msvc.in
cygwinに戻る
ビルドで生成されたファイルを移動
$ cp mecab-0.996/src/libmecab.dll /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab-cost-train.exe /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab-dict-gen.exe /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab-dict-index.exe /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab-system-eval.exe /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab-test-gen.exe /cygdrive/c/MeCab/bin/ $ cp mecab-0.996/src/mecab.h /cygdrive/c/MeCab/sdk/ $ cp mecab-0.996/src/libmecab.lib /cygdrive/c/MeCab/sdk/
mecab-python-0.996.tar.gzをダウンロード
$ wget https://pypi.python.org/packages/86/e7/bfeba61fb1c5d1ddcd92bc9b9502f99f80bf71a03429a2b31218fc2d4da2/mecab-python-0.996.tar.gz#md5=33b7cf7bffa8706212b40567f2b4a87a $ tar xzf mecab-python-0.996.tar.gz
setup.pyを編集
$ sublime mecab-python-0.996/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"]) ])
コマンドプロンプトで移動
cd C:\cygwin\tmp\mecab-python-0.996
インストール実行
python setup.py install ~~~ コード生成しています。 コード生成が終了しました。 running install_lib copying build\lib.win-amd64-3.5\_MeCab.cp35-win_amd64.pyd -> C:\Python3.5\Lib\site-packages running install_egg_info Removing C:\Python3.5\Lib\site-packages\mecab_python-0.996-py3.5.egg-info Writing C:\Python3.5\Lib\site-packages\mecab_python-0.996-py3.5.egg-info
cygwinで実行
テスト用にファイル作成
※UTF-8で保存する事
$ sublime /cygdrive/c/cygwin/tmp/mecab-python-0.996/test.txt
内容
windows10でpythonからmecab実行をテストしてみる。
コマンドプロンプトでテストしてみる
※python2の場合はファイル読み過去文字列に対してUTF-8でデコードエンコード掛ける必要があるらしい。
python Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. import MeCab import sys import codecs m = MeCab.Tagger("-Owakati") f = open('test.txt','r', encoding='utf-8') text = f.read() f.close() f = open('out.txt','w', encoding='utf-8') f.write(m.parse(text)) f.close()
実行後のファイル確認
以下のように分かち書きされてる。
windows 10 で python から mecab 実行 を テスト し て みる 。
続いてcywinから実行できるようにする。
$ sublime ~/.bash_profile
export PATH="${PATH}:/cygdrive/c/Python3.5" export PATH="${PATH}:/cygdrive/c/Python3.5/Scripts"
MECABRCも追記
※MECABRCはMECABの設定ファイル、辞書のパスとかも記述されてる
export MECABRC="/cygdrive/c/MeCab/etc/mecabrc"
反映
$ source ~/.bash_profile
処理対象テキストファイルtest.txtを同ディレクトリに生成
cygwinからpythonでmecab実行試してみる。
pythonをインタプリタで起動
$ /cygdrive/c/Python3.5/python.exe -i
エラー発生した・・
>>> import MeCab >>> import sys >>> import codecs >>> m = MeCab.Tagger("-Owakati") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python3.5\lib\site-packages\MeCab.py", line 307, in __init__ this = _MeCab.new_Tagger(*args) RuntimeError
http://www.nal.ie.u-ryukyu.ac.jp/note/note_detail/2994/
を参考にした所、ipadicが無いってことらしい。
色々試した結果以下の方法で解決した
まず、cygwinでのMECABRCはWindowsパス表記に変更
※.bash_profileで設定後に反映。
export MECABRC="c:/MeCab/etc/mecabrc"
続いてmecabrcを編集し、Windowsパス表記の絶対パスに変更。
$ sublime /cygdrive/c/MeCab/etc/mecabrc
編集前
dicdir = $(rcpath)\..\dic\ipadic
編集後
dicdir = c:/MeCab/dic/ipadic
どうやら、cygwinからmecab実行する場合はパスの解釈が正常に行われるようにWindowsパス表記で記載する必要あるらしい。
再度実行してみる
$ /cygdrive/c/Python3.5/python.exe -i
エラー発生せず実行できた!
import MeCab import sys import codecs m = MeCab.Tagger("-Owakati") f = open('test.txt','r', encoding='utf-8') text = f.read() f.close() f = open('out2.txt','w', encoding='utf-8') f.write(m.parse(text)) f.close()
スクリプトに記述して実行可能な事も確認
$ /cygdrive/c/Python3.5/python.exe mecab_test.py
Python実行パスが長いのでcygwinのaliasに設定
編集
$ sublime ~/.bashrc
追記
alias python-windows='/cygdrive/c/Python3.5/python.exe'
反映
$ source ~/.bashrc
こんな感じで実行
$ python-windows mecab_test.py
注意点あるみたいなので、下記参考。
http://proger.blog10.fc2.com/blog-entry-123.html
おわりに
めちゃめちゃハマった、合計丸2日位。
WindowsはPython開発に向いてないって改めて思った。
MeCabはWindowsにおいてはVS(VSはPython 2.xだとVS2008、Python 3.xだとVS2010~)を使ってコンパイルするようにソースコードが作られている為VSのインストールが必要というのと、公式のWindows版Mecabが32ビット版しか無い為色々とソースの修正が必要となる所がハマリポイントというか面倒なポイント。
VSインストールやソース改修が不要な「形態素解析エンジン MeCab 0.98pre3 野良ビルド」というものを使えば楽にインストール出来るようだけどPython2系用みたいなので残念。
続いて、デバッグ可能なIDE(pycharm)等でも実行可能か確認する。
※2016年10月9日追記
PyDevでデバッグ可能でした
toriaezu-engineer.hatenablog.com