我正在尝试对某些OCR结果进行模糊匹配,我希望能够将常见的OCR错误考虑在内。特别是,我将街道与街道数据库进行匹配。我想出了如何使用加权levenshtein包降低常见的单字符替换错误,但它似乎只适用于单个字符,当许多最常见的错误是“li”到“h”之类的东西时。 / p>
现在,“Mam”最接近“MAY ST”,当我真的希望它与“MAIN ST”相匹配时。我希望能够构建一些知道“IN”和“M”经常对应的东西,因为“in”被OCR读作“m”。
这是我正在使用的当前代码(我正在减重插入,因为我正在使用的一些街道缩写或缺少“St”,“Ave”等):
import numpy as np
from weighted_levenshtein import lev, osa, dam_lev
def lratio(str1,str2):
insert_costs = 0.5*np.ones(128, dtype=np.float64)
delete_costs = np.ones(128, dtype=np.float64)
substitute_costs = np.ones((128, 128), dtype=np.float64)
substitute_costs[ord('O'), ord('0')] = 0.25
substitute_costs[ord('0'), ord('O')] = 0.25
substitute_costs[ord('I'), ord('T')] = 0.5
substitute_costs[ord('T'), ord('I')] = 0.5
ldistance = lev(str1, str2, insert_costs=insert_costs, delete_costs=delete_costs, substitute_costs=substitute_costs)
return (1.0 - float(ldistance) / float(len(str1) + len(str2))) * 100.0
我认为没有办法修改加权levenshtein进行多字符替换。但如果有,那就太好了。我打赌那里有一个具有这种能力的包 - 可能是一个已经内置了常见错误库的包。
有什么想法吗?