MeCabはオープンソースの形態素解析エンジンで、以下のページで公開されている。
このサイトでダウンロードでは32-bit Windows用のバイナリを公開しているが、64-bitのPythonのバインディングが使いたかったので自分でビルドすることにした。MeCab-Pythonのビルドに方法に関してはいろいろな場所で公開されているて、微妙に使っているソフトやアプリのバージョンが異なる。ここでは、
- Python 2.7.10 [Anaconda (2.3.0 64-bit)] MSC v.1500 (AMD64)
- MeCab 0.996 Win32 バイナリ(辞書のため)
- MeCab 0.996 ソース
- MeCab-Python 0.996 ソース
- MSC v.1900 (Visual Studio 2015) またはMSC v.1800 (Visual Studio 2013)
の組み合わせを使った。Python 2.7はMSC v.1500 (Visual Studio 2008)でビルドされているので、Microsoft Visual C++ Compiler for Python 2.7など同じバージョンのコンパイラーを使ったほうがいいのだが、テキストマイニングとかは何となく動いていればまぁいい場合が多いのであまり気にしないことにした。
MeCabのビルド
まず、MeCabのビルドだが、3か所に修正が必要だ。とりあえず、feature_index.cppとwriter.cppの2か所は
に従う。MeCabはビルドにconfigure
を使用している。Win32ではsrc/Makefile.msvc.in
からsrc/Makefile.msvc
を生成する必要がある。MinGWやCygwinがあれば、configure
を実行できるが、なくても、自分でコピーして@VERSION@
と@DIC_VERSION@
を置換してやればよい。また、X64でビルドしたいので/MACHINE:X86
を書き換えてある。
diff --git a/src/Makefile.msvc b/src/Makefile.msvc
index 7d10a5e..8ba6383 100644
--- a/src/Makefile.msvc
+++ b/src/Makefile.msvc
@@ -3,7 +3,7 @@ CXXC = cl.exe
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 A
+LDFLAGS = /nologo /OPT:REF /OPT:ICF /LTCG /NXCOMPAT /DYNAMICBASE /MACHINE:X64 A
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.996\"" -DPACKAGE="\"mecab\"" \
ビルドするには、VS2015 x64 Native Tools Command Promptなどを起動して、
> cd mecab-0.996\src
> nmake -f Makefile.msvc
本来なら、make.bat
を実行するところだが、make.bat
はMSC v.900 (Visual Studio 2008)を使おうとするので、VS2016 x64 Native Toolsコマンドプロンプトから直接、nmake
を実行する。
うまくビルドができたら、
libmecab.dll mecab-dict-gen.exe mecab-system-eval.exe mecab.exe
mecab-cost-train.exe mecab-dict-index.exe mecab-test-gen.exe
をC:\local\MeCab\bin
へコピーし、
libmecab.lib mecab.h
をC:\local\MeCab\sdk
へコピーする。
MeCabの辞書
次に、辞書ファイルだが、ソースから生成せずにバイナリに付属するものを使う。ソースのCSVファイルとDEFファイルはEUC-JPのテキストファイルだが、WindowsではDEFファイルはShift-JISである必要があるようだ。
Win32のインストーラーでMeCabをインストールし、UTF-8としてインデックスを生成する。
この時点でC:\local\MeCab\bin\mecab.exe
が実行できるはずだ。mecab.exe
の実行にはmecabrc
とmecabrc
が参照している辞書ファイルが必要だ。パスはレジストリーのHKEY_CURRENT_USER\SOFTWARE\MeCab\mecabrc
のパスに設定されているC:\Program Files (x86)\MeCab\etc\mecabrc
が読み込まれる。
このままでもいいが、辞書ファイルはいろいろ変更したいので、
C:\Program Files (x86)\MeCab\etc
とC:\Program Files (x86)\MeCab\dic
はC:\local\MeCab
にコピーしておく。環境変数MECABRC
でもmecabrc
のパスは変えられる。
> set MECABRC=C:\local\MeCab\etc\mecabrc
MeCab-Pythonのビルド
Win32用にmecab-config
がないのでsetup.pyを以下のように変更。
diff --git a/setup.py b/setup.py
index 61c28d9..eae8c28 100644
--- a/setup.py
+++ b/setup.py
@@ -15,7 +15,7 @@
setup(name = "mecab-python",
- version = cmd1("mecab-config --version"),
+ version = "0.996",
ext_modules = [
Extension("_MeCab",
["MeCab_wrap.cxx",],
- include_dirs=cmd2("mecab-config --inc-dir"),
- library_dirs=cmd2("mecab-config --libs-only-L"),
- libraries=cmd2("mecab-config --libs-only-l"))
+ include_dirs=[r"C:\local\MeCab\sdk"],
+ library_dirs=[r"C:\local\MeCab\sdk"],
+ libraries=["libmecab"])
])
PythonのdistutilsはMSC v.900を使おうとするが、MSC v.1900を使わせるためにVS90COMNTOOLS
を書き換えてごまかす。VS2015 x64 Native Tools Command Promptを起動して、
> cd mecab-python-0.996
> set VS90COMNTOOLS=%VS140COMNTOOLS%
> python setup.py build
> python setup.py install
を実行する。
> python setup.py bdist_wininst
を実行してインストーラーを作ってもよい。
> set MECABRC=C:\local\MeCab\etc\mecabrc
> set PATH=C:\local\MeCab\bin;%PATH%
> python test.py > test.log
> notepad test.log
でうまくいったかテストできる。PATH
はmecab.dll
のために必要だが、mecab.dll
を%ANACONDA%
にコピーしてもよいだろう。
0.996
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
この 連体詞,*,*,*,*,*,この,コノ,コノ
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二 名詞,数,*,*,*,*,二,ニ,ニ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
EOS
BOS/EOS,*,*,*,*,*,*,*,*
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
この 連体詞,*,*,*,*,*,この,コノ,コノ
本 名詞,一般,*,*,*,*,本,ホン,ホン
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二 名詞,数,*,*,*,*,二,ニ,ニ
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見 動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性 名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し 動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。 記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*
EOS
EOS
filename: C:\local\MeCab\etc\..\dic\ipadic\sys.dic
charset: UTF-8
size: 392126
type: 0
lsize: 1316
rsize: 1316
version: 102
おまけ
辞書のインデックスを生成するために以下を実行。
> cd C:\local\MeCab\dic\ipadic
> mecab-dict-index -t shift-jis -c utf-8
参考:MeCab辞書へ単語の追加してみた