通过大型语料库(python)进行有效迭代

时间:2017-10-26 22:25:15

标签: python

def getPairsWithMaximumPMI(self, words, N):
    print("\nSubtask 3: given a list of words, find the pairs with the greatest PMI")
    #return [(1.0, "foo", "bar")]

    possiblePairs = list(combinations(words, 2))
    currMaxPMI = 0.0
    res = [[]]

    print("Total pairs", (len(possiblePairs)))

    for p in possiblePairs:
        counter += 1
        print(counter)
        if(self.getPMI(p[0], p[1]) > currMaxPMI):
            currMaxPMI = self.getPMI(p[0], p[1])
            res[0] = (currMaxPMI, p[0], p[1])

    print(res)
    return res

我的功能基本上会创建所有可能的单词来自给定的单词'在possiblePairs中列出和存储。

e.g. ['I', 'am', 'you'] --> [('I','am'), ('I', 'you'), ('am','you')]

然后遍历这个possiblePairs并做一些在我的问题中不重要的计算。

问题是,当possiblePairs很大时,计算大约需要30分钟,这不是我想要的。

我需要做些什么来提高算法的效率?

我是这类新手,所以我需要帮助。

编辑:

    currMaxPMI = 0.0
    res = [[]]
    counter = 0
    #print("Total pairs", (len(possiblePairs)))

    for p in (combinations(words, 2)):

        counter += 1
        print(counter)
        if(self.getPMI(p[0], p[1]) > currMaxPMI):
            currMaxPMI = self.getPMI(p[0], p[1])
            res[0] = (currMaxPMI, p[0], p[1])

    print(res)
    return res

1 个答案:

答案 0 :(得分:5)

一个直接的改进是直接从对生成器进行迭代(假设zIndex是您的私有生成器,绕过EVT_NODE_JOINED优化版本)

combinations

这将允许运行时系统尽可能优化生成和获取,并节省将大量列表保存在内存中的开销。