はじめに
python3でMeCabが使いたくてインストールしようとしたらエラーが発生したのでその対処法について。
自分がハマったことをメモ。
祝!初投稿☆
実行環境
Ubuntu 16.04 LTS
docker 18.03-ce
NVIDIA docker 1.0.1
python 3.6.3
Ubuntu上にdocker(NVIDIA docker)を入れ、コンテナ上の環境で作業しています。
事象
フツーにpipでmecab-python3をインストールしようとしたら
pip install mecab-python3
Collecting mecab-python3
Downloading mecab-python3-0.7.tar.gz (41kB)
100% |################################| 51kB 5.7MB/s
Complete output from command python setup.py egg_info:
/bin/sh: 1: mecab-config: not found
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-build-toa0xj3z/mecab-python3/setup.py", line 41, in
include_dirs=cmd2("mecab-config --inc-dir"),
File "/tmp/pip-build-toa0xj3z/mecab-python3/setup.py", line 21, in cmd2
return cmd1(strings).split()
File "/tmp/pip-build-toa0xj3z/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 /tmp/pip-build-toa0xj3z/mecab-python3/
こんな風に「list index out of range」が出た。
対処法
apt-get install libmecab-dev
してから
pip install mecab-python3
これでインストールは完了。
確認
import MeCab
↑問題なし
mecab = MeCab.Tagger('-Ochasen')
Traceback (most recent call last):
File "", line 1, in
File "/root/miniconda3/envs/linebot/lib/python3.6/site-packages/MeCab.py", line >307, in init
this = _MeCab.new_Tagger(*args)
RuntimeError
あれ??動かない。。。
どうやら以下も必要みたい。
apt-get install -y mecab mecab-ipadic
。。。その後もうまくいかず。。。
ギャー、やり直し!!
コンテナ破棄!こういうときにコンテナの良さがでますね。
最終的に
もう一度コンテナを作成し直してから
apt-get install -y mecab libmecab-dev mecab-ipadic-utf8
現在の状態を確認
mecab -D
filename: /var/lib/mecab/dic/debian/sys.dic
version: 102
charset: UTF-8
type: 0
size: 392126
left size: 1316
right size: 1316
インストール場所を「/var/lib/mecab/dic/」配下にすることを確認できたので
git clone https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
bin/install-mecab-ipadic-neologd -n -p /var/lib/mecab/dic/mecab-ipadic-neologd
「/var/lib/mecab/dic」に移動して
ll
drwxr-xr-x 6 root root 4096 Mar 14 13:26 ./
drwxr-xr-x 3 root root 4096 Mar 14 13:16 ../
lrwxrwxrwx 1 root root 34 Mar 14 13:16 debian -> /etc/alternatives/mecab-dictionary/
drwxr-xr-x 2 root root 4096 Mar 14 13:16 ipadic/
drwxr-xr-x 2 root root 4096 Mar 14 13:16 ipadic-utf8/
drwxr-xr-x 2 root root 4096 Mar 14 13:16 juman/
drwxr-xr-x 2 root root 4096 Mar 14 13:26 mecab-ipadic-neologd/
ちゃんと入っています。
次は辞書切り替えのために「/etc/mecabrc」のdicdirを上述のものに変更します。
dicdir = /var/lib/mecab/dic/mecab-ipadic-neologd
現在の状態を確認
mecab -D
filename: /var/lib/mecab/dic/mecab-ipadic-neologd/sys.dic
version: 102
charset: UTF8
type: 0
size: 4549446
left size: 1316
right size: 1316
ちゃんと切り替わってます。
mecab
ドナルド・トランプ
ドナルド・トランプ 名詞,固有名詞,人名,一般,,,ドナルド・トランプ,ドナルドトランプ,ドナルドトランプ
EOS
良さげです。
最後にpython3に対応させます。
pip install mecab-python3
では試してみます。pythonを起動してから以下を実行します。
import MeCab
mecab = MeCab.Tagger('mecabrc')
text = 'ドナルド・トランプ'
mecab.parse(text)
'ドナルド・トランプ\t名詞,固有名詞,人名,一般,,,ドナルド・トランプ,ドナルドトランプ,ドナルドトランプ\nEOS\n'
ふー、やっと出来た!
参考
以下のサイトを参考にさせて頂きました。
MecabをインストールしてPythonから使ってみた
64bitのWindowsにMeCabをインストールする
buntu 17.04 に mecab をインストール