从列表列表中提取第n个元素

时间:2017-08-30 04:16:29

标签: python list nltk wordnet pos-tagger

我使用nltk .tokenize(),. as_tag()和wordnet .synsets()获得了以下输出。输出是每个文档令牌和wordnet自己的词性标记的潜在匹配列表的列表(这里我们有4个令牌,因此有4个匹配列表):

[[Synset('document.n.01'),
  Synset('document.n.02'),
  Synset('document.n.03'),
  Synset('text_file.n.01'),
  Synset('document.v.01'),
  Synset('document.v.02')],
 [Synset('be.v.01'),
  Synset('be.v.02'),
  Synset('be.v.03'),
  Synset('exist.v.01'),
  Synset('be.v.05'),
  Synset('equal.v.01'),
  Synset('constitute.v.01'),
  Synset('be.v.08'),
  Synset('embody.v.02'),
  Synset('be.v.10'),
  Synset('be.v.11'),
  Synset('be.v.12'),
  Synset('cost.v.01')],
 [Synset('angstrom.n.01'),
  Synset('vitamin_a.n.01'),
  Synset('deoxyadenosine_monophosphate.n.01'),
  Synset('adenine.n.01'),
  Synset('ampere.n.02'),
  Synset('a.n.06'),
  Synset('a.n.07')],
 [Synset('trial.n.02'),
  Synset('test.n.02'),
  Synset('examination.n.02'),
  Synset('test.n.04'),
  Synset('test.n.05'),
  Synset('test.n.06'),
  Synset('test.v.01'),
  Synset('screen.v.01'),
  Synset('quiz.v.01'),
  Synset('test.v.04'),
  Synset('test.v.05'),
  Synset('test.v.06'),
  Synset('test.v.07')]]

如果我想编写一个函数(可能是一个循环),只提取每个标记的第一个匹配项并将输出生成为新列表,如下所示(使用上面的示例):

[Synset('document.n.01'), Synset('be.v.01'), Synset('angstrom.n.01'), Synset('trial.n.02')]

编写这样一个函数最灵活的方法是什么?这样它可以扩展到其他标记化文档(使用pos标记)?

谢谢。

2 个答案:

答案 0 :(得分:3)

使用列表理解。

[token[0] for token in data if token]

答案 1 :(得分:1)

所以我将解决一个循环到这种类型列表的例子,你也可以和你的一样尝试。

    a=[[1,2,3],[4,5,6],[7,8,9]]
    for x in a:
        print(x[0])
   Output looks like:
   1
   4
   7