Python 3.x 嵌套for循环的速度更快

Python 3.x 嵌套for循环的速度更快,python-3.x,nlp,artificial-intelligence,data-science,kaggle,Python 3.x,Nlp,Artificial Intelligence,Data Science,Kaggle,在卡格尔比赛中,我发明了一种新的得分方法。然而,要做到这一点,需要匹配文本中的一些单词和vocab中的一些单词。为了创建vocab,我使用 vectorizer = CountVectorizer(min_df=0, lowercase=False) vectorizer.fit(disaster_tweets) disaster_voc = vectorizer.vocabulary_ vectorizer.fit(non_disaster_tweets) non_disaster_voc =

在卡格尔比赛中,我发明了一种新的得分方法。然而,要做到这一点,需要匹配文本中的一些单词和vocab中的一些单词。为了创建vocab,我使用

vectorizer = CountVectorizer(min_df=0, lowercase=False)
vectorizer.fit(disaster_tweets)
disaster_voc = vectorizer.vocabulary_
vectorizer.fit(non_disaster_tweets)
non_disaster_voc = vectorizer.vocabulary_

然后,我从另一个循环中减去相同的字数。很快。然而,这行代码非常慢。这是减法代码:

for  key_1 in list(disaster_voc):
    for key_2 in list(non_disaster_voc):
        if key_1.lower() == key_2.lower():
            disaster_voc[key_1] = disaster_voc[key_1] - non_disaster_voc[key_2] 

然后,真正的部分是将词汇词与每条推文中的词进行匹配。代码如下:


score_train = []
for i in range(len(train['text'].values)):
    score = 0
    for  key_1 in list(disaster_voc):
        for word in word_tokenize(train['text'].values[i]):
            if word.lower() == key_1.lower():
                if disaster_voc[key_1] >= 0:
                    score += disaster_voc[key_1]

    score_train.append(score)
    print(score)

我从文本栏中获取推文,如果它在推文中有一个正分数,我将其相加为分数。总的来说,它在1-2秒内收集总分,对于7000-8000行,它需要数小时、数天


如果你能找到总的快速方式或更快的循环建议,请帮助。谢谢。

在计算字数时,您似乎想忽略大小写。为什么在
计数器向量器中设置
lowercase=False
?我错过了。钥匙没有放低,我在循环中处理它们。跑步速度受它影响不大。最后一个函数花费了太多的时间。如果您不必先将键小写,那么它可能会占用大量的循环时间。另外,要找到两个dict之间的交集,请对set(disaster\u voc)和set(non\u disaster\u voc)中的common\u key使用set算术
(当然,这只适用于开始时键为小写的情况)。您可以以相同的方式将set算术应用于上一个代码段,并去掉一些循环。好的。谢谢你的帮助。你在计算字数时似乎想忽略大小写。为什么在
计数器向量器中设置
lowercase=False
?我错过了。钥匙没有放低,我在循环中处理它们。跑步速度受它影响不大。最后一个函数花费了太多的时间。如果您不必先将键小写,那么它可能会占用大量的循环时间。另外,要找到两个dict之间的交集,请对set(disaster\u voc)和set(non\u disaster\u voc)中的common\u key使用set算术
(当然,这只适用于开始时键为小写的情况)。您可以以相同的方式将set算术应用于上一个代码段,并去掉一些循环。好的。谢谢你的帮助。