Windows 7 64bit に MeCab (和布蕪) と Python のバインディングを導入 (2016/08/18)

  • 8
    いいね
  • 8
    コメント

はじめに

Windows 7 64bit に MeCabを導入するのに思ったよりも大変だと思ったので備忘録として投稿します。

MeCabは形態素解析ツールです。基本的に下記のことをしてくれます。
- 日本語の文を形態素(意味の通る最小のブロック)に分けてくれる
- 形態素の持つ品詞を分析してくれる

1行目:入力したテキスト、3行目以下:結果
result.png

参考にした情報は以下(ありがとうございました!):
- 64bit Windows + python 2.7 + MeCab 0.996 な環境をつくる
- Windows 64bitで、mecab-python

導入に必要なもの

  • python 2.7.11
  • Microsoft Visual Studio 2015
  • mecab-0.996.exe
  • mecab-0.996.tar.gz
  • mecab-python-0.996.tar.gz

手順

1. 「導入に必要なもの」を全てダウンロード・インストールする

mecab-0.996.exe, mecab-0.996.tar.gz, mecab-python-0.996.tar.gzはこちらからダウンロードできます。

2. MeCab本体をインストール

mecab-0.996.exeを実行して環境変数を書く。
1. mecab-0.996.exeを実行する。辞書の文字コードはutf-8にしています(汎用性もあるし、筆者が慣れてるからです)。
2. 環境変数のPATHにC:\Mecab\bin を追加
3. 環境変数MECABRCを新たに作り、C:\Mecab\etc\mecabrcを設定
4. C:以下にMecabのディレクトリがなければ作成(C:\Mecab\の状態)

  • この時、Mecabフォルダ以下にbinとsdkフォルダも作成
  • ※環境変数は各自で異なる場合があるので確認してください。

(2016/8/18追記)mecab-0.996.exeを実行すると、C:\Program Files (x86)\以下にMeCabフォルダが作成されます。
そのフォルダをC:\に入れてしまえば4番を行う必要はありません。記事作成中に気づいた・・・orz

3. MeCabソースの修正、ビルド

ここで、参考にしていた情報を見ながらやってたらファイル指定のところでミスがあって、自分のPCに合わせるのに時間がかかりました。(知識がなさすぎて、2回アンインストールして3回目でできました笑)

  1. mecab-0.996.tar.gz を展開
  2. mecab-0.996/srcフォルダ内のいくつかのファイルを修正。(旧)以下を(新)以下に変更してください

    • Makefile.msvc.in 内を Windows 7 64bit用に修正
    • 6行目 /MACHINE:X86 → /MACHINE:X64
      Makefile.msvc.in
      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
      

    • 8行目 -DDIC_VERSION=@DIC_VERSION@ → -DDIC_VERSION=102
      Makefile.msvc.in
       (旧)-DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=@DIC_VERSION@ \
       (新)-DDLL_EXPORT -DHAVE_GETENV -DHAVE_WINDOWS_H -DDIC_VERSION=102 \
      

    • 9行目 -DVERSION="\"@VERSION@"\"" → -DVERSION="\"0.996\""
      Makefile.msvc.in
       (旧) -DVERSION="\"@VERSION@\"" -DPACKAGE="\"mecab\"" \
       (新) -DVERSION="\"0.996\"" -DPACKAGE="\"mecab\"" \
      

    • 11行目 "\"c:\Program Files\mecab\etc\mecabrc\"" →  "\"c:\mecab\etc\mecabrc\""
    • mecabrcの場所を指定してください
      Makefile.msvc.in
       (旧) -DMECAB_DEFAULT_RC="\"c:\\Program Files\\mecab\\etc\\mecabrc\""
       (新) -DMECAB_DEFAULT_RC="\"c:\\mecab\\etc\\mecabrc\""
      

    • feature_index.cpp 356行目 size_t → unsigned int
      feature_index.cpp
       (旧)case 't':  os_ << (size_t)path->rnode->char_type;     break;
       (新)case 't':  os_ << (unsigned int)path->rnode->char_type;     break;
      

    • writer.cpp 260行目 size_t → unsigned int
      writer.cpp
       (旧)case 'L': *os << (size_t)lattice->size(); break;
       (新)case 'L': *os << (unsigned int)lattice->size(); break;
      

    • mecab.h 1125行目 #ifndef SIWG → #ifndef SWIG
      mecab.h
       (旧) #ifndef SIWG
       (新) #ifndef SWIG
      

    • common.h include部分に追記 #include
      mecab.h
      (新) #include <iterator>
      

  3. mecab-0.996/src内でビルドする。コマンドプロンプトの管理者権限で行って下さい。
    > call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
    > nmake -f Makefile.msvc.in
    

    • vcvarsall.bat が入っているディレクトリを指定してください(私の場合は Microsoft Visual Studio 14.0 以下)
    • vcvarsall.batが入っていない場合は、「PythonがコンパイルされたCコンパイラがない」ということですので、
      Python 2.7をお使いの場合はこちらからコンパイラをダウンロードしてください
    • 詳しくは、PythonでUnable to find vcvarsall.batと言われる際のまとめを参考にして下さい

  4. C:\Mecab\bin 以下にmecab-0.996/src内でビルドした以下のファイルをコピーしてください。
    • libmecab.dll
    • mecab-cost-train.exe
    • mecab-dict-gen.exe
    • mecab-dict-index.exe
    • mecab-system-eval.exe
    • mecab-test-gen.exe

  5. C:\Mecab\sdk 以下にmecab-0.996/src内でビルドした以下のファイルをコピーしてください。
    • mecab.h
    • libmecab.lib
これでビルド完了です。

4. mecab for python のセットアップ

Unix版でしか動かないPythonをWindows用に書き換えます。

  1. mecab-python-0.996.tar.gzを展開
  2. setup.pyを下記のように書き換えます。
    setup.py
    #!/usr/bin/env python
    from distutils.core import setup,Extension,os
    setup(name = "mecab-python",
    version = "0.996",
    py_modules=["MeCab"],
    ext_modules = [
    Extension("_MeCab",
    ["MeCab_wrap.cxx",],
    include_dirs=[r"C:\Mecab\sdk"],
    library_dirs=[r"C:\Mecab\sdk"],
    libraries=["libmecab"])
    ])
    

    • include_dirsとlibrary_dirsのディレクトリは2-4で作成したsdkフォルダを指定してください。

  3. ビルドしてbuildフォルダを作成する。
    > python setup.py build
    

  4. インストールする。各種ファイルがpythonインストール先のLib\site-packagesにコピーされます。
    > python setup.py install
    

5.辞書とmecabrcをMecabファイルに入れる

C:\Mecab\以下にC:\Program Files (x86)\MeCab内にあるetcとdicフォルダをコピーして入れる。

これで全て完了です!

試してみる

早速Pythonで試してみました。
最近横須賀のイベントで米軍基地内に入ることができたので、テキスト文はこれ。

text.txt
横須賀の米軍基地見学楽しかった!

コマンドプロンプト上でpython。


>python
Python 2.7.11
> import MeCab
> import sys
> m = MeCab.Tagger('mecabrc')
> f = open('text.txt','r')
> text = f.read().decode('utf-8')
> f.close()
> f = open('result.txt','w')
> f.write(m.parse(text.encode('utf-8')))
> f.close()

結果はこんな感じ
result.png