Подтвердить что ты не робот

Python: UnicodeDecodeError: кодек 'utf8' не может декодировать байт

Я читаю кучу RTF файлов в строки python. В некоторых текстах я получаю эту ошибку:

Traceback (most recent call last):
  File "11.08.py", line 47, in <module>
    X = vectorizer.fit_transform(texts)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
716, in fit_transform
    X = super(TfidfVectorizer, self).fit_transform(raw_documents)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
398, in fit_transform
    term_count_current = Counter(analyze(doc))
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
313, in <lambda>
    tokenize(preprocess(self.decode(doc))), stop_words)
  File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
224, in decode
    doc = doc.decode(self.charset, self.charset_error)
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 462: invalid
 start byte

Я пробовал:

  • Копирование и вставка текста файлов в новые файлы
  • сохранение файлов rtf в виде файлов txt
  • Откройте файлы txt в Notepad ++ и выберите "convert to utf-8", а также установите кодировку в utf-8
  • Открытие файлов с помощью Microsoft Word и сохранение их в качестве новых файлов

Ничего не работает. Любые идеи?

Вероятно, это не связано, но вот код, который вам интересно:

f = open(dir+location, "r")
doc = Rtf15Reader.read(f)
t = PlaintextWriter.write(doc).getvalue()
texts.append(t)
f.close()
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')
X = vectorizer.fit_transform(texts)     
4b9b3361

Ответ 1

как я сказал в списке рассылки, проще всего использовать параметр charset_error и установить его на ignore. Если файл на самом деле является utf-16, вы также можете установить кодировку utf-16 в Vectorizer. См. docs.

Ответ 2

Это решит ваши проблемы:

import codecs

f = codecs.open(dir+location, 'r', encoding='utf-8')
txt = f.read()

с этого момента txt находится в формате Unicode, и вы можете использовать его везде в своем коде.

Если вы хотите сгенерировать файлы UTF-8 после обработки:

f.write(txt.encode('utf-8'))

Ответ 3

Вы можете сбросить строки файла csv в json файле без какой-либо ошибки кодирования следующим образом:

json.dump(row,jsonfile, encoding="ISO-8859-1")

Ответ 4

Сохранить эту строку:

vectorizer = TfidfVectorizer(encoding='latin-1',sublinear_tf=True, max_df=0.5, stop_words='english')

кодировка = 'латинский-1' работал для меня.