我正在学习NLTK的教程,每当我尝试打印一些文本内容时,它都会在它前面返回'u'。
在教程中看起来像这样,
firefox.txt Cookie管理器:“不允许将已删除的Cookie设置为se ...
的网站但在我的结果中,它看起来像这样
(u'firefox.txt',u'Cookie经理:“不允许将删除的Cookie设置为se','...'的网站。)
我不确定为什么。我遵循教程解释的方式。有人能帮助我理解这个问题吗?谢谢!
答案 0 :(得分:3)
前导u
只表示该字符串是Unicode。 Python 3中的所有字符串都是Unicode。括号表示您正在处理元组。如果您打印元组的各个元素,两者都会消失,就像t[0]
,t[1]
一样(假设t
是您的元组)。
如果您想要整体打印整个元组,请删除u
和括号,请尝试以下操作:
print " ".join (t)
答案 1 :(得分:0)
正如在其他答案中所提到的,领先的 u 只意味着字符串是Unicode。 str()可用于将unicode转换为str,但似乎没有直接的方法将元组中的所有值从unicode转换为字符串。 简单的功能如下所示,当你指的是nltk中的任何元组时使用它。
>>> def str_tuple(t, encoding="ascii"):
... return tuple([i.encode(encoding) for i in t])
>>> str_tuple(nltk.corpus.gutenberg.fileids())
('austen-emma.txt','austen-persuasion.txt','austen-sense.txt','bible-kjv.txt','blake-poems.txt','bryant-stories.txt ','burgess-busterbrown.txt','carroll-alice.txt','chesterton-ball.txt','chesterton-brown.txt','chesterton-thursday.txt','edgeworth-parents.txt', 'melville-moby_dick.txt','milton-paradise.txt','shakespeare-caesar.txt','shakespeare-hamlet.txt','shakespeare-macbeth.txt','whitman-leaves.txt')
答案 2 :(得分:0)
我猜你使用的是Python2.6或3.0之前的任何版本。
Python允许其用户在' str()'上执行相同的操作。和' unicode'在早期版本中。他们试图在' str()'之间进行转换。和' unicode'直接在某些情况下依赖于默认编码,在大多数平台上都是ASCII。这可能是造成问题的原因。以下两种方法可以解决它:
首先,手动分配解码方法。例如:
>> for name in nltk.corpus.gutenberg.fileids():
>> name.decode('utf-8')
>> print(name)
另一种方法是将Python更新为3.0+(推荐)。他们在Python3.0中解决了这个问题。以下是更新详细说明的链接: https://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
希望这会对你有所帮助。