列表

时间:2016-06-14 15:06:00

标签: python python-2.7 unicode nltk python-unicode

我有一个utf8 - 文本语料库,我可以在Python 2.7中轻松阅读:

sentence = codecs.open("D:\\Documents\\files\\sentence.txt", "r", encoding="utf8")
sentence = sentence.read()

> This is my sentence in the right format

但是,当我将此文本语料库传递给列表时(例如,用于标记化):

tokens = sentence.tokenize()

并将其打印在笔记本中,我获得了类似于字符的字符,例如:

(u'\ufeff\ufeffFaux,', u'Tunisie')
(u'Tunisie', u"l'\xc9gypte,")

虽然我希望普通字符就像我原来的导入一样。

所以我的问题是:如何在没有奇怪的位/ ASCII字符的情况下将unicode对象传递给列表?

2 个答案:

答案 0 :(得分:0)

Hm,codecs.open(...)返回“基础文件对象的包装版本”,然后用对该对象执行read方法的结果覆盖此变量。勇敢,恼人 - 但确定;-)

当您在“笔记本”中输入äöüß时,它是否显示为“this”,或者您是否看到了一些\uxxxxx

codecs.open(...)的默认值为errors=strict,因此如果这是所有样本的相同环境,则应该可以使用。

据我所知,当您编写“打印”时,您打印列表,这与打印列表内容不同。

示例(将一个键入\t的选项卡转换为普通的“byte”字符串 - 这是python 2.7.11):

>>> a="\t"
>>> print a  # below is an expanded tab

>>> a
'\t'
>>> [a]
['\t']
>>> print [a]
['\t']
>>> for element in [a]:
...     print element
... 

>>> # above is an expanded tab

答案 1 :(得分:0)

这就是你print的全部内容。 Python 2使用仅ASCII字符显示列表,并使用反斜杠转义码替换非ASCII字符。这样可以很容易地看到正常打印会隐藏的隐藏字符,例如您在字符串中看到的双字节顺序标记(BOM)\ufeff。打印单个字符串项目将正确显示它们。

许多例子

原始字符串:

>>> s = (u'\ufeff\ufeffFaux,', u'Tunisie')
>>> t = (u'Tunisie', u"l'\xc9gypte,")

在交互式提示下显示:

>>> s
(u'\ufeff\ufeffFaux,', u'Tunisie')
>>> t
(u'Tunisie', u"l'\xc9gypte,")
>>> print s
(u'\ufeff\ufeffFaux,', u'Tunisie')
>>> print t
(u'Tunisie', u"l'\xc9gypte,")

从元组中打印单个字符串:

>>> print s[0]
Faux,
>>> print s[1]
Tunisie
>>> print t[0]
Tunisie
>>> print t[1]
l'Égypte,
>>> print ' '.join(s)
Faux, Tunisie
>>> print ' '.join(t)
Tunisie l'Égypte,

打印没有转义码的元组的方法:

>>> print "('"+"', '".join(s)+"')"
('Faux,', 'Tunisie')
>>> print "('"+"', '".join(t)+"')"
('Tunisie', 'l'Égypte,')