在开发OCR校正模块时,我正在Python中进行实验。其思想是尝试使用bigrams、Jaccard索引和编辑距离来基于dictionary(vocab)来更正OCR中的每个单词。在
示例人声:
vocab = ['maze', 'mouse', 'mice', 'race', 'mike', 'mock', 'snake']
人声中的重量级人物:
^{pr2}$输入搜索项
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索引没有可用的标记。在
目前没有回答
相关问题 更多 >
编程相关推荐