如何从python中的印地语中包含unicode字符的txt文件中分割句子

时间:2016-02-25 16:31:56

标签: python python-2.7 unicode

我用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来运行代码。

句子分割有什么简单的方法吗? 应该将文件完全读入内存吗?

2 个答案:

答案 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",'')