NLTK在文本结果前面写'u'字母?

时间:2015-03-18 14:18:56

标签: nltk

我正在学习NLTK的教程,每当我尝试打印一些文本内容时,它都会在它前面返回'u'。

在教程中看起来像这样,

firefox.txt Cookie管理器:“不允许将已删除的Cookie设置为se ...

的网站

但在我的结果中,它看起来像这样

(u'firefox.txt',u'Cookie经理:“不允许将删除的Cookie设置为se','...'的网站。)

我不确定为什么。我遵循教程解释的方式。有人能帮助我理解这个问题吗?谢谢!

3 个答案:

答案 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

希望这会对你有所帮助。