2014-09-01 6 views
0

Я получаю сообщение об ошибке:'utf8' кодирование с содержанием списка документов

UnicodeDecodeError: 'utf8' codec can't decode byte 0xba in position 1266: invalid start byte 

на линии

X_train = self.vectorizer.fit_transform(self.data_train.data) 

Так что я пытался кодировать данные, как это:

self.data_train.data = unicode(self.data_train.data, "utf-8") 

, который дает ошибка:

TypeError: coercing to Unicode: need string or buffer, list found 

Каков правильный способ кодирования текста здесь?

фрагмент кода:

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") 
+0

self.data_train.data.decode ('utf8') – Farhadix

+0

@Farhadix: akready попробовал, дайте ошибку 'TypeError: принуждение к Unicode: need строка или буфер, найденный список – user123

+0

'self.data_train.data = [i.decode ('utf-8') для i в файле self.data_train.dat a] 'вы можете попробовать это тоже – Nava

ответ

2

Вы претендуете unicode в список, но он работает на одной строке.

self.data_train.data = [s.decode("utf-8") for s in self.data_train.data] 

- правильный синтаксис; но это снова сломается, потому что строки недействительны UTF-8, как уже рассказывал scikit-learn.

Вы можете получить decode игнорировать ошибки, кодирующие по s.decode("utf-8", errors='ignore') или более легко, позволяя scikit учиться обращаться с этим:

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

(Хотя это может быть хорошей идеей, чтобы вернуться ваше предположение о том, что вход является UTF -8, если это не так, это может негативно повлиять на ваши результаты.)

Смежные вопросы