★データ解析備忘録★

ゆる〜い技術メモ

RとPythonでMeCabを使う環境構築(Windows, Mac)

自然言語処理まわりはずっとRでやっていたのですがそろそろPythonでもやろうと思い環境構築をまとめてみます。
ついでなのでRのほうもまとめてみます。
PythonについてはWindowsMacで違うので一応そちらも触れたいと思います。Windows10とYosemiteです。
当たり前ですがRもPython3.5も入ってる前提です。

正直WindowsMeCab入れてPythonでやるのは環境構築で挫折しそうになります。
でも何とかなったので共有。

MeCabを入れる

Windows

こちらのページからmecab-0.996.exeをダウンロードして解凍
辞書の文字コードを選択しろと言われるので「Shift-JIS」を選択

コマンドプロンプトMeCabが動くかテスト

mecab
すもももももももものうち

結果

すもも   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

動きました。

Mac

こちらのページの「ダウンロード」からmecab-0.996.tar.gzをダウンロードしてDowloadフォルダに置きます。

ターミナルで以下のコマンドを打ってエラーがなければsudoでインストールします。

cd ~/Downloads
tar zxfv mecab-0.996.tar.gz
cd mecab-0.996
./configure
make
make check
sudo make install

次に辞書をインストールします。
さっきのページでIPA辞書をダウンロードしてDowloadフォルダに置き、下記のコマンドを実行。

cd ~/Downloads
tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
sudo make install

ターミナルでMeCabが動くかテスト

mecab
すもももももももものうち

結果

すもも   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

動きました。

RでMeCabを使う

こちらはOS関係なく一緒ですし、簡単です。
詳細は
RMeCab - アールメカブを見ていただければと思いますが、実は一行でいけます。

install.packages ("RMeCab", repos = "http://rmecab.jp/R")

これで完了です。動くかテストします。

library(RMeCab)
res <- RMeCabC("すもももももももものうち")

出力結果

> res
[[1]]
    名詞 
"すもも" 

[[2]]
助詞 
"も" 

[[3]]
  名詞 
"もも" 

[[4]]
助詞 
"も" 

[[5]]
  名詞 
"もも" 

[[6]]
助詞 
"の" 

[[7]]
  名詞 
"うち" 

動きました。
関数一覧は公式サポートを見てください。

PythonMeCabを使う

環境はPython3.5です。僕は統合環境としてSpyderというのを使っているのでそれでいきます。

Windows

さくっと終わらせるつもりが、これがかなりしんどかったです。

pip install mecab-python3

で普通に入れようとすると

Collecting mecab-python3
  Using cached mecab-python3-0.7.tar.gz
    Complete output from command python setup.py egg_info:
    'mecab-config' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    Traceback (most recent call last):
      File "<string>", line 20, in <module>
      File "C:\Users\ユーザー名\AppData\Local\Temp\pip-build-6kdmp608\mecab-python3\setup.py", line 41, in <module>
        include_dirs=cmd2("mecab-config --inc-dir"),
      File "C:\Users\ユーザー名\AppData\Local\Temp\pip-build-6kdmp608\mecab-python3\setup.py", line 21, in cmd2
        return cmd1(strings).split()
      File "C:\Users\ユーザー名\AppData\Local\Temp\pip-build-6kdmp608\mecab-python3\setup.py", line 18, in cmd1
        return os.popen(strings).readlines()[0][:-1]
    IndexError: list index out of range

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\ユーザー名\AppData\Local\Temp\pip-build-6kdmp608\mecab-python3

と怒られます。mecab-configというのがないらしいです。

https://drive.google.com/folderview?id=0B4y35FiV1wh7fjQ5SkJETEJEYzlqcUY4WUlpZmR4dDlJMWI5ZUlXN2xZN2s2b0pqT3hMbTQ&usp=drive_web#listからmecab-python-0.996.tar.gzをダウンロードして解凍
中にあるsetup.pyを書き換えます。

元の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"))
			])

書き換えた後の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'C:\Program Files (x86)\MeCab\sdk'],
            library_dirs=[r'C:\Program Files (x86)\MeCab\sdk'],
            libraries=['libmecab'])
            ])

PathのC:\Program Files (x86)\MeCab\sdkは適宜書き換えてください。

書き換えたらsetup.pyをビルドします。

C:\Program Files (x86)\Python35-32\mecab-python-0.996>python setup.py build

そしたらまたエラーです。

error: Unable to find vcvarsall.bat

このエラーは以下が参考になります。
isiz.hateblo.jp

というわけでVS2015 Communityを入れます。
CommunityでOK。ただし、必ずインストール時にVC++にチェックを入れましょう。

入れたらレジストリを書き換えていきます。
そのためにまず使っている Python のビルドされた環境を確かめます。

>>> from distutils.msvc9compiler import *
>>> get_build_version()
14.0

確認したらレジストリを書き換えます。

値を次の場所に書き込みます:

キー名: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\(Python の MSVC のバージョン)\Setup\VC
値名:ProductDir
値:(現在使っている Visual Studio の VC フォルダへのパス)

僕はPython3.5を使っていて、Vs Community2015を入れたので次のようになります。
キー名: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\Setup\VC
値名:ProductDir
値:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

このあたりのバージョン等に関してはモジュールは違いますが以下が参考になります。
qiita.com

この時点でC++コンパイラーの問題は解決しました。しかしまだエラーが出ます。

MeCab_wrap.cxx(5583): error C2039: 'set_result': 'MeCab::Lattice' のメンバーではありません。
C:\Program Files (x86)\MeCab\sdk\mecab.h(778): note: 'MeCab::Lattice' の宣言を確認してください

C:\Program Files (x86)\MeCab\sdkに移動して、mecab.hを書き換えます。775行目あたりで

/**
 * Lattice class
 */
class MECAB_DLL_CLASS_EXTERN Lattice {
public:

  virtual void set_result(const char *str)        = 0; //この1行を追加

  /**
   * Clear all internal lattice data.
   */
  virtual void clear()              = 0; 

とします。

python setup.py build


入りました。
動くか確認します。

import MeCab
mecab = MeCab.Tagger ("-Ochasen")
print(mecab.parse("すもももももももものうち"))
すもも   名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも  名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち  名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

できた!

Mac

こちらは

pip install mecab-python3

で一発でした。