我用unicode格式的印地语文件集合。 我想在python中对整个文件执行句子分段,但file.read()似乎只读了几个单词
这是代码
## -*- coding: utf-8 -*-
from nltk.tokenize import sent_tokenize
import sys,textwrap
reload(sys) # Reload does the trick!
sys.setdefaultencoding('UTF8')
# import codecs
# text=""
# with codecs.open("input/AMCRAJ04.txt") as f1:
# text = f1.read().replace("\n",'')
# with codecs.open('out.txt','w') as f:
# f.write(text)
当你打印上面的内容时我得到了
['\xff\xfe&\tA\t8\t1\tM\t/\t>\t \x00&\t?', '8\t>\t \x00+\t>\t\x02\t$\tK\t!', 'G\t0\t \x00+\t>\t(\t@\t$\t+\t>\t\x02\t\x17\t>\t']
我无法在显示或文件中看到印地文字母。我正在使用Cygwin和Windows来运行代码。
句子分割有什么简单的方法吗? 应该将文件完全读入内存吗?
答案 0 :(得分:1)
嗯,前两个字节``fffe`表示输入文件编码为utf16 little endian而不是utf8。因为UTF-16(或UCS-2)编码的文本文件通常以字节顺序标记(BOM)开头,这是一个unicode字符U + FEFF。
您应该使用utf_16或utf_16_le编码来阅读您的文件。
答案 1 :(得分:0)
不要使用reload
技巧!它弊大于利(ref)。
我使用UTF-16将hindi从你的字符串中取出成功,但是你的代码没有生成列表所以我不确定你是如何得到这些数据的。发布实际重现输出的代码会有所帮助。试试这个:
with codecs.open("input/AMCRAJ04.txt",encoding='utf16') as f1:
text = f1.read().replace("\n",'')