UnicodeDecodeError:'ascii'编解码器无法解码位置13中的字节0xe2:序号不在范围内(128)
我正在使用NLTK在我的文本文件上执行kmeans聚类,其中每行被认为是一个文档。 所以例如,我的文本文件是这样的:
属于手指死亡之拳
匆
迈克仓促的墙壁杰里科
jägermeister规则
规则乐队跟随表演jägermeister阶段
途径
现在我试图运行的演示代码是这样的: 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)
这里发生了什么?
该文件正在被读作一堆str
,但它应该是unicode
s。 Python试图隐式转换,但失败。 更改:
job_titles = [line.strip() for line in title_file.readlines()]
显式解码str
到unicode
(这里假设为UTF-8):
job_titles = [line.decode('utf-8').strip() for line in title_file.readlines()]
这也可以通过导入codecs
模块并使用codecs.open
而不是内置的open
。
你也可以试试这个:
import sys reload(sys) sys.setdefaultencoding('utf8')