我有一个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对象传递给列表?
答案 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,')