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