NLTK получает доступ к локальным файлам; Ошибка UnicodeDecodeError: кодек ‘charmap’ не может декодировать байт 0x9d в позиции 834: символ соответствует

#python-3.x #cygwin #nltk #python-unicode

Вопрос:

Это мой первый пост, и у меня практически нет опыта, но мне нравится учиться. Я надеюсь, что этот пост понятен, но, пожалуйста, не стесняйтесь спрашивать о более подробной информации.

Я работаю с Cygwin и иногда использую ПРОСТОЙ Python 3.9 для выполнения некоторых задач для университета. В настоящее время я пытаюсь использовать модуль NLTK и маркировать текст.

Первое, что я делаю, это открываю python (через Cygwin или непосредственно из холостого хода, но я в основном использую Cygwin).

 >>>import nltk
>>> from nltk import word_tokenize
>>> from nltk.book import *
 

в этот момент для меня будет загружена библиотека с различными книгами, к которым я смогу получить доступ. Однако на самом деле они мне не нужны, потому что мне нужен доступ к локальному файлу в папке под названием «Оттенок».

Команда, которую мне удалось выполнить, но которую я не могу воспроизвести, — это

 >>>Rev = open("/Users/acer/OneDrive - Università di Pavia/Desktop/Tint/amazon_jamon.no_alterations.txt", "r").read()
 

В прошлом первой проблемой, с которой я столкнулся, было использование команды escape из-за обратной косой черты, но когда я исправил это на обычные косые черты, это сработало. Теперь, когда я пытаюсь получить доступ к аналогичному файлу .txt в той же папке «Оттенок», с помощью этой команды я получаю другую ошибку.

 >>> desc = open("/Users/acer/OneDrive - Università di Pavia/Desktop/Tint/salame_
P.txt", "r").read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:PythonPython 395libencodingscp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 834: char
acter maps to <undefined>
 

Комментарии:

1. python, который вы используете, не является Cygwin. Какой тип кодирования salame_P.txt используется ? Вы можете использовать cygwin iconv для скрытого различного кодирования

2. Я не уверен, что понимаю. Не могли бы вы помочь? @matzeri Что я могу сделать, чтобы узнать, какой тип кодирования «salame_P.txt» это использование? Мой учитель и инструкторы просто дают нам код, ничего не объясняя. Я не понимаю, почему я не могу повторить то, что я сделал, хотя я сделал именно этот процесс.

3. Python предполагает, что файл является файлом Windows ASCII. Вот что cp1252.py это значит. Измените значение открыть на desc = open(file, "r", encoding="utf8") , чтобы сообщить python, что файл содержит символы Юникода.

4. Спасибо. Это сработало. Все еще не уверен, почему мне не нужно было создавать эту спецификацию для аналогичного файла .txt, но, по крайней мере, теперь я знаю, как обрабатывать ошибки кодирования. Я бы проголосовал за ваш комментарий, но сайт, похоже, не позволяет мне это сделать.