开发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索引没有可用的标签。