Today(※最近) I learnedシリーズ。
mecab-python3のドキュメントに書いてあります。
https://github.com/SamuraiT/mecab-python3/blob/v1.0.9/README.md#specifying-a-mecabrc
You can specify an empty
mecabrc
like this:
tagger = MeCab.Tagger('-r/dev/null -d/home/hoge/mydic')
目次
- 目次
- MeCab.Tagger()初期化でRuntimeError
- mecabrcを指定する。/dev/nullも指定できる!
- 追加でpip install unidic-liteでも解決する
- 終わりに
MeCab.Tagger()
初期化でRuntimeError
mecab
はHomebrewでインストールしたようでした1
% mecab --version mecab of 0.996 % echo 天気の子 | mecab 天気 名詞,一般,*,*,*,*,天気,テンキ,テンキ の 助詞,連体化,*,*,*,*,の,ノ,ノ 子 名詞,一般,*,*,*,*,子,コ,コ EOS % echo 天気の子 | mecab -d $(mecab-config --dicdir)/mecab-ipadic-neologd 天気の子 名詞,固有名詞,一般,*,*,*,天気の子,テンキノコ,テンキノコ EOS
Pythonの対話モードにて
>>> import MeCab >>> tagger = MeCab.Tagger() Traceback (most recent call last): File "/.../.venv/lib/python3.11/site-packages/MeCab/__init__.py", line 137, in __init__ super(Tagger, self).__init__(args) RuntimeError The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/.../.venv/lib/python3.11/site-packages/MeCab/__init__.py", line 139, in __init__ raise RuntimeError(error_info(rawargs)) from ee RuntimeError: ---------------------------------------------------------- Failed initializing MeCab. Please see the README for possible solutions: https://github.com/SamuraiT/mecab-python3#common-issues If you are still having trouble, please file an issue here, and include the ERROR DETAILS below: https://github.com/SamuraiT/mecab-python3/issues issueを英語で書く必要はありません。 ------------------- ERROR DETAILS ------------------------ arguments: default dictionary path: None [ifs] no such file or directory: /usr/local/etc/mecabrc ----------------------------------------------------------
「ERROR DETAILS」にある/usr/local/etc/mecabrc
は、マシンにありません。
% ls /usr/local/etc/mecabrc ls: /usr/local/etc/mecabrc: No such file or directory
mecabrcを指定する。/dev/nullも指定できる!
エラーメッセージにありますが、READMEにこのエラーへの対応は書かれています。
Specifying a mecabrc
(意訳)「error message: [ifs] no such file or directory: /usr/local/etc/mecabrc」を見た場合、mecabrc
ファイルを指定する必要があります
- 空の
/usr/local/etc/mecabrc
を置く(例:touch /usr/local/etc/mecabrc
) mecabrc
の場所を-r
で指定する
mecab --help
より
-r, --rcfile=FILE use FILE as resource file
3つ目の対処法として、-r/dev/null
として空のmecabrc
を指定できます。
>>> tagger = MeCab.Tagger('-r/dev/null -d/opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd')
-r/dev/null
だけだと「[ifs] no such file or directory: ./dicrc」というエラーに変わりました。
そこでneologd辞書も指定しています。
>>> tagger = MeCab.Tagger('-r/dev/null -d/opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd -Owakati') >>> tagger.parse("天気の子が大好きです").split() ['天気の子', 'が', '大好き', 'です']
追加でpip install unidic-lite
でも解決する
READMEなどを読んでいくとpip install unidic-lite
でもいけそうに思われました2。
Installing a Dictionary
>>> import MeCab
>>> tagger = MeCab.Tagger()
>>> tagger = MeCab.Tagger("-Owakati") >>> tagger.parse("天気の子が大好きです").split() ['天気', 'の', '子', 'が', '大好き', 'です']
mecabrcを指定した扱いになるってことなんですかね?
終わりに
mecab-python3でMeCab.Tagger()
で遭遇した「[ifs] no such file or directory: /usr/local/etc/mecabrc」への対応でした
touch /usr/local/etc/mecabrc
- neologd辞書の環境で、
MeCab.Tagger("-r/dev/null -d/opt/homebrew/lib/mecab/dic/mecab-ipadic-neologd")
と指定 - 追加で
pip install unidic-lite
でも解決した
MeCabのラッパーとしてはmecab-python3よりfugashiがオススメされていたり、neologd辞書は更新が止まっていたり3と、この記事の内容はロストテクノロジー感がありますが、学びのアウトプットでした。
-
ブログを遡ったところ
ref: イベントレポート | #pyhack にて旦那と彼氏の間に何があるのかをword2vecに聞いてみました - nikkie-ftnextの日記↩#pydatatext に沿ってMecabの環境構築。(Macにbrewを使って)
— nikkie / にっきー (@ftnext) 2019年1月11日
今回入れたMecabのバージョンが執筆時から上がったようで(mecab of 0.996)、brew install swigが必要でした。
以下の記事を参考に対応(投稿者の方、ありがとうございます):https://t.co/cgA0RHmVgE -
neologd辞書はおすすめせずに
pip install unidic-lite
を案内 https://github.com/SamuraiT/mecab-python3/issues/51#issuecomment-658299727↩ - 更新ストップを取り上げている記事4 ↩
- neologd辞書の更新が止まったことで、MeCabに代えてSudachiPyがオススメされることの方が多いかもしれません。こちらは辞書もメンテされている認識です↩