【发布时间】:2016-07-21 11:36:14
【问题描述】:
我是一个相当新的 Python 用户,我主要处理导入的文本文件,尤其是 csv,这让我处理起来很头疼。我试图阅读这样的文档:https://docs.python.org/2/howto/unicode.html 但我不明白所说的内容。我只是想要一些直截了当的解释。
例如,我想将从互联网导出的大量逐字标记为 csv 文件。我想使用 NLTK 的分词器来做到这一点。
这是我的代码:
with open('verbatim.csv', 'r') as csvfile:
reader = unicode_csv_reader(csvfile, dialect=csv.excel)
for data in reader:
tokens = nltk.word_tokenize(data)
当我对数据执行 print() 时,我会得到干净的文本。
但是当我使用tokenizer方法时,它返回以下错误:
'ascii' 编解码器无法解码位置 31 中的字节 0xe9:序数不在 范围(128)
看起来像是编码问题。我对文本进行的每一个小操作都会出现同样的问题。你能帮我解决这个问题吗?
【问题讨论】:
-
错误在哪里?阅读csv时?或者在标记时?我猜你正在使用 python 2?
-
你可以使用pypi.python.org/pypi/unicodecsv将csv替换为unicodecsv,完成:-)
-
是的,我使用的是 Python 2.7。每当我尝试使用 NLTK 时,都会出现该错误。例如,标记器将适用于前几行文本,但我想一旦有特殊字符(重音......)它就会崩溃
-
切换到 Python 3。众所周知,Python 2 不适合 NLP 任务; NLTK 从 3.0 版开始就很好地支持 Python 3。在 Python 3 中,
csv.reader接受编码 as shown in an answer to the duplicate target。