python中常见多字符OCR错误的模糊字符串匹配

python中常见多字符OCR错误的模糊字符串匹配,python,ocr,levenshtein-distance,fuzzy-comparison,Python,Ocr,Levenshtein Distance,Fuzzy Comparison,我正在尝试对一些OCR结果进行模糊匹配,我希望能够考虑常见的OCR错误。特别是,我正在将街道与街道数据库进行匹配。我发现了如何使用加权levenshtein包来降低常见的单字符替换错误的权重,但它似乎只适用于单字符,而许多最常见的错误是像“li”到“h”这样的 现在,“Mam”和“MAY ST”最接近,而我真的希望它和“MAIN ST”匹配。我希望能够在中构建一些知道“in”和“M”经常对应的东西,因为“in”被OCR读作“M” 这是我正在使用的当前代码(我正在降低插入的权重,因为我正在使用的一

我正在尝试对一些OCR结果进行模糊匹配,我希望能够考虑常见的OCR错误。特别是,我正在将街道与街道数据库进行匹配。我发现了如何使用加权levenshtein包来降低常见的单字符替换错误的权重,但它似乎只适用于单字符,而许多最常见的错误是像“li”到“h”这样的

现在,“Mam”和“MAY ST”最接近,而我真的希望它和“MAIN ST”匹配。我希望能够在中构建一些知道“in”和“M”经常对应的东西,因为“in”被OCR读作“M”

这是我正在使用的当前代码(我正在降低插入的权重,因为我正在使用的一些街道缩写或缺少“St”、“Ave”等):

我不认为有一种方法可以修改多字符替换的加权levenshtein。但如果有,那就太好了。我敢打赌,有一个软件包具有这种能力——可能是一个已经内置了常见错误库的软件包

有什么想法吗

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