実現したいこと
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に変えてみたりしました。
エラーメッセージは省略せず、Trace backの行からすべて載せてください。エラー発生場所など、重要な情報が入てちます。
回答はここにするのでなく、質問を編集してください。
内容を更新しました!助言ありがようございます🙇♂️
sys.dic というファイルは 本当にeuc-jp形式のファイルなのでしょうか?
> euc-jpをutf-8に変えてみたりしました。
当てずっぽうで変えてませんよね?正しいエンコーディングが不明ということでしょうか?
あてずっぽうですね...。
正しいエンコーディングが不明です
mecabを使ってみた記事を参考にしてエンコーディングの形式を当てはめている感じです
Python3で合ってますか? Python3だと、mecabのPythonバインディングから扱えるのは **辞書のエンコーディングが** utf-8 の場合だけです(おそらく)。utf-8 ではない辞書だとPython側からどう指定しても使えないと思われます。
なので、その辞書はなにものなのか? (エンコーディングはなにか? どうインストールしたものか?) が最重要ポイントです。
mecab本体があるなら、コマンドで
mecab -D -d /usr/local/lib/mecab/dic/ipadic
した結果をとりあえず載せるのがいいんじゃないでしょうか
> mecabを使ってみた記事を参考にしてエンコーディングの形式を当てはめている感じです
他の人が書いたコードを流用する場合、環境を同じにしないと動作しないことがあるかと思います。
sys.dicはバイナリファイルなのでテキストとしては開けません。
ほか、そのソースコード各行で何をしたいのか意図が不明ですので
何をしたいのかを具体的に説明ください。
なるほど
> ランダムに"形容詞" + "名詞" を出力したい
という目的に対して
> mecabを使って
というのが、そもそも手段として完全におかしいですね。
もしもsys.dicがmecabの辞書あたりからコピーしてきたファイルなら、openで開いているのもそもそも完全に間違っている、と。
勉強不足で申し訳ありません🙇♂️
mecabのipadicの中身から名詞分類されているものと形容詞分類されているものをリスト化したいです....。

回答2件
あなたの回答
tips
プレビュー