Как определить, какой текст в корпусе содержит ошибку, сгенерированную набором NLTK в Python? - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь провести какой-то элементарный анализ корпуса с Python. Я получаю следующие сообщения об ошибках:

Traceback (most recent call last):
      File "<pyshell#28>", line 2, in <module>
      print(len(poems.words(f)), f)
      File "C:\Python38-32\lib\site-packages\nltk\corpus\reader\util.py", line 240, in __len__
      for tok in self.iterate_from(self._toknum[-1]):
      File "C:\Python38-32\lib\site-packages\nltk\corpus\reader\util.py", line 306, in iterate_from
      tokens = self.read_block(self._stream)
      File "C:\Python38-32\lib\site-packages\nltk\corpus\reader\plaintext.py", line 134, in _read_word_block
      words.extend(self._word_tokenizer.tokenize(stream.readline()))
      File "C:\Python38-32\lib\site-packages\nltk\data.py", line 1220, in readline
      new_chars = self._read(readsize)
      File "C:\Python38-32\lib\site-packages\nltk\data.py", line 1458, in _read
      chars, bytes_decoded = self._incr_decode(bytes)
      File "C:\Python38-32\lib\site-packages\nltk\data.py", line 1489, in _incr_decode
      return self.decode(bytes, 'strict')
      File "C:\Python38-32\lib\encodings\utf_8.py", line 16, in decode
      return codecs.utf_8_decode(input, errors, True)
      UnicodeDecodeError: 'utf-8' codec can't decode byte 0x97 in position 12: invalid start byte

Я предполагаю, что в одном из 202 текстовых файлов, которые я просматриваю, есть ошибка UTF.
Есть ли способ сообщить , из сообщений об ошибках, какой файл или файлы имеют проблему?

1 Ответ

0 голосов
/ 25 января 2020

Предполагая, что вы знаете идентификаторы файлов (пути ваших файлов корпусов), вы можете открыть их все с помощью encoding="utf-8"

Если вы не знаете путей, предполагая, что вы используете nltk Загрузчик корпусов, вы можете получить их, используя:

poems.fileids()

После этого для каждого файла в вашем списке файлов (например, fileids) вы можете попробовать:

for file_ in fileids:
    try:
        with open(file_, encoding="utf-8") a f_i:
            f_i.readlines()
    except:
        print("You got problems with the file: ", file_)

В любом случае, у вашего загрузчика также есть параметр с именем «кодировка», который вы можете использовать для правильного кодирования вашего корпуса. По умолчанию установлено значение «utf-8»

Подробнее здесь: nltk corpus loader

...