Condense嵌套for循环以改善文本分析python的处理时间

时间:2014-12-09 20:01:55

标签: performance python-2.7 nested-loops feature-selection

我正在研究一个未经训练的分类器模型。我在Python 2.7中工作。我有一个循环。它看起来像这样:

    features = [0 for i in xrange(len(dictionary))]
    for bgrm in new_scored:
        for i in xrange(len(dictionary)):
            if bgrm[0] == dictionary[i]:
                features[i] = int(bgrm[1])
                break

我有一本"字典"我从包含客户评论的数据集中收集的双字母组合,我想构建与我创建的字典相对应的每个评论的特征数组。它将包含在词典中的功能审查中发现的双字母组合的频率(我希望这是有道理的)。 new_scored是一个元组列表,其中包含特定评论中找到的bigrams,以及在该评论中发生的相对频率。最终的特征数组与原始字典的长度相同,几乎没有非零条目。

以上工作正常,但我正在查看13000条评论的数据集,因为每次审核都要循环使用此代码(如果我的电脑首先没有用完RAM)。我已经和它坐了一会儿,看不出我怎么能压缩它。

我是python的新手,所以我希望更有经验的人可以帮助缩小它,或者让我指向一个包含我需要的功能的库的正确方向。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

考虑使dictionary成为一个实际的dict对象(或dict的一些更好的子类,如果它更适合您的需要),而不是迭代(list或{ {1}}看起来就像现在一样)。 tuple可以将bigrams映射为标识特征位置的整数标识符的键。

如果以这种方式重构dictionary,则可以将循环重写为:

dictionary

这应该将通过features = [0 for key in dictionary] for bgram in new_scored: try: features[dictionary[bgram[0]]] = int(bgrm[1]) except KeyError: # do something if the bigram is not in the dictionary for some reason 的O(n)遍历转换为哈希查找。

希望这有帮助。