概要
チャットボット作成の練習としてmecab-python3をMacにインストールしようとしたら意外と苦戦したので、手順と苦戦したポイントを共有します。
インストール環境
- MacBook Air (Early 2015)
- macOS Mojava 10.14.1
- Xcode 10.2
- pip 19.0.3
- Homebrew 2.1.0
1. MeCabのインストール
最初にMeCab本体と辞書をインストールします。これがないとmecab-python3も入れられません。
インストール手順
$ brew install mecab
$ brew install mecab-ipadic
ここまで終わったら、ちゃんとインストールできたか確かめましょう。
ターミナルでmecab
と打つと、入力待ち状態になり、適当な文章を打ってEnter
以下のように解説が出ればMeCabのインストールは完了です。
$ mecab
おはようございます
おはよう 感動詞,*,*,*,*,*,おはよう,オハヨウ,オハヨー
ござい 助動詞,*,*,*,五段・ラ行特殊,連用形,ござる,ゴザイ,ゴザイ
ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス
EOS
2. SWIGのインストール
SWIG (Simplified Wrapper and Interface Generator) は、C/C++ で書かれたプログラムやライブラリを、Tcl/Tk、Perl、Python、Ruby、PHP、Luaなどのスクリプト言語や、Java、C#、Common Lisp、Scheme、Ocamlなどのプログラミング言語に接続するためのオープンソースのツールである。 (Wikipedia)
MeCabはC++で書かれているんですかね?
とりあえずSWIGはMeCabをpython3で使えるようにしてくれるツールのようです。
mecab-python3をインストールする前にこれを入れておかないとエラーがでます。
###インストール手順
これは簡単
$ brew install swig
インストールできたかは以下のコマンドでバージョンが出ればわかります。
$ swig -version
SWIG Version 3.0.12
Compiled with clang++ [x86_64-apple-darwin18.0.0]
Configured options: +pcre
Please see http://www.swig.org for reporting bugs and further information
3. mecab-python3のインストール
さて、おまたせしました!
やっと本命のmecab-python3のインストールです!
以下のコマンドを入力してください
$ pip install mecab-python3
これでいける...はずなのに変なエラーが出てきました
$ pip install mecab-python3
Collecting mecab-python3
Using cached https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
Building wheels for collected packages: mecab-python3
Building wheel for mecab-python3 (setup.py) ... error
Complete output from command /Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-install-ls4os91_/mecab-python3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-wheel-y30lec8x --python-tag cp35:
running bdist_wheel
running build
running build_py
running build_ext
building '_MeCab' extension
swigging MeCab.i to MeCab_wrap.cpp
swig -python -shadow -c++ -I/usr/local/Cellar/mecab/0.996/include -o MeCab_wrap.cpp MeCab.i
/usr/local/Cellar/mecab/0.996/include/mecab.h:848: Warning 302: Identifier 'set_sentence' redefined by %extend (ignored),
MeCab.i:89: Warning 302: %extend definition of 'set_sentence'.
creating build
creating build/temp.macosx-10.6-x86_64-3.5
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/include -arch x86_64 -I/usr/local/Cellar/mecab/0.996/include -I/Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/include/python3.5m -c MeCab_wrap.cpp -o build/temp.macosx-10.6-x86_64-3.5/MeCab_wrap.o
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
MeCab_wrap.cpp:3051:10: fatal error: 'stdexcept' file not found
#include <stdexcept>
^~~~~~~~~~~
1 warning and 1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
----------------------------------------
Failed building wheel for mecab-python3
Running setup.py clean for mecab-python3
Failed to build mecab-python3
Installing collected packages: mecab-python3
Running setup.py install for mecab-python3 ... error
Complete output from command /Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-install-ls4os91_/mecab-python3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-record-rwbur4g_/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
running build_ext
building '_MeCab' extension
swigging MeCab.i to MeCab_wrap.cpp
swig -python -shadow -c++ -I/usr/local/Cellar/mecab/0.996/include -o MeCab_wrap.cpp MeCab.i
/usr/local/Cellar/mecab/0.996/include/mecab.h:848: Warning 302: Identifier 'set_sentence' redefined by %extend (ignored),
MeCab.i:89: Warning 302: %extend definition of 'set_sentence'.
creating build
creating build/temp.macosx-10.6-x86_64-3.5
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/include -arch x86_64 -I/usr/local/Cellar/mecab/0.996/include -I/Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/include/python3.5m -c MeCab_wrap.cpp -o build/temp.macosx-10.6-x86_64-3.5/MeCab_wrap.o
warning: include path for stdlibc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
MeCab_wrap.cpp:3051:10: fatal error: 'stdexcept' file not found
#include <stdexcept>
^~~~~~~~~~~
1 warning and 1 error generated.
error: command '/usr/bin/clang' failed with exit status 1
----------------------------------------
Command "/Users/Lappiness/.pyenv/versions/anaconda3-4.1.1/bin/python -u -c "import setuptools, tokenize;__file__='/private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-install-ls4os91_/mecab-python3/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-record-rwbur4g_/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/n1/wmr8p0zd6lb265ryzrg55rz80000gn/T/pip-install-ls4os91_/mecab-python3/
なにやら色々書いてありますが、『〇〇をインストールして』とか『××が見つかりません』みたいな簡単なエラーじゃなさそう(泣)
万事休すかと思いきや、検索すると同じような問題に遭遇した方が他にもいたようで、どうやら___コマンドラインツールが最新のものだとうまくいかないようです___
そんなの調べないとわからない(T _ T)
過去のコマンドラインツールはAppleのデベロッパー用サイトからダウンロードできます
https://developer.apple.com/download/more/
上記のサイトにログインして、私は下記のXcode 9.4のパッケージをダウンロードしました。
このパッケージからインストールして、いざ再チャレンジ
$ pip install mecab-python3
Collecting mecab-python3
Using cached https://files.pythonhosted.org/packages/ac/48/295efe525df40cbc2173748eb869290e81a57e835bc41f6d3834fc5dad5f/mecab-python3-0.996.1.tar.gz
Building wheels for collected packages: mecab-python3
Building wheel for mecab-python3 (setup.py) ... done
Stored in directory: /Users/Lappiness/Library/Caches/pip/wheels/73/71/4f/63a79925b5e9bb38932043917cc60140beb8022ac14a952b1e
Successfully built mecab-python3
Installing collected packages: mecab-python3
Successfully installed mecab-python3-0.996.1
嘘のようにあっさりインストール完了しました。(^^;;
とりあえずサンプルコードも載せときます。
import MeCab
mecab = MeCab.Tagger("-Ochasen") # MeCabオブジェクトを作成
malist = mecab.parse("すもももももももものうち") # 形態素解析を行う
print(malist)
すもも スモモ すもも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
の ノ の 助詞-連体化
うち ウチ うち 名詞-非自立-副詞可能
EOS
ちゃんと動きました。
まあ、めでたしめでたし