Chasenを入れた際にMecabも入れなおしていた為、PythonでMecabを使う際に不具合が出たので、設定見直し。そのときのメモ。
環境
ファイルはそれぞれ発掘してきてください。
Mecab の設定
まず、Mecab 0.966をインストール。途中で文字コードを尋ねられるので「UTF-8」を選択。
Path「C:\Program Files (x86)\MeCab\bin;(各自読み替えておいてください)」を通して一応動作確認。
文字化けはしてるけど、動作がすることを確認。
以上。
Mecab-python の設定
フォルダを解凍して、中に入ってるsetup.pyを書き換えます。
書き換え前
#!/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 string.split (cmd1(str)) setup(name = "mecab-python", version = cmd1("mecab-config --version"), py_modules=["MeCab"], 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")) ])
書き換え後
#!/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 string.split (cmd1(str)) setup(name = "mecab-python", version = "0.996", py_modules=["MeCab"], ext_modules = [ Extension("_MeCab", ["MeCab_wrap.cxx",], include_dirs=[r"C:\Program Files (x86)\MeCab\sdk"], library_dirs=[r"C:\Program Files (x86)\MeCab\sdk"], libraries=["libmecab"]) ])
このままpython setup.py buildを実行すると
[mecab-python-0.996]>python .\setup.py build running build running build_py running build_ext building '_MeCab' extension c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BINexe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG "-IC:\Program Fi(x86)\MeCab\sdk" -IC:\Python27\include -IC:\Python27\PC /Cab_wrap.cxx /Fobuild\temp.win32-2.7\Release\MeCab_wrap.oMeCab_wrap.cxx MeCab_wrap.cxx(3747) : warning C4530: C++ 例外処理を使っ ますが、アンワインド セマンティクスは有効にはなりません。c を指定してください。 MeCab_wrap.cxx(5583) : error C2039: 'set_result' : 'MeCabttice' のメンバではありません。 C:\Program Files (x86)\MeCab\sdk\mecab.h(778) : 'b::Lattice' の宣言を確認してください。 error: command '"c:\Program Files (x86)\Microsoft Visual io 9.0\VC\BIN\cl.exe"' failed with exit status 2
と出た。先人の知恵をまるまる拝借して、"C:\Program Files (x86)\MeCab\sdk\mecab.h"に追記。
778行目あたりの部分に追記。
/** * Lattice class */ class MECAB_DLL_CLASS_EXTERN Lattice { public: virtual void set_result(const char *str) = 0; //追記した部分 /** * Clear all internal lattice data. */ virtual void clear() = 0;
いざ、python setup.py buildとpython setup.py installを実行
[mecab-python-0.996]>python .\setup.py build running build running build_py running build_ext building '_MeCab' extension c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BINexe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG "-IC:\Program Fi(x86)\MeCab\sdk" -IC:\Python27\include -IC:\Python27\PC /Cab_wrap.cxx /Fobuild\temp.win32-2.7\Release\MeCab_wrap.oMeCab_wrap.cxx C:\Program Files (x86)\MeCab\sdk\mecab.h : warning C4819:ァイルは、現在のコード ページ (932) で表示できない文字を でいます。データの損失を防ぐために、ファイルを Unicode 形保存してください。 MeCab_wrap.cxx(3747) : warning C4530: C++ 例外処理を使っ ますが、アンワインド セマンティクスは有効にはなりません。c を指定してください。 c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BINk.exe /DLL /nologo /INCREMENTAL:NO "/LIBPATH:C:\Program F (x86)\MeCab\sdk" /LIBPATH:C:\Python27\libs /LIBPATH:C:\Pn27\PCbuild libmecab.lib /EXPORT:init_MeCab build\temp.wi2.7\Release\MeCab_wrap.obj /OUT:build\lib.win32-2.7\_MeCad /IMPLIB:build\temp.win32-2.7\Release\_MeCab.lib /MANIFELE:build\temp.win32-2.7\Release\_MeCab.pyd.manifest ライブラリ build\temp.win32-2.7\Release\_MeCab.lib と ジェクト build\temp.win32-2.7\Release\_MeCab.exp を作成中[mecab-python-0.996]> [mecab-python-0.996]> [mecab-python-0.996]>python .\setup.py install running install running build running build_py running build_ext running install_lib copying build\lib.win32-2.7\MeCab.py -> C:\Python27\Lib\spackages copying build\lib.win32-2.7\_MeCab.pyd -> C:\Python27\Libe-packages running install_egg_info Writing C:\Python27\Lib\site-packages\mecab_python-0.996-7.egg-info
まだ色々とコメントは出てるけど、とりあえずは完了。
同じフォルダ内にtest.pyがあるので実行。文字は化けてるものの、動作はしている。これでPythonからも使える。雑なメモですが何か役に立てば。