0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

mecab-ipadic-neologdが見つからないと怒られる

Posted at

つくりながら学ぶ! 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を宣言してます.

変更箇所

7-1_Tokenizer.py
# 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の各ディレクトリの構成に関しては下記を参考にしてください.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?