はじめに
Windows 7 64bit に MeCabを導入するのに思ったよりも大変だと思ったので備忘録として投稿します。
MeCabは形態素解析ツールです。基本的に下記のことをしてくれます。
- 日本語の文を形態素(意味の通る最小のブロック)に分けてくれる
- 形態素の持つ品詞を分析してくれる
参考にした情報は以下(ありがとうございました!):
導入に必要なもの
- 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を実行して環境変数を書く。
- mecab-0.996.exeを実行する。辞書の文字コードはutf-8にしています(汎用性もあるし、筆者が慣れてるからです)。
- 環境変数のPATHに
C:\Mecab\bin
を追加 - 環境変数MECABRCを新たに作り、
C:\Mecab\etc\mecabrc
を設定 -
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回目でできました笑)
- [mecab-0.996.tar.gz](http://taku910.github.io/mecab/#download) を展開
- 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>
- 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をお使いの場合は[こちら](https://www.microsoft.com/en-us/download/details.aspx?id=44266)からコンパイラをダウンロードしてください
- 詳しくは、[PythonでUnable to find vcvarsall.batと言われる際のまとめ](http://isiz.hateblo.jp/entry/2015/08/22/Python%E3%81%A7Unable_to_find_vcvarsall.bat%E3%81%A8%E8%A8%80%E3%82%8F%E3%82%8C%E3%82%8B%E9%9A%9B%E3%81%AE%E3%81%BE%E3%81%A8%E3%82%81)を参考にして下さい
- ```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
- ```C:\Mecab\sdk``` 以下にmecab-0.996/src内でビルドした以下のファイルをコピーしてください。
- mecab.h
- libmecab.lib
4. mecab for python のセットアップ
Unix版でしか動かないPythonをWindows用に書き換えます。
- [mecab-python-0.996.tar.gz](http://taku910.github.io/mecab/#download)を展開
- 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フォルダを指定してください。
- ビルドしてbuildフォルダを作成する。
> python setup.py build
- インストールする。各種ファイルがpythonインストール先のLib\site-packagesにコピーされます。
> python setup.py install
5.辞書とmecabrcをMecabファイルに入れる
C:\Mecab\
以下にC:\Program Files (x86)\MeCab
内にあるetcとdicフォルダをコピーして入れる。
これで全て完了です!
試してみる
早速Pythonで試してみました。
最近横須賀のイベントで米軍基地内に入ることができたので、テキスト文はこれ。
横須賀の米軍基地見学楽しかった!
コマンドプロンプト上で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()