我有以下功能:
def storeTaggedCorpus(corpus, filename):
corpusFile = codecs.open(filename, mode = 'w', encoding = 'utf-8')
for token in corpus:
tagged_token = '/'.join(str for str in token)
tagged_token = tagged_token.decode('ISO-8859-1')
tagged_token = tagged_token.encode('utf-8')
corpusFile.write(tagged_token)
corpusFile.write(u"\n")
corpusFile.close()
当我执行它时,我得到了以下错误:
(...) in storeTaggedCorpus
corpusFile.write(tagged_token)
File "c:\Python26\lib\codecs.py", line 691, in write
return self.writer.write(data)
File "c:\Python26\lib\codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
所以我去调试它,发现创建的文件被编码为ANSI,而不是在corpusFile = codecs.open(filename, mode = 'w', encoding = 'utf-8')
中声明的UTF-8。如果
corpusFile.write(tagged_token)
被删除,这个函数(显然)将工作,文件将被编码为ANSI。如果我删除tagged_token = tagged_token.encode('utf-8')
,它也可以工作,但是生成的文件将具有编码“ANSI as UTF-8”(???)拉丁字母也会被弄乱。因为我正在分析pt-br文本,这是不可接受的。
我相信如果用UTF-8打开的话,一切都会好起来的,但是我不能让它工作。我在网上搜索过,但是我发现的关于Python/Unicode的所有内容都涉及到其他一些东西……所以为什么这个文件总是以ANSI结尾?我在Windows 7 x64中使用Python 2.6,这些文件编码是从Notepad++通知的。
corpus
参数我不知道corpus
字符串的编码。它是由PlaintextCorpusReader.tag()
方法从NLTK生成的。根据Notepad++,原始的语料库文件是用UTF-8编码的。这个tagged_token.decode('ISO-8859-1')
只是一个猜测。我试着把它解码成cp1252,从ISO-8859-1得到了同样的损坏字符。
目前没有回答
相关问题 更多 >
编程相关推荐