从列表中提取第n个元素

问题描述:

我使用nltk .tokenize(),.pos_tag()和wordnet .synsets()获得以下输出。输出是用于文件和共发现自己的部分词性标注每个令牌可能匹配的列表的列表(在这里,我们有4个令牌,因此,比赛的4名名单):从列表中提取第n个元素

[[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')] 

什么是最灵活的方式w仪式这样的功能?这样它可以扩展到其他标记文档(带有pos标记)?

谢谢。

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

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

我已经尝试在我的输出中使用list.append(),但它返回一个错误消息“列表索引超出限制”。但谢谢你回答。 –

+0

为什么要使用list.append(),你问的问题只是以上面所需的方式打印输出的权利?那么上面那个不符合你的要求?让我知道如果你想做更多的事 –

+0

我使用list.append(),因为我正在定义一个函数,将返回一个列表对象。可以肯定的是,打印也将成功。 –

使用列表理解。

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

我可以把它列入清单吗?我在我的代码下运行你的代码,但它返回一个错误消息'list index out of range' –

+0

@ChrisT .:如果'data'等于你的令牌列表,我不知道你为什么看到这个错误。 –

+0

我认为这与原始文本中的'this'这样的标记有关,因为当使用wn.synsets()获取此标记的syn引用时,它将返回[]。如果使用令牌[0]来表示[] [0],则会产生错误。无论如何修改函数以跳过“不匹配”标记? –