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

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

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

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

Python

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

Q&A

解決済

2回答

2303閲覧

_pickle.UnpicklingError: invalid load key, '\x27'. というエラーについて【ネガポジ判定】

SmaSTATION

総合スコア29

Mecab

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

Python

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

0グッド

0クリップ

投稿2023/08/04 00:31

編集2023/08/04 06:09

実現したいこと

下記のサイトを参考にしてネガポジ判定を行いたいと考えています。
https://tetraup.com/feed/development/backend/nlp-train/
どうも、判定に必要な辞書の部分で詰まってしまい、どなたかご教授いただけますと幸いです。
(辞書の作り方は書いていないので、メモ帳で作りました...)←解決。

前提

一応辞書は作成し、アップロード済みです。
辞書の中身は以下です。

'私':'e', 'は':'e', 'オオカミ':'n', 'で':'e', 'は':'e', 'ない':'n', 'ので':'e', '信じ':'p', 'て':'e', 'ください':'e'

⇒テキストからJSONに書き改め済み。

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

Traceback (most recent call last): File "d:/selfpy/mining/m01.py", line 6, in <module> word_dic=json.load(f) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 293, in load return loads(fp.read(), File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 357, in loads return _default_decoder.decode(s) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 340, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 10) word_dic=json.load(f) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 293, in load return loads(fp.read(), File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 357, in loads return _default_decoder.decode(s) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 340, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 10)PS D:\selfpy>

該当のソースコード

Python

1import json 2import MeCab 3 4# 辞書読み込む 5decorder=json.JSONDecoder() 6with open("word_dic.json",mode="r",encoding="utf-8_sig") as f: 7 word_dic=json.load(f) 8#MeCab準備 9tagger = MeCab.Tagger() 10 11#ファイル読み込む 12texts= ["私はオオカミではないので信じてください。"] 13for text in texts: 14 print("評価するテキスト:", text) 15 point = 0 16# MeCab 17 s = tagger.parse(text) 18 19# スペースで分割して品詞側を取得 20 for line in s.split("\n"): 21# EOSだったらループを抜ける 22 if line == "EOS": break 23# さらにカンマで分割 24 params = line.split("\t")[1].split(",") 25# 品詞を取得 26 hinshi = params[0] 27# 単語の原型を取得 28 word = params[6] 29 if not (hinshi in ['名詞', '動詞', '形容詞']): continue 30# 取得した単語の原型が辞書に含まれているか調べて点数をつける 31 if word in word_dic: 32 negaposi = word_dic[word] 33 if negaposi == 'n': 34 point -= 1 35 elif negaposi == 'p': 36 point += 1 37 else: 38 point += 0 39 print(word, negaposi) 40 41 print("score:", point) 42 print("形態素解析結果") 43 print(s)

試したこと

  • 普通のJSONファイルの読み込みだとエラーが出たので、”utf-8”に設定
  • 以下作成したJSONファイル

JSON

1{"私":"e"} 2{"は":"e"} 3{"オオカミ":"n"} 4{"で":"e"} 5{"ない":"e"} 6{"ので":"e"} 7{"信じ":"p"} 8{"て":"e"} 9{"ください":"e"}

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

些細なことでも構いませんので、𠮟咤激励お待ちしております...
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

他の回答にもありますが、書いてある辞書データの構造とプログラムで 読んでいるデータの構造が異なっています。一方はテキストで一方はpickleデータです。
参考にしているサイトの情報が不足しているということです。
作者に問い合わせて対処してもらうのがベストでしょうが、古い記事なので、対応してもらえないかもしれません。

自力でなんとかするのであれば、以下の 、読んでいるところと使っているところから見て、単にそのまま、作った辞書データをpythonの辞書として読みこめばよさそうです。

python

1word_dic = pickle.load(open("word_dic.pickle.txt", "rb")) 2 3 if word in word_dic: 4 negaposi = word_dic[word] 5 if negaposi == 'n': 6 point -= 1 7 elif negaposi == 'p': 8 point += 1 9 else: 10 point += 0 11 print(word, negaposi)

辞書の中身は以下です。
'私':'e', 'は':'e', 'オオカミ':'n'

とある形式だと、辞書として読むのが難しいので、他の回答にあるように、JSON形式に変更して読むのが楽じゃないかと思います。

読むjsonファイルはこんな感じ。 word_dic.jsonとしましょう。

json

1{ 2 "私": "e", 3 "は": "e", 4 "オオカミ": "n" 5}

読むのはこんな感じ

python

1import json 2 3with open('word_dic.json', mode='r') as wd: 4 word_dic = json.load(wd)

投稿2023/08/04 03:11

TakaiY

総合スコア14307

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

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

SmaSTATION

2023/08/04 06:11

ご回答ありがとうございます。 JSONファイルに変更して、読み込むタイミングでJSON側のエラーで怒られてしまいました... (json.JSONDecoder()の付けたしとendordingの設定をおこなった段階です...)
TakaiY

2023/08/04 08:55

encodingはファイルに合せて必要ですが、JSONDecodeが必要な理由がわかりません。
TakaiY

2023/08/04 08:56

どのようなエラーが出たのでしょう?
SmaSTATION

2023/08/05 00:52

教えていただいた通りにやると、 File "d:/selfpy/mining/m01.py", line 6, in <module> word_dic = json.load(wd) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 293, in load return loads(fp.read(), File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\__init__.py", line 357, in loads return _default_decoder.decode(s) File "C:\Users\81904\AppData\Local\Programs\Python\Python38-32\lib\json\decoder.py", line 340, in decode raise JSONDecodeError("Extra data", s, end) json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 10) というようなエラーでした...
SmaSTATION

2023/08/05 01:03

すみません、なんとか読み込めました! ありがとうございます。 (JSONファイルを配列形式にしたらいけました...)
TakaiY

2023/08/05 02:46

> JSONファイルを配列形式にしたらいけました そうなんですね。 ちょっと解せないですね。 前のコメントのエラーは、JSONの書式がおかしいというエラーです。 たとえば全角の空白が入っていたなど。 いずれにしても、うまくいったのであれば、よかったです。
guest

0

python

1word_dic = pickle.load(open("word_dic.pickle.txt", "rb"))

pickle.load() で読み込めるのは pickle.dump() などで生成したバイナリだけです。手書きのデータは読めません。

手書きのデータを扱いたいのなら、データを JSON にして json.load() などで読み込むのが良いでしょう。

投稿2023/08/04 00:57

int32_t

総合スコア21929

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問