【问题标题】:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in positionUnicodeDecodeError: 'ascii' 编解码器无法在位置解码字节 0xc3
【发布时间】:2015-01-14 19:02:23
【问题描述】:

当我尝试从 nltk 中的标记文本中提取某些模式时,出现错误:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 79: ordinal not in range(128)。首先我没有这个错误,但我只有在安装了一些软件包后才得到它。

这是代码:

# -*- coding: utf-8 -*-
import codecs
import sys
import re
import sys
import nltk
from nltk.corpus import *

k =  nltk.corpus.brown.tagged_words('myfile')
for (w1,t1), (w2,t2) in nltk.bigrams(k):
    if t1 == 'NN' and  t2 == 'AJ':
       print w1, w2

这是代码的全部输出。

Traceback (most recent call last):
File "/home/fathi/egfe.py", line 12, in <module>
for (w1,t1), (w2,t2) in nltk.bigrams(k):
File "/usr/local/lib/python2.7/dist-packages/nltk/util.py", line 442, in bigrams
for item in ngrams(sequence, 2, **kwargs):
File "/usr/local/lib/python2.7/dist-packages/nltk/util.py", line 419, in ngrams
history.append(next(sequence))
File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/util.py", line 291, in  iterate_from
tokens = self.read_block(self._stream)
File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/tagged.py", line 241, in read_block
for para_str in self._para_block_reader(stream):
File "/usr/local/lib/python2.7/dist-packages/nltk/corpus/reader/util.py", line 564, in read_blankline_block
line = stream.readline()
File "/usr/local/lib/python2.7/dist-packages/nltk/data.py", line 1095, in readline
new_chars = self._read(readsize)
File "/usr/local/lib/python2.7/dist-packages/nltk/data.py", line 1322, in _read
chars, bytes_decoded = self._incr_decode(bytes)
File "/usr/local/lib/python2.7/dist-packages/nltk/data.py", line 1352, in _incr_decode
return self.decode(bytes, 'strict')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 79: ordinal not in range(128)

【问题讨论】:

  • tagged_wordsencoding 选项吗?如果没有,它是否允许您传递已打开的文件而不是文件名?
  • 还有,'myfile'的内容是什么?我的猜测是它们要么是 UTF-8,要么是您平台的默认字符集(例如,美国 Windows 的 cp1252);如果是这样,你必须以某种方式告诉 Python,否则它会假设它们在 sys.getdefaultencoding(),通常是 ASCII。
  • 感谢您发布完整的回溯。在这种情况下它可能没有多大帮助(尽管即使这样也可能是错误的;比我更了解 NLTK 的人可能会因此找到答案……),但这总是一个好主意。
  • 您的意思是两次导入 sys 吗?此外,如果您只需要 Brown,则无需导入所有语料库。尝试更新 NLTK,甚至更新到 alpha 版本。如果这不起作用,请尝试使用 textclean。
  • 你安装了哪个包

标签: python-2.7 nltk


【解决方案1】:

问题是ntlk版本与python版本不兼容,所以需要旧版本的nltk工具包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2017-11-05
    • 1970-01-01
    • 2012-05-20
    • 2014-09-06
    • 2014-08-19
    相关资源
    最近更新 更多