はじめに
現在、機械学習を学習している初心者です。kaggleにて先人のコードを模写することでその方法を学んでいた時に起きたエラーとその解決方法を備忘としてまとめます。
概要としては、Windowsの場合はデフォルトでCP932へ変換しようとします。しかし、CP932に変換出来ない場合は、UnicodeEncodeError例外が発生するため、その対処方法をまとめました。
参考url
https://qiita.com/Yuu94/items/9ffdfcb2c26d6b33792e
環境
Windows 10 Home
Python 3.7.4.
問題点と解決方法
embedding_dict={}
with open('xxxxx.txt','r') as f:
for line in f:
values=line.split()
word = values[0]
vectors=np.asarray(values[1:],'float32')
embedding_dict[word]=vectors
f.close()
UnicodeDecodeError: 'cp932' codec can't decode byte 0x93 in position 5456: illegal multibyte sequence
と出ました。
これは、Windows環境を使用している場合、デフォルトはcp932でコーディングされるとのこと。その場合、変換できないコードが含まれている場合はエラーが出ます。今回具体的なコードは不明ですが、kaggleにて海外の方のコードを模写しているためと思われます。
従って、プログラムにUTF-8でコーディングする様に記述を加えます。
embedding_dict={}
with open('xxxxx.txt','r',encoding="utf-8") as f:
for line in f:
values=line.split()
word = values[0]
vectors=np.asarray(values[1:],'float32')
embedding_dict[word]=vectors
f.close()
encoding="utf-8"を加えるだけ、ですがこれで解決しました。
エラー自体はWindows特有の課題であることやコーディングのされかたについて学ぶことができました。