Найти способ работы с портером stemmer и кодировкой в ​​python

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

    tokens=preprocessTokens(line)
    File "/home/fl/git/KNN/preprocessDoc.py", line 20, in preprocessTokens
line=line+' '+ps.stem(w)
    File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 664, in stem
    stem = self._step1a(stem)
    File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 289, in _step1a
   if word.endswith('ies') and len(word) == 4:
   UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)

Чтобы решить эту проблему, добавьте эти две строки в мой код и затем проигнорируйте

reload(sys)  
sys.setdefaultencoding('ISO-8859-15')

Но я получил следующую ошибку для некоторых файлов. Затем я пытаюсь изменить кодировку на 'utf-8' и получаю ту же ошибку.

tokens=preprocessTokens(line.encode('ascii',errors='ignore'))
  File "/home/fl/git/KNN/preprocessDoc.py", line 20, in preprocessTokens
    line=line+' '+ps.stem(w)
  File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 665, in stem
    stem = self._step1b(stem)
  File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 376, in _step1b
    lambda stem: (self._measure(stem) == 1 and
  File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 258, in _apply_rule_list
    if suffix == '*d' and self._ends_double_consonant(word):
  File "/usr/local/lib/python2.7/dist-packages/nltk/stem/porter.py", line 214, in _ends_double_consonant
    word[-1] == word[-2] and
IndexError: string index out of range

1 ответ

В сообщении об ошибке возникают проблемы со значениями символов больше 127. Таким образом, в качестве обходного пути я беру строку за символом входную строку и символ И с 127 (то есть: c & 127), а затем помещаю этот символ обратно в строку. Другими словами, перестройте строку и заставьте переводить каждый символ в 127 ascii, затем перейдите к обработке этой входной строки. Это решение, которое я нашел для своей проблемы.

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