首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历元组,获得下一项

遍历元组,获得下一项
EN

Stack Overflow用户
提问于 2016-05-07 03:14:21
回答 2查看 58关注 0票数 1

我在用元组获取项目时遇到了一些困难。我有一个元组列表,它看起来如下(包含一个单词和一个标签):

代码语言:javascript
复制
[('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”出现在名词前面的次数

到目前为止,我已经尝试过:

代码语言:javascript
复制
prob = 0.0
for item in tuples:
   if item[1] == "DET" and item + 1[1] == "NOUN"
return prob

if语句显然不正确。有人知道我能做些什么来访问下一个项目吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-08 00:51:49

将单词成对组合在一起的最简单方法是使用zip(seq, seq[1:]),如迭代工具模块的菜谱部分中所示。

收集计数的最简单方法是使用collections.Counter()

把它们放在一起看上去是这样的:

代码语言:javascript
复制
>>> 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})
票数 1
EN

Stack Overflow用户

发布于 2016-05-07 03:17:58

使用枚举()获取正在循环的项的索引:

代码语言:javascript
复制
count = 0
for index, item in enumerate(tuples[:-1]):
    if item[1] == 'DET' and tuples[index+1][1] == 'NOUN':
        count += 1

print count
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37084109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档