UnicodeDecodeError: кодек "utf-8" не может декодировать байт 0x80

Есть много подобных вопросов, и я попробовал каждое возможное решение, но, кажется, не могу решить его. Это мой код, и я работаю над распознаванием имен с помощью Stanford Tagger.

from nltk.tag import StanfordNERTagger
st = StanfordNERTagger('stanford-ner\classifiers\english.all.3class.distsim.crf.ser.gz',
                   'stanford-ner\stanford-ner.jar', encoding='utf-8')
tuple_list = st.tag("Please pay €94 million.".split())
print(tuple_list)

Это ошибка, которую я получаю.

Traceback (most recent call last):
File "C:/Users/Dell/PycharmProjects/CSSOP/ner2.py", line 4, in <module>
tuple_list = st.tag("He was the subject of the most expensive association football transfer when he moved from Manchester United to Real Madrid in 2009 in a transfer worth €94 million ($132 million).".split())
File "C:\ProgramData\Anaconda3\lib\site-packages\nltk\tag\stanford.py", line 71, in tag
return sum(self.tag_sents([tokens]), []) 
File "C:\ProgramData\Anaconda3\lib\site-packages\nltk\tag\stanford.py", line 95, in tag_sents
stanpos_output = stanpos_output.decode(encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 247: invalid start byte

Изменить: Это не проблема кодировки открытия файла, как указано в другом подобном вопросе.

1 ответ

Вы получаете ошибку декодирования, когда nltkСтэнфордская обертка пытается прочитать обратно в выводе Стэнфордского распознавателя (который является Java-программой). Очевидно, что распознаватель сумел создать недействительный utf-8 файл. Очевидно, он не проверяет данные, которые вы передаете, до того, как записывает их, поэтому проблема обнаруживается только тогда, когда Python пытается прочитать их обратно.

Теперь, в самом верху этой таблицы вы увидите, что 0x80 Вот как кодовая страница Windows 1252 кодирует символ евро. Смысл ясен: ваш источник Python использует кодировку Windows 1252, так что именно это содержит ваш строковый литерал. Правильным решением здесь было бы переключить ваш редактор на использование UTF-8 и исправить кодировку вашей программы.

Такое поведение будет иметь смысл, если вы используете Python 2; но ваш фрагмент выглядит как Python 3 (функциональная форма print), поэтому, пожалуйста, уточните, прежде чем я решу альтернативное решение.

Другие вопросы по тегам