【问题标题】:Object containing multiple lists python包含多个列表python的对象
【发布时间】:2016-04-05 15:37:32
【问题描述】:

我在 Python 中偶然发现了一个非常奇怪的变量。我正在对多个 unicode 字符串进行标记化操作,如下所示:

with open ("verbatims.txt","r") as verbatims :
    for line in verbatims:
        line = line.decode("utf8")
        tokens = nltk.tokenize.word_tokenize(line)

&当我print(tokens)

[u'Vive', u'la', u'poste', u'...', u'.', u'Le', u'facteur', u'qui', u'a', u'la', u'flemme', u'de', u'sonner', u'pour', u'te', u'remettre', u'ton', u'colis', u'et', u'te', u'dis', u'que', u"t'es", u'absent']
[u'Une', u'honte', u'ce', u'petit', u'postier', u'fain\xe9ant', u'.', u'.']

我得到了这个奇怪的输出。似乎tokens 是一个包含多个列表的对象。这里只是一个示例,但我有多个列表作为句子。此外,我不能像在普通列表中那样只调用tokens。我必须打印。

在同一个对象中有多个列表的问题是,当我使用简单的for...in 循环解析对象时,解析器将无法工作,只会返回对象的最后一个列表。

所以我的问题是:

  • 这些对象怎么称呼?
  • 如何解析这个对象?

谢谢!

【问题讨论】:

  • 我怀疑您在 for 循环内部而不是外部调用 print(tokens)。嵌套列表将其内容包装在额外的方括号中,这里不是这种情况。此外,仅迭代最后一个列表这一事实强烈表明您只有一个列表作为返回变量。每次迭代,tokens 都会被覆盖,所以显然print(tokens) 会显示不同的内容。
  • 您确定这是对 print(tokens) 的一次调用的输出,而不仅仅是 print(tokens) 被多次调用的结果吗?
  • 哦,是的,没错。我的打印在循环内。
  • 但是它仍然没有解决问题,即我在tokens 中只得到了unicode str. 的最后一个。我确定这是我的循环有问题,但我无法解决:/

标签: python list token nltk tokenize


【解决方案1】:

尝试使用编码“utf-8”或“latin1”

with open ("verbatims.txt","r") as verbatims :
    for line in verbatims:
        line = line.decode("utf8")
        tokens = nltk.tokenize.word_tokenize(line)
        tokens = [x.encode('latin1') for x in tokens] # add this or try with the another

但是如果你有 [ [],[] ] 的标记,应该在 x 中执行其他循环,例如(多个列表):

with open ("verbatims.txt","r") as verbatims :
    for line in verbatims:
        line = line.decode("utf8")
        tokens = nltk.tokenize.word_tokenize(line)
        tokens = [a.encode('latin1') for a in x for x in tokens]

【讨论】:

  • 感谢您的回答!但是 Akshat Mahajan 是对的:我在循环中调用 print()。这就是为什么我的解释器中有这些多个列表
  • @NahidO 啊?您可以在转换 unicode 后调用 print
  • 老兄,发布你的 txt 以帮助你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多