2016-07-29 11 views
0

にファイルをロードしている間、私はこの実行している:UnicodeDecodeErrorのpython

news_train = load_mlcomp('20news-18828', 'train') 
vectorizer = TfidfVectorizer(encoding='latin1') 
X_train = vectorizer.fit_transform((open(f, errors='ignore').read() 
           for f in news_train.filenames)) 

を、それはUnicodeDecodeErrorを得た。 'UTF-8' コーデックは位置39でバイト0xe4をデコードすることはできません:無効な継続のバイトを。 open()関数で呼び出されます。

news_train.filenamesを確認しました。それは:

array(['/Users/juby/Downloads/mlcomp/379/train/sci.med/12836-58920', 
     ..., '/Users/juby/Downloads/mlcomp/379/train/sci.space/14129-61228'], 
     dtype='<U74') 

パスが正しいように見えます。それはdtypeか私の環境(私はMac OSX 10.11です)かもしれませんが、何度も試してみると修正できません。ありがとうございました!!!それはhttp://scikit-learn.org/stable/auto_examples/text/mlcomp_sparse_document_classification.html#example-text-mlcomp-sparse-document-classification-py

+1

Python 3? 'open(f、mode = 'rb'、errors = 'ignore')を試してください。 –

+0

はい、Python3.5です。私はそれをしましたが、私は "バイナリモードはエラー引数を取っていない"を得た – Denly

+0

ちょうどエラーを削除する= '無視する'トリックを行うことができます。または自分で投稿した回答。 –

答えて

0

まあ、私は解決策を見つけたからMLのチュートリアルです

p.s。使用する

​​

私はなぜそれが私のMacでも起こるのか分かりません。それを知りたい。

0

実際にはPython 3+では、open関数が開き、ファイルの内容をデコードするデフォルトモード'r'でファイルを読み込みます(ほとんどのプラットフォームでは、UTF-8)。ファイルはlatin1でエンコードされているため、UTF-8を使用してデコードするとUnicodeDecodeErrorが発生する可能性があります。ソリューションはバイナリモード('rb')でファイルを開くか、または正しいエンコーディング(encoding="latin1")を指定しています。

open(f, 'rb').read() # returns `byte` rather than `str` 
# or, 
open(f, encoding='latin1').read() # returns latin1 decoded `str`