2015-09-25 64 views
3

我有一个uniqueWordList有很多单词(100.000+)。 这些词的每一个的卦都在集合allTriGrams中。加速n-gram处理

我想要建立一个字典,其中包含所有独特的卦作为键 以及这些卦可以作为值匹配的所有单词。

实施例:

epicDict = {‘ban’:[‘banana’,’banned’],’nan’:[‘banana’]} 

到目前为止我的代码:

for value in allTriGrams: 
    for word in uniqueWordList: 
     if value in word: 
      epicDict.setdefault(value,[]).append(word) 

我的问题: 此方法采用大量的时间。有什么办法可以加快这个过程吗?

回答

2

如果uniqueWordList是一套,而不是,那么你就可以做到这一点,而不是:

if value in uniqueWordList: 
    epicDict.setdefault(value,[]).append(word) 

检查了这一点: Python Sets vs Lists

+1

谢谢,相当快! – klabanus

0

简单的解决方案,我希望这是更快:

epicDict = collections.defaultdict(set) 
for word in uniqueWordList: 
    for trigram in [word[x:x+3] for x in range(len(word)-2)]: 
    epicDict[trigram].add(word)