ひこぱっちのメモ

読者です 読者をやめる 読者になる 読者になる

ひこぱっちのメモ

特撮系、プログラミング、好きなもの、カラオケなど普段の気になったこと等をメモするブログです。

MecabとMecab-Pythonを設定しなおしたときのメモ

◆テクノロジー ◆テクノロジー-プログラミング

Chasenを入れた際にMecabも入れなおしていた為、PythonMecabを使う際に不具合が出たので、設定見直し。そのときのメモ。

環境

ファイルはそれぞれ発掘してきてください。

Mecab の設定

まず、Mecab 0.966をインストール。途中で文字コードを尋ねられるので「UTF-8」を選択。
Path「C:\Program Files (x86)\MeCab\bin;(各自読み替えておいてください)」を通して一応動作確認。
文字化けはしてるけど、動作がすることを確認。

f:id:dasi_memo:20141030160611j:plain

以上。

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 buildpython 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からも使える。雑なメモですが何か役に立てば。