2013-09-06 4 views
77

각 줄이 문서로 간주되는 텍스트 파일에서 NLTK를 사용하여 kmeans 클러스터링을 수행합니다. 이제
성급한
마이크 성급한 벽
예거 마이스터 규칙
규칙 대역을 여리고 UnicodeDecodeError : 'ascii'코덱은 13 진수 0xe2를 디코딩 할 수 없습니다. 서수가 범위 내에 없습니다 (128)

손가락 죽음의 펀치 속해

가 수행 팔로우 예거 마이스터 단계
접근

: 그래서 예를 들어, 내 텍스트 파일은 다음과 같은 것입니다 실행하려고하는 데모 코드는 다음과 같습니다. https://gist.github.com/xim/1279283

오류는 다음과 같습니다.

Traceback (most recent call last): 
File "cluster_example.py", line 40, in 
words = get_words(job_titles) 
File "cluster_example.py", line 20, in get_words 
words.add(normalize_word(word)) 
File "", line 1, in 
File "/usr/local/lib/python2.7/dist-packages/nltk/decorators.py", line 183, in memoize 
result = func(*args) 
File "cluster_example.py", line 14, in normalize_word 
return stemmer_func(word.lower()) 
File "/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py", line 694, in stem 
word = (word.replace(u"\u2019", u"\x27") 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 13: ordinal not in range(128) 

여기 무슨 일입니까?

답변

89

파일을 str 묶음으로 읽지 만 unicode이어야합니다. 파이썬은 암시 적으로 변환하려고 시도하지만 실패합니다. 변경 :

job_titles = [line.strip() for line in title_file.readlines()] 

명시 적으로 unicodestr들 디코딩 (여기 가정 UTF-8) :

job_titles = [line.decode('utf-8').strip() for line in title_file.readlines()] 

또한 open 내장보다는 the codecs module을 가져오고 codecs.open를 사용하여 해결할 수 있습니다 .

+1

이 line.decode ('utf-8'). strip(). lower(). split()도 동일한 오류가 발생합니다. .deocode ('utf-8')를 추가했습니다. –

15

당신이 시도 할 수 있습니다 :

import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 
+0

이것의 의미는 무엇입니까? 그것은이 파일에 적용 할 수있는 것이 아니라 세계적으로 유용한 것 같습니다. – simeg

+1

위의 코드는 Python 3에서 사용되지 않습니다. – gented

1

당신은 job_titles 문자열을 사용하기 전에이 작업을 시도 할 수 있습니다 :

source = unicode(job_titles, 'utf-8') 
0

은 나를 위해 터미널 인코딩에 문제가 있었다.

export LC_CTYPE=en_US.UTF-8 

나중에 .bashrc에 다시로드하는 것을 잊지 마세요 :

source ~/.bashrc 
1

이 나를 위해 잘 작동 추가 UTF-8의 .bashrc에 문제를 해결했다.

f = open(file_path, 'r+', encoding="utf-8") 

당신은 인코딩 형식을 보장하기 위해 세 번째 매개 변수 인코딩를 추가 할 수 있습니다

주 'UTF-8'작품 Python3에서 발견이 방법은, 내가 Python2.7에서 그것을 시도하지 않습니다.

관련 문제