UnicodeDecodeError:“ascii”编解码器无法解码第13位的字节0xe2:序号不在范围内(128)

我正在使用NLTK对文本文件执行kmeans聚类,其中每一行都被视为一个文档。例如,我的文本文件如下所示:

属于手指死亡冲孔<br>
仓促<br>
迈克·哈斯蒂·沃尔斯·杰里科<br>
jägermeister规则<br>
规则乐队遵循表演jägermeister舞台<br>
方法

现在,我尝试运行的演示代码如下:

导入系统
进口numpy
从nltk.cluster导入KMeansClusterer、GAAClusterer、欧氏距离
导入nltk.corpus
从nltk导入装饰程序
导入nltk.stem
stemmer_func=nltk.stem.EnglishStemmer().stem
stopwords=set(nltk.corpus.stopwords.words(’english’))
@装潢师
def标准化单词(word):
返回词干分析器函数(word.lower())
def get_单词(标题):
words=set()
对于职务中的职务(职务):
对于title.split()中的单词:
添加(规范化单词)
退货清单(字)
@装潢师
def矢量(标题):
title\u components=[为title.split()中的单词规范化\u单词(单词)]
返回numpy.array([
title_组件中的单词,而不是stopwords中的单词
对于单词中的单词,]numpy.short)
如果uuuu name uuuuuu=’\uuuuuuu main\uuuuuuu’:
文件名=’example.txt’
如果len(sys.argv)==2:
filename=sys.argv[1]
打开(文件名)作为标题文件:
作业标题=[line.strip()表示标题文件中的行。readlines()]
单词=获得单词(工作头衔)
#聚类=KMeansClusterer(5,欧氏距离)
集群=砷化镓集群器(5)
cluster.cluster([job\u titles if title中的title的向量间隔(title)])
#注意:这是低效的,cluster.classify应该只是
#在对以前看不见的示例进行分类时调用!
分类示例=[
分类(向量间距(标题))用于职务标题中的标题
]
对于集群id,标题已排序(zip(已分类的示例、工作标题)):
打印群集id、标题

(也可在此处找到)

我收到的错误是:

回溯(最近一次呼叫最后一次):
文件“cluster_example.py”,第40行,在
单词=获得单词(工作头衔)
文件“cluster_example.py”,第20行,用get_words表示
添加(规范化单词)
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/nltk/decorators.py”,第183行,在memoize中
结果=func(*args)
文件“cluster_example.py”,第14行,在normalize_word中
返回词干分析器函数(word.lower())
文件“/usr/local/lib/python2.7/dist-packages/nltk/stem/snowball.py”,第694行,在stem中
word=(word.replace(u“\u2019”,u“\x27”)
UnicodeDecodeError:“ascii”编解码器无法解码第13位的字节0xe2:序号不在范围内(128)

这里发生了什么

正在将文件读取为一组strs,但它应该是unicodes。Python尝试隐式转换,但失败。更改:

job\u titles=[line.strip()用于title\u file.readlines()中的行]

要将strs显式解码为unicode(此处假设为UTF-8):

作业标题=[line.decode('utf-8').strip()用于标题文件中的行。readlines()]

也可以通过导入编解码器模块并使用编解码器.open而不是内置的open来解决此问题

发表评论