つくりながら学ぶ! PyTorchによる発展ディープラーニングの第7章を実行中にmecab-ipadic-neologd
が見つからないというエラーに遭遇したので,その解決法です.
本はこれです.
エラー
発展Pytorchディープラーニングの実行に際して,mecab-ipadic-neologd
が見つからないというエラーに遭遇.
解決の道のりを備忘録的に残します.
Traceback (most recent call last):
File "/home/user_hoge/pytorch_advance/7_nlp_sentiment_transformer/7-1_Tokenizer.py", line 126, in <module>
m_t = MeCab.Tagger('-Ochasen -d /usr/lib/mecab/dic/mecab-ipadic-neologd')
File "/home/user_hoge/anaconda3/envs/MeCab/lib/python3.10/site-packages/MeCab.py", line 355, in __init__
_MeCab.Tagger_swiginit(self, _MeCab.new_Tagger(*args))
RuntimeError
環境の準備
Mecabの利用方法
ルート環境を汚染しないように仮想環境を構築
conda create -n MeCab python=3.10
conda activate MeCab
各種パッケージのインストール
必要なパッケージをインストール.MeCabだけは何故かconda
でうまく入らないので,pip
で入れましたが,原因は不明…
cd pytorch_advance/
conda install -y -c conda-forge mecab-python3
conda install -c conda-forge janome
pip install MeCab
解決法:プログラムの書き換え
7-1プログラムの125行目付近の/usr/lib/mecab/dic/mecab-ipadic-neologd
がそれぞれの状況に合わせて変えなきゃいけない!
要するに,mecab-ipadic-neologd
の場所がそれぞれの環境によって違うので,その場所を探して,正しい場所を探さないといけない.
そこで,今回は,mecab-ipadic-neologd
が/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
にあったので,下記のように7-1プログラムを書き換えることで動いた!
変更箇所が2箇所あり,面倒なので,変数neodic_path
を宣言してます.
変更箇所
# In[4]:
import MeCab
- m_t = MeCab.Tagger('-Ochasen -d /usr/lib/mecab/dic/mecab-ipadic-neologd')
+ neodic_path = '/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd'
+ m_t = MeCab.Tagger("-Ochasen -d {} ".format(neodic_path))
text = '機械学習が好きです。'
print(m_t.parse(text))
# In[5]:
# 単語分割する関数を定義
- m_t = MeCab.Tagger('-Owakati -d /usr/lib/mecab/dic/mecab-ipadic-neologd')
+ m_t = MeCab.Tagger("-Owakati -d {} ".format(neodic_path))
def tokenizer_mecab(text):
text = m_t.parse(text) # これでスペースで単語が区切られる
ret = text.strip().split() # スペース部分で区切ったリストに変換
return ret
text = '機械学習が好きです。'
print(tokenizer_mecab(text))
問題の特定方法
解決の道のりを備忘録的に残します.
そもそも,それ以前のMeCabはちゃんと動いていたので,MeCabには問題がないと判断
→mecab-ipadic-neologd
(辞書)がないんじゃないかということで,辞書を探しに行きます.
mecab-ipadic-neologd
ちゃんが入るところが間違っちゃったのかなと思ってfind
コマンドで探すとその通りで無事見つけることができました.
流石に,辞書で/usr/lib
以外にいっちゃうことはないと思うので,その中で探してまーす.
cd /
find ./usr/lib/ -path '*/mecab-ipadic-neologd'
すると,
./x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
にあるとのことなので,プログラムを/usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd
に合うように書き換えて無事解決!パチパチ
linuxの各ディレクトリの構成に関しては下記を参考にしてください.