从列表的列表中提取第 n 个元素
Extracting n-th element from lists of a list
我使用 nltk .tokenize()、.pos_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 标记)?
谢谢。
使用列表理解。
[token[0] for token in data if token]
所以我会解决一个例子来循环到这种类型的列表中,你可以用你的来试试。
a=[[1,2,3],[4,5,6],[7,8,9]]
for x in a:
print(x[0])
Output looks like:
1
4
7
我使用 nltk .tokenize()、.pos_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 标记)?
谢谢。
使用列表理解。
[token[0] for token in data if token]
所以我会解决一个例子来循环到这种类型的列表中,你可以用你的来试试。
a=[[1,2,3],[4,5,6],[7,8,9]]
for x in a:
print(x[0])
Output looks like:
1
4
7