加速 n-gram 处理

3
我有一个包含很多单词(10万个以上)的独特单词列表。每个单词的三元组都在集合allTriGrams中。
我想创建一个字典,其中所有唯一的三元组作为键,并且可以与这些三元组匹配的所有单词作为值。
例如:
epicDict = {‘ban’:[‘banana’,’banned’],’nan’:[‘banana’]}

到目前为止,我的代码:

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

我的问题: 这个方法需要很长时间。有没有办法加快这个过程?

2个回答

2
如果uniqueWordList是一个集合,那么你可以使用以下方式代替原来的方法:
if value in uniqueWordList:
    epicDict.setdefault(value,[]).append(word)

看看这个链接:Python集合与列表有什么不同?


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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接