min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

fedora30 python3 から MeCabを使う → エラー「 [ifs] no such file or directory: /usr/local/etc/mecabrc」が出たら sudo cp /etc/mecabrc /usr/local/etc/ で解決

f:id:min117:20200711143904p:plain

動画をガンガン保存する。だから溜まる。

 

最近保存した動画の名前を分析して、よく出てくる単語を30コくらいピックアップして、自分がいつも最初に入るサイト(自前のポータル画面)に表示できたら面白そうと思った。

 

まずは動画の名前を分析するところを実装する。mecabで名刺(noun)を分析すればよかろう。

 

このサイトのコード使わせてもらう。

qiita.com

 

の前に、python3からmecabを使えるようにしなきゃ。

 

$ pip3 install mecab-python3

だと失敗する。権限エラー。

 

--user オプションをつけたらうまくインストールできた。

$ pip3 install mecab-python3 --user

f:id:min117:20200711143348p:plain

 

動作テスト。

f:id:min117:20200711143443p:plain

一見よさげだが

 

ソースそのまま写して

$ vim my_count_noun.py

f:id:min117:20200711144826p:plain

 

引数にテキストファイルを食わせても

$ python3 my_count_nown.py ytdl_news_all.txt

f:id:min117:20200711144950p:plain

こんなエラーになる。

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

mecabrcが無いのが原因ぽい。

 

こんなときは、コンソール上で(ソースにあるのと)同じことをしてみる。

$ python3

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711145139p:plain

やっぱmecabrcが原因くさい。

 

こういうときは、エラーメッセージそのままでググるのが鉄則。

f:id:min117:20200711145358p:plain

 

このへんが参考になりそう。

qiita.com

f:id:min117:20200711145502p:plain

パスを通せば治るらしいが、pip3でインストールしたmecabの場合はどこにパスを通せばいいのか分からない。

 

とても参考になりそうな記事。

qiita.com

 

$ python3 -V

$ python3

>>> import sys

>>> sys.executable

>>> sys.version

 

$ pip3 freeze | grep mecab

 

$ python3

>>> import sys

>>> sys.path

>>> sys.path.append('みつかったpath')

 

なるほど。python3の実行PATHはこんな感じで探せばいいのか。

f:id:min117:20200711151846p:plain


みつけた。

f:id:min117:20200711151626p:plain

自分の環境では

/home/fedora/.local/lib/python3.7/site-packages

ここにmecabがあるっぽい

 

>>> sys.path.append('/home/fedora/.local/lib/python3.7/site-packages')

して続行。

f:id:min117:20200711152249p:plain

しかしエラー。

/home/fedora/.local/lib/python3.7/site-packages/MeCab/__init__.py

の124行目に何かありそう?

 

いや、辞書の場所を探そう。ここに見つけた。

$ ls -sahl /usr/lib64/mecab/dic/

f:id:min117:20200711154721p:plain

 

$ python3

>>> import sys

>>> sys.path.append('/usr/lib64/mecab/dic/')

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711154926p:plain

しかしエラー。どうも辞書を見に行く場所が違ってるっぽい。やっぱ

/home/fedora/.local/lib/python3.7/site-packages/MeCab/__init__.py

を探る必要があるのか。

 

どうもmecabrcが原因ぽく思える。ググって調べたら/etc/mecabrcがあるらしいことがわかった。

$ ls /etc/mecabrc

f:id:min117:20200711161015p:plain

あるね。

 

ということは

$ sudo cp /etc/mecabrc /usr/local/etc/

f:id:min117:20200711161206p:plain

からの

$ python3

>>> import MeCab

>>> mecab = MeCab.Tagger()

f:id:min117:20200711161318p:plain

おっしゃエラー消えた!

 

あらためてスクリプトを動かす。

$ python3 my_count_noun.py ytdl_news_all.txt

f:id:min117:20200711161447p:plain

動いた。素晴らしい。

f:id:min117:20200711144826p:plain

 

ここまでくれば、最近保存した動画名に含まれる単語分析なんて、すぐできる。

 

$ ls -rt | egrep 'mp4$|mkv$|webm$' | tee -a test_noun02.txt

f:id:min117:20200711162826p:plain

 

$ python3 my_count_noun.py test_noun02.txt

f:id:min117:20200711162808p:plain

mkvが一番多いのか。面白い。

 

あとでワンライナーでできるよう改良する。Linux最高すぎ。