2016-11-19 243 views
1

我正在使用Twitter数据,我有一个包含一堆推文的文件,每行一个。这些推文大多是用葡萄牙语写的,所以他们有特殊字符,如“é”,“á”等。为什么我的脚本不能正确打印Unicode字符?

我试图从文件中过滤停用词并标记推文,但是在处理我的脚本后没有正确打印特殊字符。

实施例:

AT_USER PRA concurso检察署到entrando nessas集会porque emprego BOM TA FODA

变为:

[u'pra 'u'concurso' ,u'p \ xfablico',u't \ xf4',u'entrando',u'nessas',u'agora',u'porque',u'emprego',u'bom',u't \ xe1 ',u'foda']

为什么我在每个令牌之前都有这个“u”?为什么“ú”变成“\ xfa”?

我该如何得到没有“u”的标记并且重音字符正确打印?

在这里gist您可以检查文本之前,之后和我用过的脚本。

谢谢:)

+1

u字符串前缀表示* unicode字符串*,而b前缀表示字节字符串*。 '\ xfa'是ascii值为'FA'的char的编码。 –

+0

@YotamSalmon但我如何摆脱“u”并正确打印重音字符? – 0x7067

+0

'u'只是当您使用'print(lst)'而不是单独打印每个元素时Python添加的信息。 – furas

回答

2

你有一个清单

>>> l = [u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda'] 

当你打印的清单,单词看起来怪异

>>> print l 
[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda'] 

但是,如果打印的话,它看起来很好

>>> for word in l: 
...  print word 
... 
pra 
concurso 
público 
tô 
entrando 
nessas 
agora 
porque 
emprego 
bom 
tá 
foda 
>>> 

当你打印一个列表时,python会打印一个列表的表示,这对于程序员来说是非常有用的,以查看对象是什么。它有括号和引号,并且......“u”表示它是一个Unicode字符串,而不是一个常规的ascii字符串。您会看到ASCII字符的ascii转义版本,因为这是以ascii查看这些字符的唯一方法。如果您将打印的字符串评估为python命令,那么您甚至会将原始列表重新取回!

>>> l2 = eval("[u'pra', u'concurso', u'p\xfablico', u't\xf4', u'entrando', u'nessas', u'agora', u'porque', u'emprego', u'bom', u't\xe1', u'foda']") 
>>> l == l2 
True 

一切都好!你只是得到列表的怪胎视图。

python 3在处理Unicode方面做得更好。除非你有理由坚持使用2.x,否则移动!

+0

谢谢:)我不知道 – 0x7067

1

字符串前面的“u”告诉你有一个unicode字符串。

相关问题