2013年12月26日木曜日

mecab-python-0.999をWIndows 64bit版で利用する方法。

mecabは普通にWindows版の0.999をインストーラで入れておく。
Microsoft Visual C++ 2010 Expressなんかを入れておく。

mecab-0.999.tar.gzを展開し、cygwinなどで./configureを実行。

src/feature_index.cpp(356)
size_t を unsigned int へ置換
            case 'F':  {
              const char *r = getIndex(const_cast<char **>(&p), F.get(), usize);
              if (!r) goto NEXT;
              os_ << r;
            } break;
            case 't':  os_ << (size_t)path->rnode->char_type;     break;
            case 'u':  os_ << ufeature; break;
            case 'w':
            case 'F':  {
              const char *r = getIndex(const_cast<char **>(&p), F.get(), usize);
              if (!r) goto NEXT;
              os_ << r;
            } break;
            case 't':  os_ << (unsigned int)path->rnode->char_type;     break;
            case 'u':  os_ << ufeature; break;
            case 'w':
src/writer.cpp(260)
(usigned int)を追加
            // input sentence
          case 'S': os->write(lattice->sentence(), lattice->size()); break;
            // sentence length
          case 'L': *os << lattice->size(); break;
            // morph
          case 'm': os->write(node->surface, node->length); break;
            // input sentence
          case 'S': os->write(lattice->sentence(), lattice->size()); break;
            // sentence length
          case 'L': *os << (unsigned int)lattice->size(); break;
            // morph
          case 'm': os->write(node->surface, node->length); break;
src/Makefile.msvc(6)
/MACHINE:X86 を /MACHINE:X64 へ置換
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
DEFS =  -D_CRT_SECURE_NO_DEPRECATE -DMECAB_USE_THREAD \
        -DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
        -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
        -DUNICODE -D_UNICODE \
        -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
CFLAGS = /EHsc /O2 /GL /GA /Ob2 /nologo /W3 /MT /Zi /wd4800 /wd4305 /wd4244
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=102 \
        -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
        -DUNICODE -D_UNICODE \
        -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
src/make.batを以下の様に書き換え。

call "%PROGRAMFILES(x86)%\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" X64
nmake -f Makefile.msvc

[スタートメニュー] ->[Microsoft Visual Studio 2010] -> [Visual Studio Tools] -> [Visual Studio x64 Win64 コマンド プロンプト (2010)]を起動してmecab-0.999/srcへ移動する。
make.batを実行する。

libmecab.libとmecab.hをmecab-0.996.tar.gzの展開先へコピー
setup.pyを以下のように書き換える。
#!/usr/bin/env python

from distutils.core import setup,Extension

setup(name = "mecab-python",
 version = '0.996',
 py_modules=["MeCab"],
 ext_modules = [
  Extension("_MeCab",
   ["MeCab_wrap.cxx",],
                        include_dirs=[r'.'],
   library_dirs=[r'.'],
   libraries=['libmecab'])
   ])

[Visual Studio x64 Win64 コマンド プロンプト (2010)]でmecab-python-0.999.tar.gzの展開先へ移動してpython setup.py bdist_wininstを実行する。

distの下にインストーラが出来るので実行する。

lib/site-packagesへmecab-0.999/src/の下に出来ているlibmecab.dllをコピーする。

以上。

ちなみにmecabをインストールする際に選んだ文字コード以外だとうまく動かないような気がします。
(ちゃんと確認したわけではありませんが、そんな感じだったので・・・。Sphinxから使うならWindowsでもUTF-8とかにしておくのが幸せになれるかも。)


[参考]
http://neu101.seesaa.net/article/272153413.html
http://www.ipentec.com/document/document.aspx?page=mecab-compile-for-x64-windows-use-x64-windows




実はこの記事は9ヶ月前くらい(2013/03上旬)に書いて公開を忘れていたとかそういうあれのやつです。内容古いかもしれませんが一応公開しておこうと思います。

0 件のコメント:

コメントを投稿