概要
日本語の形態要素解析に使うMeCabのインストール方法、及びPythonから呼び出して使う方法をまとめました。Ubuntuでも大変でしたが、Windowsは半日近くかかりもっと大変でした(覚悟したほうがいいレベル)。
Ubuntu16.04の場合
Ubuntuを使う場合。
MeCabのインストール
以下のコマンドでmecabがインストールできます。
sudo apt install mecab
とりあえず使って見ると、文字化けしてしまうことが分かります。
hoge@PC:~$ mecab 私は猿です �� ��,����̾��,*,*,��,����,��ɽɽ��:�� �は�� �ü�,����,*,*,*,*,* �� ��,��̾,*,*,*,*,* ��す �ü�,����,*,*,*,*,* EOS
文字化けしないようにutf8表示に対応した辞書を追加します。
sudo apt install mecab-ipadic-utf8
今度はできました。これでMeCabのインストールは完了です。
hoge@PC:~$ mecab 私は猿より賢い 私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 猿 名詞,一般,*,*,*,*,猿,サル,サル より 助詞,格助詞,一般,*,*,*,より,ヨリ,ヨリ 賢い 形容詞,自立,*,*,形容詞・アウオ段,基本形,賢い,カシコイ,カシコイ EOS
PythonからMeCabを呼び出す
python3を使っている場合、mecab-python3をインストールしましょう。
pip install mecab-python3
が、エラーが出てしまいます。
Collecting mecab-python3 Using cached mecab-python3-0.7.tar.gz Complete output from command python setup.py egg_info: /bin/sh: 1: mecab-config: not found Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 41, in <module> include_dirs=cmd2("mecab-config --inc-dir"), File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 21, in cmd2 return cmd1(strings).split() File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 18, in cmd1 return os.popen(strings).readlines()[0][:-1] IndexError: list index out of range
「list index out of range」が目を引きますが、本当の問題は「mecab-config: not found」です。以下のコマンドでmecab-configを入手しましょう。
sudo apt install libmecab-dev
再度トライ。
pip install mecab-python3
成功しました。
Successfully installed mecab-python3-0.7
引き続きPythonでMeCabを呼び出してみましょう。
Import MeCab
が、エラー発生。
version `GLIBCXX_3.4.20' not found
この方のサイト(二日坊主な私)を見て、condaからlibgccを入れます。
conda install libgcc
これでImportできるようになりました。最後に動作チェック。
import MeCab mecab = MeCab.Tagger("-Ochasen") print(macab.parse("私はとても変態です")) 私 ワタシ 私 名詞-代名詞-一般 は ハ は 助詞-係助詞 とても トテモ とても 副詞-助詞類接続 変態 ヘンタイ 変態 名詞-サ変接続 です デス です 助動詞 特殊・デス 基本形 EOS
動きましたね。(私は変態ではありませんが!)
Windows10の場合
Windowsを使う場合。
MeCabのインストール
以下のサイトからMeCabのexeファイルをダウンロードしてインストールしましょう。
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
インストールする際に文字コードを聞かれますが、Pythonで動かすことを考えている場合、utf8にしておく必要があります。
PythonからMeCabを呼び出す
python3を使っている場合、mecab-python3をインストールしましょう。
pip install mecab-python3
が、エラーが出てしまいます。どうやらWindowsでは、自分でビルドするしかないとのこと。ひとまず下記サイトから元ファイルを入手しましょう。
https://pypi.python.org/pypi/mecab-python3/0.7
setup.pyが置いてある場所でコマンドプロンプトを開き、実行。
python setup.py install
さあ、悪夢の始まりです。
Collecting mecab-python3 Using cached mecab-python3-0.7.tar.gz Complete output from command python setup.py egg_info: /bin/sh: 1: mecab-config: not found Traceback (most recent call last): File "<string>", line 1, in <module> File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 41, in <module> include_dirs=cmd2("mecab-config --inc-dir"), File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 21, in cmd2 return cmd1(strings).split() File "/tmp/pip-build-40aowpcr/mecab-python3/setup.py", line 18, in cmd1 return os.popen(strings).readlines()[0][:-1] IndexError: list index out of range
このエラーはUbuntuと同じですね。「mecab-config: not found」が原因です。ただ、setup.pyの中身を変えて対策するようです。
40行目付近にある、mecab-configの部分を、
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")) ],
以下のようにsdkフォルダを探すように変更します。
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']) ],
さて、「python setup.py install」を実行しましょう。次のエラーはこちら。
error: Unable to find vcvarsall.bat
コンパイラーがないというエラーです。Windowsのサイトに取りに行きましょう。GBオーダのインストールなので、結構時間がかかりました。
http://landinghub.visualstudio.com/visual-cpp-build-tools
2018/08/18 上記サイトがリンク切れとのことで以下に訂正します。
http://go.microsoft.com/fwlink/?LinkId=691126
参考サイト
https://blogs.msdn.microsoft.com/pythonengineering/2016/04/11/unable-to-find-vcvarsall-bat/
再度トライ。
<中略> C:\Program Files (x86)\MeCab\sdk\mecab.h(204): note: see declaration of 'MeCab' MeCab_wrap.cxx(4760): error C2059: syntax error: 'const' MeCab_wrap.cxx(4778): error C2039: 'Lattice': is not a member of 'MeCab' C:\Program Files (x86)\MeCab\sdk\mecab.h(204): note: see declaration of 'MeCab' MeCab_wrap.cxx(4778): error C2065: 'arg1': undeclared identifier MeCab_wrap.cxx(4778): error C2059: syntax error: ')' MeCab_wrap.cxx(4792): error C2065: 'arg1': undeclared identifier MeCab_wrap.cxx(4792): fatal error C1003: error count exceeds 100; stopping compilation error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
Latticeというのがキーワードのようです。どういうものか良く分からないのですが、以下の方のサイトを参考に修正しました。
http://y-mattu.hatenablog.com/entry/2016/01/06/030929
mecab.hの775行目あたり1行追加すればいいようです。
/** * 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;
再びトライ。
<中略> build\lib.win-amd64-3.6\_MeCab.cp36-win_amd64.pyd : fatal error LNK1120: 11 unresolved externals error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1120
これもなんだか良く分からないのですが(笑)、32bit環境でコンパイルされたライブラリじゃだめだ、ということのようです。
以下の方のサイトを参考に
きまぐれ猫のゆりかご
64bit環境でコンパイルされたMecabとそのライブラリを取得します。
takayanの雑記帳
取得したら、setup.pyと同じファイルに「libmecab.lib」を置いて実行しましょう。
行け!
python setup.py install
行きました~。
Generating code Finished generating code
が、まだ終わりません。今度は、手に入れたMeCabをインポートするとエラー。
>>> import MeCab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\ProgramData\Anaconda3\Lib\site-packages\MeCab.py", line 26, in <module> _MeCab = swig_import_helper() File "C:\ProgramData\Anaconda3\Lib\site-packages\MeCab.py", line 22, in swig_import_helper _mod = imp.load_module('_MeCab', fp, pathname, description) File "C:\ProgramData\Anaconda3\lib\imp.py", line 242, in load_module return load_dynamic(name, filename, file) File "C:\ProgramData\Anaconda3\lib\imp.py", line 342, in load_dynamic return _load(spec) ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。
デフォルトだと、32bitのDLLを読みに行ってしまうようです。そこで、先ほど手に入れた64bitの「libmecab.dll」をscite-packegeフォルダに置きましょう。
今度こそ!
import MeCab mecab = MeCab.Tagger ("-Ochasen") print(mecab.parse("もっと熱くなれよ"))
もっと熱くなれよ!
もっと モット もっと 副詞-一般 熱く アツク 熱い 形容詞-自立 形容詞・アウオ段 連用テ接続 なれ ナレ なる 動詞-自立 五段・ラ行 命令e よ ヨ よ 助詞-終助詞 EOS
動きましたね。(本当に疲れました!)
結論
MeCabはWindows環境で使うものではない、と強く思いました笑