我正在尝试创建一个algo,它遍历一系列字符串,如果字符串满足某个条件,则将它们连接在一起,然后按连接的字符串数跳过,以避免重复计算相同连接字符串的部分。你知道吗
我知道I=I+x或I+=x不会改变每个循环的迭代次数,所以我正在寻找一种替代方法来跳过一个变量的多次迭代。你知道吗
背景:我试图创建一个命名实体识别算法,用于新闻文章。我将文本('Prime Minister Jacinda Ardern is from New Zealand')
标记为('Prime','Minister','Jacinda','Ardern','is'...)
,并在其上运行NLTK词性标记算法,给出:…(('Jacinda','NNP'),('Ardern','NNP'),('is','VBZ')...
,然后在后续单词也是“NNP”/专有名词时组合单词。你知道吗
我们的目标是将“Prime Jacinda Ardern”计算为1个字符串,而不是4个字符串,然后将循环迭代次数跳过尽可能多的单词,以避免下一个字符串是“Prime Jacinda Ardern”,然后是“Jacinda Ardern”。你知道吗
上下文:
“text”是一个列表列表,通过标记我的文章,然后对其进行词性标记,其格式为:[...('She', 'PRP'), ('said', 'VBD'), ('the', 'DT'), ('roughly', 'RB'), ('25-minute', 'JJ'), ('meeting', 'NN')...]
‘NNP’=专有名词或地点/人员/组织等的名称
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
如果Iprint(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)
任何帮助都将不胜感激。干杯
如果需要调整
for
的递增方式,请不要使用i
循环,因为它总是将其设置为范围中的下一个值。使用while
循环:range()创建一个iterable对象。for…in构造对其调用next方法,每次next都返回序列中的下一个值。所以i变量不是序列中的索引,它只是迭代器生成的下一个值。修改i没有效果,当从序列中检索到下一个值时,它将被覆盖。你知道吗
这与C中类似
for (int i = 0; i < 5; i++) {}
的循环非常不同,在C中没有序列的概念;它只是在执行块之前检查i是否小于5。你知道吗比较一下:
也许这里更明显的是,设置我将没有任何影响。你知道吗
但是类似于C的构造,也可以在Python中实现。具体如下:
这个指纹
看到没有输出3了吗?当它达到i==2时,它加了2,所以跳过了3。您可以在代码中执行类似的操作。你知道吗
(这些示例是python3)
谢谢大家的帮助。我使用了Barmar显示的while循环:
i=0
而我<;len(文本):
i+=文字计数器
最后使用了if-else语句:
如果wordcounter>;0:i+=wordcounter
否则:i+=1
相关问题 更多 >
编程相关推荐