RとPythonでMeCabを使う環境構築(Windows, Mac)
自然言語処理まわりはずっとRでやっていたのですがそろそろPythonでもやろうと思い環境構築をまとめてみます。
ついでなのでRのほうもまとめてみます。
PythonについてはWindowsとMacで違うので一応そちらも触れたいと思います。Windows10とYosemiteです。
当たり前ですがRもPython3.5も入ってる前提です。
正直WindowsにMeCab入れてPythonでやるのは環境構築で挫折しそうになります。
でも何とかなったので共有。
MeCabを入れる
Windows
こちらのページからmecab-0.996.exeをダウンロードして解凍
辞書の文字コードを選択しろと言われるので「Shift-JIS」を選択
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]] 名詞 "うち"
動きました。
関数一覧は公式サポートを見てください。
PythonでMeCabを使う
環境は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
できた!