Python 遍历元组,获得下一项
我在获取元组中的项时遇到了一些困难。我有一个元组列表,看起来像这样(包含一个单词和一个标记): 我想做的是迭代这些元组,并确定下一个单词标记基于上一个单词标记的可能性。例如,如果我想确定“DET”出现在“名词”前面的次数,我想迭代元组并确定,例如: “DET”出现在“NOUN”前面的次数 到目前为止,我已经尝试过:Python 遍历元组,获得下一项,python,list,loops,nlp,tuples,Python,List,Loops,Nlp,Tuples,我在获取元组中的项时遇到了一些困难。我有一个元组列表,看起来像这样(包含一个单词和一个标记): 我想做的是迭代这些元组,并确定下一个单词标记基于上一个单词标记的可能性。例如,如果我想确定“DET”出现在“名词”前面的次数,我想迭代元组并确定,例如: “DET”出现在“NOUN”前面的次数 到目前为止,我已经尝试过: prob = 0.0 for item in tuples: if item[1] == "DET" and item + 1[1] == "NOUN" return prob
prob = 0.0
for item in tuples:
if item[1] == "DET" and item + 1[1] == "NOUN"
return prob
if
语句显然不正确。有人知道我可以做些什么来访问下一个项目吗?使用enumerate()获取您正在循环的项目的索引:
count = 0
for index, item in enumerate(tuples[:-1]):
if item[1] == 'DET' and tuples[index+1][1] == 'NOUN':
count += 1
print count
将单词成对组合在一起的最简单方法是使用
zip(seq,seq[1:])
,如图所示
收集计数的最简单方法是使用
把所有这些放在一起看起来像这样:
>>> from collections import Counter
>>> Counter((f, s) for (_, f), (_, s) in zip(tuples, tuples[1:]))
Counter({('ADJ', 'NOUN'): 2, ('NOUN', 'ADP'): 2, ('NOUN', 'NOUN'): 2,
('DET', 'NOUN'): 2, ('DET', 'ADJ'): 2, ('ADP', 'NOUN'): 1,
('NOUN', 'VERB'): 1, ('NOUN', 'DET'): 1, ('VERB', 'DET'): 1,
('ADP', 'DET'): 1})
查看您可以使用滑动窗口迭代器从列表中生成成对的元组。快速跟进:如何防止索引超出范围错误?@Natalian Fixed。我已经做了,所以除了上学期,你可以重复整个列表
>>> from collections import Counter
>>> Counter((f, s) for (_, f), (_, s) in zip(tuples, tuples[1:]))
Counter({('ADJ', 'NOUN'): 2, ('NOUN', 'ADP'): 2, ('NOUN', 'NOUN'): 2,
('DET', 'NOUN'): 2, ('DET', 'ADJ'): 2, ('ADP', 'NOUN'): 1,
('NOUN', 'VERB'): 1, ('NOUN', 'DET'): 1, ('VERB', 'DET'): 1,
('ADP', 'DET'): 1})