首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整Python循环中的迭代量

调整Python循环中的迭代量
EN

Stack Overflow用户
提问于 2019-10-21 07:45:46
回答 2查看 65关注 0票数 1

我正在尝试创建一个算法,它遍历一系列字符串,如果字符串满足特定条件,则将它们连接在一起,然后根据连接的字符串数跳过,以避免重复计算相同连接的字符串的部分。

我知道i=i+x或i += x不会改变每个循环的迭代次数,所以我在寻找另一种方法来跳过一个变量的迭代次数。

背景:我正在尝试创建一个在新闻文章中使用的命名实体识别算法。我将文本('Prime Minister Jacinda Ardern is from New Zealand')标记为('Prime','Minister','Jacinda','Ardern','is'...),然后运行NLTK POS标签算法遍历它,给出:...(('Jacinda','NNP'),('Ardern','NNP'),('is','VBZ')...,然后当后面的单词也是'NNP‘/proper名词时组合单词。

目标是将“总理杰辛达·阿德恩”计算为1个字符串,而不是4个,然后跳过尽可能多的单词来跳过循环迭代,以避免下一个字符串是“部长杰辛达·阿德恩”,然后是“杰辛达·阿德恩”。

上下文:'text‘是一个列表列表,它是通过对我的文章进行标记化,然后进行POS标记而创建的,其格式为:[...('She', 'PRP'), ('said', 'VBD'), ('the', 'DT'), ('roughly', 'RB'), ('25-minute', 'JJ'), ('meeting', 'NN')...] 'NNP’=专有名词或地点/人物/组织的名称等。

代码语言:javascript
复制
for (i) in range(len(text)):

    print(i)

    #initialising wordcounter as a variable
    wordcounter = 0

    # if text[i] is a Proper Noun, make namedEnt = the word. 
    # then increase wordcounter by 1
    if text[i][1] == 'NNP':
        namedEnt = text[i][0]
        wordcounter +=1

        # while the next word in text is also a Proper Noun,
        # increase wordcounter by 1. Initialise J as = 1
        while text[i + wordcounter][1] == 'NNP':
            wordcounter +=1
            j = 1


            # While J is less than wordcounter, join text[i+j] to 
            # namedEnt. Increase J by 1. When that is no longer
            # the case append namedEnt to a namedEntity list
            while j < wordcounter:
                namedEnt = ' '.join([namedEnt,text[i+j][0]])
                j += 1
            InitialNamedEntity.append(namedEnt)

        i += wordcounter

如果我一开始就print(i),它会一次递增1。当我打印由namedEnts组成的NamedEntity列表的计数器时,i结果如下:(...'New Zealand': 7, 'Zealand': 7, 'United': 4, 'Prime Minister Minister Jacinda Minister Jacinda Ardern': 3...)

因此,我不仅得到了“新西兰”和“新西兰”的双重评价,而且还得到了像“总理杰辛达·阿德恩总理”这样的怪异结果。

我想要的结果是('New Zealand':7, 'United States':4,'Prime Minister Jacinda Ardern':3)

任何帮助都将不胜感激。干杯

EN

回答 2

Stack Overflow用户

发布于 2019-10-21 07:51:26

如果需要调整i的递增方式,请不要使用for循环,因为它总是将其设置为范围内的下一个值。使用while循环:

代码语言:javascript
复制
i = 0
while i < len(text):
    ...
    i += wordcounter
票数 1
EN

Stack Overflow用户

发布于 2019-10-21 15:07:35

感谢大家的帮助。我使用了Barmar显示的while循环:

I=0

而I< len(text):

I +=单词计数器

并在最后使用了if else语句:

if wordcounter > 0: I += wordcounter

否则:I += 1

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

https://stackoverflow.com/questions/58478220

复制
相关文章

相似问题

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