使用Python 2.7并尝试对UTF-8编码文件进行简单的标记化。 a
的输出似乎是一个字节字符串,这是预期的,因为在tk[0].encode('utf-8')
之后,它会从Python unicode
类型转换为str/byte
。我的主要困惑是为什么b
的输出是空列表?我认为没有编码(我的意思是没有调用.encode('utf-8')
),它应该是原始的unicode字符(例如,我希望打印一些中文字符,因为1.txt
是UTF-8编码的中文字符文件)。
源代码,
import jieba
if __name__ == "__main__":
with open('1.txt', 'r') as content_file:
content = content_file.read()
segment_list = jieba.tokenize(content.decode('utf-8'), mode='search')
if segment_list is None:
print 'segment is None'
else:
a = [tk[0].encode('utf-8') for tk in segment_list]
b = [tk[0] for tk in segment_list]
print a
print b
**输出**,
['\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb7\xb1\xe5\x9c\xb3', '\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82', '\xe7\xa6\x8f\xe7\x94\xb0', '\xe7\xa6\x8f\xe7\x94\xb0\xe5\x8c\xba', '\xe6\xa2\x85\xe6\x9e\x97', '\xe6\x9e\x97\xe8\xb7\xaf', '\xe6\xa2\x85\xe6\x9e\x97\xe8\xb7\xaf', '\xe4\xb8\x8a\xe6\xb5\xb7', '\xe6\xb5\xb7\xe5\xb8\x82', '\xe6\xb5\xa6\xe4\xb8\x9c', '\xe6\x96\xb0\xe5\x8c\xba', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82', '\xe4\xb8\x8a\xe6\xb5\xb7\xe5\xb8\x82\xe6\xb5\xa6\xe4\xb8\x9c\xe6\x96\xb0\xe5\x8c\xba', '\xe8\x80\x80\xe5\x8d\x8e', '\xe8\xb7\xaf', '\r\n']
[]
答案 0 :(得分:1)
似乎jieba.tokenize()
返回一个生成器。生成器只能迭代一次。做得更好
b = [tk[0] for tk in segment_list]
a = [tk.encode('utf-8') for tk in b]