UnicodeDecodeError в арабских наборах данных классификации Python

У меня есть арабские наборы данных для классификации с использованием Python; два каталога (отрицательный и положительный) в каталоге Twitter.

Я хочу использовать классы Python для классификации данных. Когда я запускаю прикрепленный код, возникает эта ошибка:

> Файл "C:\Users\DEV2016\Anaconda2\lib\encodings\utf_8.py", строка 16, при декодировании возвращает codecs.utf_8_decode(ввод, ошибки, True)

UnicodeDecodeError: кодек utf8 не может декодировать байт 0xc7 в позиции 0: недопустимый байт продолжения

import sklearn.datasets
import sklearn.metrics
import sklearn.cross_validation
import sklearn.svm
import sklearn.naive_bayes
import sklearn.neighbors

dir_path = "E:\Twitter\Twitter"

# Loading files into memory
files = sklearn.datasets.load_files(dir_path)

# Calculating BOW
count_vector = sklearn.feature_extraction.text.CountVectorizer()
word_counts=count_vector.fit_transform(files.data)

# Calculating TFIDF
tf_transformer = sklearn.feature_extraction.text.TfidfTransformer(use_idf=True).fit(word_counts)
X = tf_transformer.transform(word_counts)

# Create classifier
# clf = sklearn.naive_bayes.MultinomialNB()
# clf = sklearn.svm.LinearSVC()
n_neighbors = 11
weights = 'distance'
clf = sklearn.neighbors.KNeighborsClassifier(n_neighbors, weights=weights)

# Test the classifier
# Train-test split
test_size=0.4
X_train, X_test, y_train, y_test = sklearn.cross_validation.train_test_split(X, files.target, test_size=test_size)

# Test classifier
clf.fit(X_train, y_train)
y_predicted = clf.predict(X_test)
print (sklearn.metrics.classification_report(y_test, y_predicted,
target_names=files.target_names))
print ('Confusion Matrix:')
print (sklearn.metrics.confusion_matrix(y_test, y_predicted))

Отслеживание

File "<ipython-input-19-8ea269fd9c3d>", line 1, in <module>
runfile('C:/Users/DEV2016/.spyder/clf.py', wdir='C:/Users/DEV2016/.spyder')

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
exec(compile(scripttext, filename, 'exec'), glob, loc)

File "C:/Users/DEV2016/.spyder/clf.py", line 18, in <module>
word_counts=count_vector.fit_transform(files.data)

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\sklearn\feature_extraction\text.py", line 869, in fit_transform
self.fixed_vocabulary_)

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\sklearn\feature_extraction\text.py", line 792, in _count_vocab
for feature in analyze(doc):

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\sklearn\feature_extraction\text.py", line 266, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)

File "C:\Users\DEV2016\Anaconda2\lib\site-
packages\sklearn\feature_extraction\text.py", line 116, in decode
doc = doc.decode(self.encoding, self.decode_error)

File "C:\Users\DEV2016\Anaconda2\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)

UnicodeDecodeError: 'utf8' codec can't decode byte 0xc7 in position 0:
invalid continuation byte

person Khalid    schedule 08.04.2018    source источник
comment
Пожалуйста, опубликуйте полную трассировку, она говорит нам, какая строка в вашем коде не удалась. Также поместите его в блок кода (кнопка {}) для удобочитаемости.   -  person tdelaney    schedule 09.04.2018
comment
Я изменил вопрос @tdelaney   -  person Khalid    schedule 09.04.2018
comment
Скорее всего, файлы не в кодировке utf-8. Как вы их получили? Вы можете написать простую программу, использующую codecs.open(blah, "r", encoding="utf-8").read(), и посмотреть, какие из них не работают. Тогда вы полностью удалили sklearn из уравнения.   -  person tdelaney    schedule 09.04.2018
comment
Обычно в Windows файлы сохраняются в текущей кодовой странице. Посмотрите, что говорят sys.getdefaultencoding() и sys.getfilesystemencoding(). Это может быть правильная кодировка для использования. Кстати, если это кодовая страница Windows, отличным решением будет наличие отдельного скрипта, нормализующего их в utf-8, а затем написание кода с использованием этой более разумной кодировки.   -  person tdelaney    schedule 09.04.2018


Ответы (1)


В данных Twitter, которые вы пытаетесь загрузить, есть символы, которые не распознаются utf-8. Попробуйте загрузить его с другими форматами кодирования, такими как

files = sklearn.datasets.load_files(dir_path, encoding="iso-8859-1")
person TYZ    schedule 10.04.2018