我在用元组获取项目时遇到了一些困难。我有一个元组列表,它看起来如下(包含一个单词和一个标签):
[('An', 'DET'),
('autumn', 'NOUN'),
('evening', 'NOUN'),
('.', '.'),
('In', 'ADP'),
('an', 'DET'),
('old', 'ADJ'),
('woodshed', 'NOUN'),
('The', 'DET'),
('long', 'ADJ'),
('points', 'NOUN'),
('of', 'ADP'),
('icicles', 'NOUN'),
('Are', 'NOUN'),
('sharpening', 'VERB'),
('the', 'DET'),
('wind', 'NOUN'),
('.', '.')....]我想做的是迭代这些元组,并根据上一个元组确定下一个单词标记的可能性。例如,如果我想确定“DET”在“名词”前面出现了多少次,我需要迭代元组并确定,例如:
“DET”出现在名词前面的次数
到目前为止,我已经尝试过:
prob = 0.0
for item in tuples:
if item[1] == "DET" and item + 1[1] == "NOUN"
return probif语句显然不正确。有人知道我能做些什么来访问下一个项目吗?
发布于 2016-05-08 00:51:49
将单词成对组合在一起的最简单方法是使用zip(seq, seq[1:]),如迭代工具模块的菜谱部分中所示。
收集计数的最简单方法是使用collections.Counter()。
把它们放在一起看上去是这样的:
>>> 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})发布于 2016-05-07 03:17:58
使用枚举()获取正在循环的项的索引:
count = 0
for index, item in enumerate(tuples[:-1]):
if item[1] == 'DET' and tuples[index+1][1] == 'NOUN':
count += 1
print counthttps://stackoverflow.com/questions/37084109
复制相似问题