手动保存的文本文件与Python编解码器的区别:Lemur格式错误的文档

时间:2015-04-07 10:58:48

标签: python utf-8 save text-files lemur

我正在使用Python编解码器将一些UTF-8文本写入文件

#-*-coding:utf-8-*-
import codecs

filename = 'afile'
with codecs.open(filename, encoding='utf-8', mode='w') as fw :
    fw.write('<DOC>\n<DOCNO>')
    fw.write(filename)
    fw.write('</DOCNO>\n<TEXT>\n')        
    fw.write('কাজ'.decode('utf-8'))
    fw.write('\n</TEXT>\n</DOC>')

现在如果我在带有这个文件的目录上运行Lemur(http://www.lemurproject.org/),Lemur告诉我文档“格式错误”。

0:00: Opened /home/userA/Documents/test_corpus/afile 
0:00: Error in /home/userA/Documents/test_corpus/afile : ../src/TaggedDocumentIterator.cpp(213): Malformed document: /home/userA/Documents/test_corpus/afile

但是,如果我在gedit中打开文件,添加一个随机字符并将其删除(以便文件内容保持不变),然后保存文件,那么如果我运行Lemur,它运行完美。

0:00: Opened /home/userA/Documents/test_corpus/afile
0:00: Documents parsed: 1 Documents indexed: 1
0:00: Closed /home/userA/Documents/test_corpus/afile

因此,Python和gedit保存文本文件的方式有所不同,因为Lemur在两种不同的场景中的响应方式不同吗?

1 个答案:

答案 0 :(得分:2)

您正在最后一行编写没有换行符的输出文件:

fw.write('\n</TEXT>\n</DOC>')

GEdit可能会在保存时添加额外换行符。添加额外的\n

fw.write('\n</TEXT>\n</DOC>\n')