UnicodeDecodeError:'utf8'编解码器无法解码位置1266中的字节0xba:无效的起始字节

时间:2014-09-01 06:14:31

标签: python utf-8 scikit-learn

我正在尝试使用scikit训练一些文本数据。在其他PC上使用相同的代码没有任何错误,但在我的系统上它给出错误:

File "/root/Desktop/karim/svn/questo-anso/v5/trials/classify/domain_detection_final/test_classifier_temp.py", line 130, in trainClassifier
    X_train = self.vectorizer.fit_transform(self.data_train.data)
  File "/root/Desktop/karim/software/scikit-learn-0.15.1/sklearn/feature_extraction/text.py", line 1270, in fit_transform
    X = super(TfidfVectorizer, self).fit_transform(raw_documents)
  File "/root/Desktop/karim/software/scikit-learn-0.15.1/sklearn/feature_extraction/text.py", line 808, in fit_transform
    vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary)
  File "/root/Desktop/karim/software/scikit-learn-0.15.1/sklearn/feature_extraction/text.py", line 741, in _count_vocab
    for feature in analyze(doc):
  File "/root/Desktop/karim/software/scikit-learn-0.15.1/sklearn/feature_extraction/text.py", line 233, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)
  File "/root/Desktop/karim/software/scikit-learn-0.15.1/sklearn/feature_extraction/text.py", line 111, in decode
    doc = doc.decode(self.encoding, self.decode_error)
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xba in position 1266: invalid start byte

我已经检查了类似的线程,但没有帮助。

更新:

self.data_train = self.fetch_data(cache, subset='train')
if not os.path.exists(self.root_dir+"/autocreated/vectorizer.txt"):
                self.vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,
                                                 stop_words='english')
                start_time = time()
                print("Transforming the dataset")
                X_train = self.vectorizer.fit_transform(self.data_train.data)  // Error is here
                joblib.dump(self.vectorizer, self.root_dir+"/autocreated/vectorizer.txt")

2 个答案:

答案 0 :(得分:4)

您的文件实际上是以ISO-8869-1编码的,而不是UTF-8。在重新编码之前,您需要正确解码它。

0xBA是ISO-8869-1中的numero signº)。

答案 1 :(得分:2)

处理培训数据时出现问题。解决我的问题的一件事是ignoring error使用decode_error='ignore',可能还有其他一些解决方案。

self.vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,stop_words='english',decode_error='ignore')