前提・実現したいこと
インターネットの記事を参考にし、その辞書にプラス学習を追加して極性辞書を作成しています。
言葉に点数をつけるプログラムを実行しているときのエラーについての質問です。
発生している問題・エラーメッセージ
#fasttextのモデルを読み込む部分を自分の学習させたモデルで実行するとエラーが発生します。
エラーメッセージ
ryohto@DESKTOP-SMEABJL:~/Python_code/zisyo$ python3 abc_keitaiso4.py
/home/ryohto/.local/lib/python3.8/site-packages/gensim/similarities/init.py:15: UserWarning: The gensim.similarities.levenshtein submodule is disabled, because the optional Levenshtein package https://pypi.org/project/python-Levenshtein/ is unavailable. Install Levenhstein (e.g. pip install python-Levenshtein
) to suppress this warning.
warnings.warn(msg)
Traceback (most recent call last):
File "abc_keitaiso4.py", line 11, in <module>
model =gensim.models.KeyedVectors.load_word2vec_format('model300.vec')
File "/home/ryohto/.local/lib/python3.8/site-packages/gensim/models/keyedvectors.py", line 1630, in load_word2vec_format
return _load_word2vec_format(
File "/home/ryohto/.local/lib/python3.8/site-packages/gensim/models/keyedvectors.py", line 1913, in _load_word2vec_format
_word2vec_read_text(fin, kv, counts, vocab_size, vector_size, datatype, unicode_errors, encoding)
File "/home/ryohto/.local/lib/python3.8/site-packages/gensim/models/keyedvectors.py", line 1818, in _word2vec_read_text
word, weights = _word2vec_line_to_vector(line, datatype, unicode_errors, encoding)
File "/home/ryohto/.local/lib/python3.8/site-packages/gensim/models/keyedvectors.py", line 1823, in _word2vec_line_to_vector
parts = utils.to_unicode(line.rstrip(), encoding=encoding, errors=unicode_errors).split(" ")
File "/home/ryohto/.local/lib/python3.8/site-packages/gensim/utils.py", line 365, in any2unicode
return str(text, encoding, errors=errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 0: invalid continuation byte
該当のソースコード
python
1import gensim 2import time 3import MeCab 4# 引数取得 5import sys 6from sys import argv 7import jaconv 8 9 10#fasttextのモデルを読み込む 11model =gensim.models.KeyedVectors.load_word2vec_format('model300.vec') 12 13 14#「非常にポジティブな単語」と「非常にネガティブな単語」を任意で指定 15posi_list = ['優れる', '良い','神','喜ぶ','褒める', 'めでたい','賢い','善い', '適す','天晴', 16 '祝う', '功績','賞','嬉しい','喜び','才知','徳', '才能','素晴らしい','芳しい','称える', 17 '適切','崇める','助ける','抜きんでる','清水','雄雄しい','仕合せ','幸い','吉兆','秀でる'] 18 19nega_list = ['悪い', 'クソ','死ぬ', '病気', '酷い', '罵る', '浸ける', '卑しい'] 20def posi_nega_score(x): 21 #ポジティブ度合いの判定 22 posi = [] 23 for i in posi_list: 24 try: 25 n = model.similarity(i, x) 26 posi.append(n) 27 except: 28 continue 29 try: 30 #posi_mean = sum(posi)/len(posi) 31 posi_mean=max(posi) 32 except: 33 posi_mean = 0 34 35 #ネガティブ度合いの判定 36 nega = [] 37 for i in nega_list: 38 try: 39 n = model.similarity(i, x) 40 nega.append(n) 41 except: 42 continue 43 try: 44 #nega_mean = sum(nega)/len(nega) 45 nega_mean=max(nega) 46 except: 47 nega_mean = 0 48 49 if abs(posi_mean-nega_mean)<0.05: 50 return [posi_mean,nega_mean] 51 if posi_mean > nega_mean: 52 return [posi_mean] 53 if nega_mean > posi_mean: 54 return [-nega_mean] 55 else: 56 return [0] 57 58row_no = 0 59#ファイル実行開始時刻を取得 60timestr = time.strftime('%Y%m%d-%H%M%S') 61 62#出力ファイル名 63out_file_name = "zisyo_" + timestr + ".txt" 64with open(out_file_name, 'w') as f: 65 fileobj = open("ochasen_20211109-171619.txt", "r", encoding="utf_8") 66 # line = fileobj.readlines() 67 for l in fileobj: 68 a = l.split(' ')[0] 69 tagger = MeCab.Tagger() 70 parse = tagger.parse(a) 71 b=parse.split('\t')[0] 72 c=parse.split('\t')[1] 73 if len(c.split(',')) < 8: 74 henkan = b 75 #print(b,henkan,c.split(',')[1],posi_nega_score(a)) 76 if len(posi_nega_score(a)) ==2: 77 with open('absdef15.txt', 'a') as f2: 78 s=b+':'+b+':'+c.split(',')[1]+':'+ str(posi_nega_score(a)[0])+':'+str(posi_nega_score(a)[1])+'\n' 79 f2.write(s) 80 continue 81 s=b+':'+henkan+':'+c.split(',')[1]+':'+str(posi_nega_score(a)[0])+'\n' 82 else: 83 henkan = jaconv.kata2hira(c.split(',')[7]) 84 if len(posi_nega_score(a)) ==2: 85 with open('absdef15.txt', 'a') as f2: 86 s=b+':'+henkan+':'+c.split(',')[0]+':'+ ' '+ str(posi_nega_score(a)[0])+','+str(posi_nega_score(a)[1])+'\n' 87 f2.write(s) 88 continue 89 #print(b,henkan,c.split(',')[0],posi_nega_score(a)) 90 s=b+':'+henkan+':'+c.split(',')[0]+':'+str(posi_nega_score(a)[0])+'\n' 91 92 f.write(s)
試したこと
ここに問題に対して試したことを記載してください。
エラーメッセージを確認し、文字コードが違うのではないかと思い、確認したところ、参考記事の文字コードと同じなのにもかかわらずエラーが発生しました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
参考記事
https://qiita.com/g-k/items/1b7c765fa6520297ca7c
こちらのネガティブ度合いの自動判定のプログラムを参考にしています。
使用しているmodel300のファイルの文字コードはUTF-8になっています。
あなたの回答
tips
プレビュー