Jaccard索引缺少编辑距离的可能匹配

时间:2013-04-23 23:54:47

标签: python python-2.7 ocr spell-checking edit-distance

开发OCR校正模块,我正在用Python进行实验。我的想法是尝试使用bigrams,Jaccard索引和编辑距离来修改OCR中基于字典(词汇)的每个单词。

示例词汇:

vocab = ['maze', 'mouse', 'mice', 'race', 'mike', 'mock', 'snake']

关于词汇的Bigrams:

vbgrams = defaultdict(Set)

for v in range(len(vocab)): #for the entire dictionary/vocab
    bigs = [vocab[v][i:i+2] for i in range(len(vocab[v])-1)]
    [vbgrams[big].add(v) for big in bigs]

输入搜索字词

tbgrams = [term[i:i+2] for i in range(len(term)-1)]

计算每个词汇项目的bigram点击次数:

match = Counter()
for vbst in [vbgrams[tbg] for tbg in Set(tbgrams)&Set(vbgrams.keys())]:
    match += Counter(vbst) # vbst = Set([4,6]) - indexes for each vocab

最后Jaccard指数:

out = list()
for (vi,c) in match.most_common():
    d = len(vocab[vi])-1 + len(tbgrams)
    print "%s\t\t: %d/(%d-%d) = (%.2f)" % (vocab[vi],c,d,c,float(c)/(d-c))
    if float(c)/d > 0.4: 
        out.append(vocab[vi])

当我提供术语'make'时,Jaccard索引是:

snake  : 2/(7-2) = (0.40)
maze   : 1/(6-1) = (0.20)
mike   : 1/(6-1) = (0.20)

结果,将跳过所有三个项目。

然而,如果我计算编辑距离和比率,我会得到可用的值:

snake - 2 Ratio: 0.666666666667
maze  - 1 Ratio: 0.75
mike  - 1 Ratio: 0.75

是不必要的二元游戏?如果Jaccard索引太低并直接编辑距离,那么可以进行前10个词汇匹配吗?

注意:Jaccard索引没有可用的标签。

0 个答案:

没有答案