2017-04-16 10 views
0

파일을 읽으려고 시도했는데 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 

답변

0

오류 메시지가 캐릭터에 문제가되는 것은 해결 방법으로 I는 입력 문자열의 문자 - 문자에 의해 그 문자를 가지고, 따라서 127보다 큰 값 (127) (예 : C & 127)을 넣어 그 캐릭터를 다시 문자열로. 다른 말로하면 문자열을 다시 작성하고 모든 문자를 127 ascii로 변환 한 다음 해당 입력 문자열을 처리하도록 진행하십시오. 이것은 내 문제에 대한 해결책입니다.