在ngram索引中快速搜索

时间:2018-08-27 15:44:34

标签: python n-gram

我正在用python编写程序,使用给定的输入单词(使用编辑距离算法)查找最相似的单词。它必须像这样工作:

input = "tree"

output = [ "free", "trek", "trie" ]

现在,我从一个词典中提取了所有ngram,并将它们与从中提取的单词相关联。我有一本字典,其中的键是ngram,值是相关单词的列表,像这样:

“ mag”:[“ magic”,“ magazine”,“ magnetic”,“ magistrate”,“朝圣”]

当我有一个输入词时,我从中提取ngram并遍历字典中的键以找到它们并提取与单词相关的列表。在这些列表上,我使用编辑距离来获取需要的单词。 它运作良好,但需要很多时间。有时,仅需一个单词,它就会在8/10秒时到达。 我如何使过程更快?我实际上想要一个概念上的解决方案。我使用这种“ ngram索引”方法是因为对词典中的每个单词使用编辑距离要慢得多。现在我想要比当前方法快的东西

def searchIndex(myString, n, index):
ngs = toNgrams(myString)
found=[]
ngIndex = NGram(index)
ngNgrams = NGram(ngs)

a = timer()
commonNgrams = ngIndex.intersection(ngNgrams)
for i in commonNgrams:
    for k in index[i]:
        if ed(myString, k) < 2 and k not in found:
            found.append(k)
b = timer()
time = b-a
return found, time

0 个答案:

没有答案