gpt4 book ai didi

终端中的 Python NLTK 雪球词干分析器 UnicodeDecodeError 而不是 Eclipse PyDev

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:59 26 4
gpt4 key购买 nike

我正在使用雪球词干提取器来提取文档中的单词,如下面的代码片段所示。

    stemmer = EnglishStemmer()
# Stem, lowercase, substitute all punctuations, remove stopwords.
attribute_names = [stemmer.stem(token.lower()) for token in wordpunct_tokenize(re.sub('[%s]' % re.escape(string.punctuation), '', doc)) if token.lower() not in stopwords.words('english')]

当我在 Eclipse 中使用 PyDev 对文档运行此程序时,我没有收到任何错误。当我在终端 (Mac OSX) 中运行它时,我收到以下错误。有人可以帮忙吗?

File "data_processing.py", line 171, in __filter__
attribute_names = [stemmer.stem(token.lower()) for token in wordpunct_tokenize(re.sub('[%s]' % re.escape(string.punctuation), '', doc)) if token.lower() not in stopwords.words('english')]

File "7.3/lib/python2.7/site-packages/nltk-2.0.4-py2.7.egg/nltk/stem/snowball.py", line 694, in stem
word = (word.replace(u"\u2019", u"\x27")

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 7: ordinal not in range(128)

最佳答案

这在 PyDev 中有效,因为它将 Python 本身配置为在控制台编码(通常是 UTF-8)中工作。

如果您转到运行配置(运行 > 运行配置),然后在“通用”选项卡上说您希望编码为 ascii,则可以在 PyDev 中重现相同的错误。

发生这种情况是因为您的单词是一个字符串,而您要用 unicode 字符替换。

我希望下面的代码对您有所启发:

这都是考虑ascii作为默认编码:

>>> 'íã'.replace(u"\u2019", u"\x27")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 0: ordinal not in range(128)

但是,如果您全部使用 unicode 进行操作,它就可以工作(如果您希望处理字符串而不是 unicode,则可能需要在之后将其编码回您期望的编码)。

>>> u'íã'.replace(u"\u2019", u"\x27")
u'\xed\xe3'

所以,你可以在替换之前让你的字符串成为unicode

>>> 'íã'.decode('cp850').replace(u"\u2019", u"\x27")
u'\xed\xe3'

或者你可以编码替换字符

>>> 'íã'.replace(u"\u2019".encode('utf-8'), u"\x27".encode('utf-8'))
'\xa1\xc6'

但是请注意,您必须知道您在任何地方使用的实际编码是什么(因此,尽管我在示例中使用的是 cp850 或 utf-8,但它可能与您必须使用的编码不同)

关于终端中的 Python NLTK 雪球词干分析器 UnicodeDecodeError 而不是 Eclipse PyDev,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com