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

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

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

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

Q&A

解決済

2回答

408閲覧

PythonとMeCabを使おうとするとUnicodeDecodeErrorが出る

ojisan_name

総合スコア1

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

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

0グッド

0クリップ

投稿2023/08/07 08:50

編集2023/08/07 08:56

実現したいこと

python、mecabを使ってランダムに"形容詞" + "名詞" を出力したいと考えています。

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

エラーメッセージ Traceback (most recent call last): File "/User/work/ojisan_bot/src/main.py", line 24, in <module> nouns = get_words_by_pos("名詞") File "/Users/work/ojisan_bot/src/main.py", line 17, in get_words_by_pos for line in f: UnicodeDecodeError: 'euc_jp' codec can't decode byte 0xc4 in position 0: illegal multibyte sequence

該当のソースコード

python

1dict_pass = "/usr/local/lib/mecab/dic/ipadic" 2 3def get_words_by_pos(part_of_speech): 4 m = MeCab.Tagger("-d " + dict_pass) 5 m.parse("/usr/local/lib/mecab/dic/ipadic")# 辞書のパスを適宜指定してください 6 words = [] 7 8 with open(dict_pass + "/sys.dic", 'r', encoding="euc-jp") as f: # sys.dicのパスを適宜指定してください 9 for line in f: 10 if part_of_speech in line: 11 word = line.split()[0] 12 words.append(word) 13 14 return words 15 16nouns = get_words_by_pos("名詞") 17adjectives = get_words_by_pos("形容詞") 18 19noun = random.sample(nouns, 1)[0] 20adjective = random.sample(adjectives, 1)[0] 21 22print(adjective + noun)

試したこと

euc-jpをutf-8に変えてみたりしました。

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

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

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

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

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

TakaiY

2023/08/07 08:53

エラーメッセージは省略せず、Trace backの行からすべて載せてください。エラー発生場所など、重要な情報が入てちます。 回答はここにするのでなく、質問を編集してください。
ojisan_name

2023/08/07 08:56

内容を更新しました!助言ありがようございます🙇‍♂️
TakaiY

2023/08/07 09:12

sys.dic というファイルは 本当にeuc-jp形式のファイルなのでしょうか?
meg_

2023/08/07 09:41

> euc-jpをutf-8に変えてみたりしました。 当てずっぽうで変えてませんよね?正しいエンコーディングが不明ということでしょうか?
ojisan_name

2023/08/07 12:03

あてずっぽうですね...。 正しいエンコーディングが不明です
ojisan_name

2023/08/07 12:06

mecabを使ってみた記事を参考にしてエンコーディングの形式を当てはめている感じです
quickquip

2023/08/07 12:21

Python3で合ってますか? Python3だと、mecabのPythonバインディングから扱えるのは **辞書のエンコーディングが** utf-8 の場合だけです(おそらく)。utf-8 ではない辞書だとPython側からどう指定しても使えないと思われます。 なので、その辞書はなにものなのか? (エンコーディングはなにか? どうインストールしたものか?) が最重要ポイントです。
quickquip

2023/08/07 12:35 編集

mecab本体があるなら、コマンドで mecab -D -d /usr/local/lib/mecab/dic/ipadic した結果をとりあえず載せるのがいいんじゃないでしょうか
meg_

2023/08/07 12:37

> mecabを使ってみた記事を参考にしてエンコーディングの形式を当てはめている感じです 他の人が書いたコードを流用する場合、環境を同じにしないと動作しないことがあるかと思います。
can110

2023/08/07 12:46

sys.dicはバイナリファイルなのでテキストとしては開けません。 ほか、そのソースコード各行で何をしたいのか意図が不明ですので 何をしたいのかを具体的に説明ください。
quickquip

2023/08/07 14:08

なるほど > ランダムに"形容詞" + "名詞" を出力したい という目的に対して > mecabを使って というのが、そもそも手段として完全におかしいですね。 もしもsys.dicがmecabの辞書あたりからコピーしてきたファイルなら、openで開いているのもそもそも完全に間違っている、と。
ojisan_name

2023/08/07 15:55

勉強不足で申し訳ありません🙇‍♂️ mecabのipadicの中身から名詞分類されているものと形容詞分類されているものをリスト化したいです....。
guest

回答2

0

自己解決

自己解決しました。
ipadicの辞書をeuc-jpからutf-8に変換しました。

投稿2023/08/07 23:47

ojisan_name

総合スコア1

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

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

0

https://taku910.github.io/mecab/#download > IPA辞書ダウンロードで、
mecab-ipadic-2.7.0-20070801.tar.gz をダウンロードする
展開する
Noun.*.csv を読み込んで名詞をリスト化する
Adj.csv を読み込んで、原形だけ残してリスト化する

でしょうか。

投稿2023/08/07 23:46

quickquip

総合スコア11299

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問