MeCab サイトでは、pythonバインディングのファイルを配布していますが、setup.py は Windows 環境向けには書かれていません。そこで、修正してVC++でコンパイルしたときのメモを書いておきます。以前も同じようなことを書きましたが、それはビルド環境が VC2003 でなければならない5年ほど前でした。
今回ビルドした環境は、Windows7で、32ビット版python2.7 と VC2008 がインストールされています。まず、python2.7 は http://www.python.org/ からダウンロードした通常の32bit版です。VC++はpython2.7では2008版が必要になります。
まず、Windows 向けの MeCab をインストールします。現在の最新版は0.993で、ファイル名は、mecab-0.993.exe です。下記のMeCabのダウンロードサイトからダウンロードし、インストールします。
http://code.google.com/p/mecab/downloads/list
インストール中、辞書の文字コードを聞いてきますが、文字コードは特に理由が無い限り WindowsではSHIFT-JISを選んだほうがいいでしょう。インストールが終わったら、mecab.dll があるフォルダまでPATHを通しておきます。
次に、同じダウンロードサイトから、python バインディングのソースファイルもダウンロードし展開します。最新版のファイル名は、mecab-python-0.993.tar.gz です。ダウンロードし、展開しておきます。
展開したファイルの中にあるsetup.py を次の内容に書き換えます。linux などでは、プログラム中でコマンドの実行結果を値にするのですが、Windows ではそのコマンドがないため、直接その結果を与えています。将来バージョンや配置先が変わった場合は、それに合わせて修正することになります。
#!/usr/bin/env python from distutils.core import setup,Extension if platform.machine() == 'AMD64': dir = 'C:/Program Files (x86)/MeCab/sdk' else: dir = 'C:/Program Files/MeCab/sdk' setup(name = 'mecab-python', version = '0.993', py_modules=['MeCab'], ext_modules = [ Extension('_MeCab', ['MeCab_wrap.cxx',], include_dirs=[dir], library_dirs=[dir], libraries=['libmecab'])])
次に、setup.pyがある場所に次の内容のバッチファイルを作って実行します。python のインストール場所などが違う場合は適宜書き換えます。
set MACHINE=x86 set PROGRAMFILESx86_PATH=%PROGRAMFILES% if not "%PROCESSOR_ARCHITECTURE%" == "x86" set PROGRAMFILESx86_PATH=%PROGRAMFILES(x86)% call "%PROGRAMFILESx86_PATH%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" %MACHINE% c:\python27\python setup.py bdist_wininst echo %PROGRAMFILESx86_PATH%
うまくいけば、distフォルダの中に、mecab-python-0.993.win32-py2.7.exe というファイルができているはずです。mecab.dll までパスが通っていないときは、このままでは実行できません。パスを通すか、python インストールフォルダの Lib\site-packages にmecab.dll をコピーします。
動作テストは、mecab-python-0.993.tar.gz 内にある test.py を使います。ただし、mecab の辞書の文字コードとtest.pyが保存されている文字コードが同じでないといけません。またSHIFT-JIS以外のときはコマンドプロンプト画面では文字化けします。
こんな結果が出ます:
0.993 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ この 連体詞,*,*,*,*,*,この,コノ,コノ 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 二 名詞,数,*,*,*,*,二,ニ,ニ 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 EOS BOS/EOS,*,*,*,*,*,*,*,* 太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー は 助詞,係助詞,*,*,*,*,は,ハ,ワ この 連体詞,*,*,*,*,*,この,コノ,コノ 本 名詞,一般,*,*,*,*,本,ホン,ホン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 二 名詞,数,*,*,*,*,二,ニ,ニ 郎 名詞,一般,*,*,*,*,郎,ロウ,ロー を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 。 記号,句点,*,*,*,*,。,。,。 BOS/EOS,*,*,*,*,*,*,*,* EOS EOS filename: C:\Program Files (x86)\MeCab\etc\..\dic\ipadic\sys.dic charset: SHIFT-JIS size: 392126 type: 0 lsize: 1316 rsize: 1316 version: 102
これだけだと面白くないので、64ビット版も作ってみました。
64ビット版のpython2.7を入れ直します。http://www.python.org/ から。最新版は、python-2.7.3.amd64.msi です。MeCab の方は、32ビット版の設定をそのまま流用したほうが楽なので、そのままインストールされているものとします。
モジュールをビルドするには、64ビット版の libmecab.lib が必要になるので、ソースからmecabをビルドします。ソースは上記のMeCabのダウンロードサイトからダウンロードしてきます。最新版 mecab-0.993.tar.gz です。
以前指摘したように、MeCab をWindowsの64ビットアプリケーションとしてコンパイルすると、型があいまいなせいでとエラーになるので、修正します。参考にしたのは以前も紹介したこのページです。今回のバージョン 0.993 での修正箇所は下のpatchに書いてある二カ所です。
diff -ru mecab-0.993.orginal/src/feature_index.cpp mecab-0.993/src/feature_index.cpp --- mecab-0.993.orginal/src/feature_index.cpp 2012-02-11 00:35:10 +0900 +++ mecab-0.993/src/feature_index.cpp 2012-05-27 14:52:56 +0900 @@ -308,7 +308,7 @@ if (!r) goto NEXT; os_ << r; } break; - case 't': os_ << (size_t)path->rnode->char_type; break; + case 't': os_ << (unsigned int)path->rnode->char_type; break; case 'u': os_ << ufeature; break; default: CHECK_DIE(false) << "unknown meta char: " << *p; diff -ru mecab-0.993.orginal/src/writer.cpp mecab-0.993/src/writer.cpp --- mecab-0.993.orginal/src/writer.cpp 2012-02-11 00:35:10 +0900 +++ mecab-0.993/src/writer.cpp 2012-05-27 14:51:41 +0900 @@ -257,7 +257,7 @@ // input sentence case 'S': os->write(lattice->sentence(), lattice->size()); break; // sentence length - case 'L': *os << lattice->size(); break; + case 'L': *os << (unsigned int)lattice->size(); break; // morph case 'm': os->write(node->surface, node->length); break; case 'M': os->write(reinterpret_cast<>
そのあと、Makefile.msvc を MinGW か CYGWIN を使って./configure を実行して Makefile.msvc を作り、さらに X64向けにほんの少し書き換えます。 Makefile.msvc.in と修正結果の差分は以下の通りです。
--- mecab-0.993.original/src/Makefile.msvc.in Wed Nov 02 23:40:30 2011 +++ mecab-0.993/src/Makefile.msvc Sun May 27 03:15:57 2012 @@ -3,10 +3,10 @@ LINK=link.exe CFLAGS = /EHsc /O2 /GL /GA /Ob2 /nologo /W3 /MT /Zi /wd4800 /wd4305 /wd4244 -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 DEFS = -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \ - -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \ - -DVERSION="\"@VERSION@\"" -DPACKAGE="\"mecab\"" \ + -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \ + -DVERSION="\"0.993\"" -DPACKAGE="\"mecab\"" \ -DUNICODE -D_UNICODE \ -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\"" INC = -I. -I..
修正がすんだら、make.bat の内容を次のようにして実行します。64ビットOSだと分かっているのでシンプルです。
call "%PROGRAMFILES(x86)%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" X64 nmake -f Makefile.msvc
できあがった libmecab.lib を setup.py と同じディレクトリに置き、setup.py のライブラリを指定する箇所を library_dirs=['.'] とし、上記の setup.py を実行するバッチファイルの一行目を set MACHINE=X64 と書き換えて、このバッチファイルを実行します。これでdistに mecab-python-0.993.win-amd64-py2.7.exe が作成されます。
しかし、mecab-python-0.993.win-amd64-py2.7.exe を実行し、インストールしただけでは使えません。このままだと、32ビット版の libmecab.dll をロードしようとして、「%1 は有効な Win32 アプリケーションではありません。」なんて言われてしまいます。これを回避するために 64ビット版 MeCab のビルドでできた libmecab.dll を python インストールフォルダの Lib\site-packages にコピーします。これで完了です。
うまくいくかどうかは、32ビットのときと同じように、test.py を実行して確認します。
なお今回の方法では標準の辞書は mecabrc のdicdir = 行に指定されている辞書になります。mecabrc は Makefile.mvsc で指定されている C:\Program Files (x86)\MeCab\etc もしくは C:\Program Files\MeCab\etc にあって、その記述をもとに C:\Program Files (x86)\MeCab\dic\ipadic もしくは C:\Program Files\MeCab\dic\ipadic になっています。
せっかくなので、今回作ったファイルを置いておきます。
mecab-python-0.993.win32-py2.7.exe
mecab-python-0.993.win-amd64-py2.7.exe
の二つの他、64ビット版の libmecab.dll とそのインポートライブラリなども入れておきます。
ダウンロード:mecab-python-0.993.win-build.zip
(MD5:88b64ac95c08181d84398ac9f2f9a36a)