質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1754閲覧

pythonにてNEologd辞書が活用できない事象が発生しております。

vidal

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/10 06:24

編集2021/09/10 09:34

前提・実現したいこと

python(JupyterNotebook)でMeCabとNEologd辞書を活用して、
文章の品詞分解をしたいと考えているのですが、
以下のようなエラーが出てしまい、解決策をご教示いただけると幸いです。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) ~\Anaconda3\lib\site-packages\MeCab\__init__.py in __init__(self, rawargs) 132 try: --> 133 super(Tagger, self).__init__(args) 134 except RuntimeError as ee: RuntimeError: The above exception was the direct cause of the following exception: RuntimeError Traceback (most recent call last) <ipython-input-1-abd4b104a2e8> in <module> 2 import pandas as pd 3 ----> 4 mecab = MeCab.Tagger(r'-u C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic') 5 6 class CustomMeCabTagger(MeCab.Tagger): ~\Anaconda3\lib\site-packages\MeCab\__init__.py in __init__(self, rawargs) 133 super(Tagger, self).__init__(args) 134 except RuntimeError as ee: --> 135 raise RuntimeError(error_info(rawargs)) from ee 136 137 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: -u C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic ) [tokenizer_->open(param)] tokenizer.cpp(127) [d->open(dicfile[i])] dictionary.cpp(79) [dmmap_->open(file, mode)] no such file or directory: C:Program ----------------------------------------------------------

該当のソースコード

import MeCab import pandas as pd mecab = MeCab.Tagger(r'-u C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic') class CustomMeCabTagger(MeCab.Tagger): COLUMNS = ['表層形', '品詞', '品詞細分類1', '品詞細分類2', '品詞細分類3', '活用型', '活用形', '原形', '読み', '発音'] def parseToDataFrame(self, text: str) -> pd.DataFrame: """テキストを parse した結果を Pandas DataFrame として返す""" results = [] for line in self.parse(text).split('\n'): if line == 'EOS': break surface, feature = line.split('\t') feature = [None if f == '*' else f for f in feature.split(',')] results.append([surface, *feature]) return pd.DataFrame(results, columns=type(self).COLUMNS) all_text = '家電の開発に約10年従事。家電の価格競争の環境に疑問を感じ、これからは高齢化に取り組まなければと感じていた。' tagger = CustomMeCabTagger() nlp_df = tagger.parseToDataFrame(all_text) #「非自立、代名詞、接尾」でない名詞を抽出し、単語ごとのカウントを実施 data = nlp_df[['表層形','品詞']][(nlp_df['品詞'] == '名詞')&(nlp_df['品詞細分類1'] != '非自立')&(nlp_df['品詞細分類1'] != '代名詞')&(nlp_df['品詞細分類1'] != '接尾')].groupby(['表層形']).count().sort_values(by = '品詞', ascending = False) data.to_csv("Output/panasonicBUNKAI3.csv",encoding="utf_8_sig")

試したこと

1.Pathへ「C:\Program Files\MeCab\bin」を登録
2.7Zipをインストールし、Pathへ「C:\Program Files\7-Zip」を登録
3.git for Windowsをインストール
4.「git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git」コマンドでNEologd辞書をダウンロード
5.NEologd辞書ファイルを7-Zipで展開
6.C:\Program Files\MeCab\dic\ipadic フォルダを同じ dic フォルダ内にコピーして、フォルダ名を ipadic-UTF8 に変更

補足情報(FW/ツールのバージョンなど)

Python3.8.8
Windows10
を使用しております。

mecab-python-windows 0.996.3とmecab-python3 1.0.4が両方入ってます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2021/09/10 09:09 編集

Pythonのmecabバインディングが複数入っているということはないでしょうか。 pip list した時、 mecab と mecab-python3 が両方あるとか、mecab-python-windows と mecab-python3 が両方あるなどです。 (メッセージが mecab-python3 のものなので、mecab-python3 は入っていると思っています)
vidal

2021/09/10 09:13

mecab-python-windows 0.996.3とmecab-python3 1.0.4が両方入ってます。 どちらかを消した方がよろしいということなのでしょうか?
quickquip

2021/09/10 09:31

なんとなく事態が想像できました。この情報は質問に追記しておいていただけますか。
vidal

2021/09/10 09:35

質問に追記しておきました!私が全然理解できておらずすみません、、、。 (また月曜日にご返信したいと思います、よろしくお願いいたします。)
guest

回答2

0

mecab-python3は、本家のバインディングに対して独自仕様が入っていて空白付きのディレクトリが扱えるようになってますが、逆に"が必須になっています。
パス区切りの\を、データ上で2個にしてください。

python

1mecab = MeCab.Tagger(r'-u "C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic"')

(追記)

PathからC:\Program Files\MeCab\binを外した状態で、

python

1mecab = MeCab.Tagger(r'-r "C:\Program Files\MeCab\etc\mecabrc" -u "C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic"')

じゃないでしょうか?
("mecab-python3付属のlibmecab.dll" じゃなくて "mecabの中のlibmecab.dll" が呼ばれているのでは? という推測からです)


(追記)
macab-python-windows と mecab-python3 は同名のファイルを含んでいます。この順にインストールしたとすると、今、Pythonのパッケージは

MeCab/ mecab-python3由来
MeCab.py macab-python-windows 由来
libmecab.dll macab-python-windows 由来
_MeCab.〜〜.pyd macab-python-windows 由来

になっていると想像します。(確認はしてません)

空白が取り扱えるような拡張は mecab-python3 が libmecab.dll に独自に施したものです。
しかし libmecab.dll が上書きされているなら、Pythonでは mecab-python3 を使っているように見えるが空白が使えない、という事態に説明が付きます。

両方アンインストールして mecab-python3 だけを入れ直してください。
-rオプションは明に指定してください。

投稿2021/09/10 07:42

編集2021/09/10 09:48
quickquip

総合スコア11038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vidal

2021/09/10 07:49

引き続きご回答いただきありがとうございます! \をデータ上で2つにして試してみましたが、質問時と同様のエラーが発生してしまいます、、、。
quickquip

2021/09/10 07:55

-u オプションの動作を自分で確認したことはなかったでした(もしかして空白付きのディレクトリが使えるように拡張されているのは -r だけなのかも……?) お役に立てずすみません
vidal

2021/09/10 09:04

追記のものも試してみたのですが、同様のエラーが出てしまっている状況です、、、。
guest

0

mecab = MeCab.Tagger(r'-u C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic')

のProgram Filesの空白があるためです。

おそらく、以下で動くと思います。

mecab = MeCab.Tagger(r'-u "C:\Program Files\MeCab\dic\NEologd\NEologd.20200910-u.dic"')

投稿2021/09/10 06:59

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vidal

2021/09/10 07:04

ありがとうございます!試してみましたが、同じエラーが出てしまいます、、、。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問