最近项目中要用到两个字符串相似度的求解算法,来矫正ocr文本识别的结果,进而提高识别的准确率,通过矫正(相当于模糊查询),识别准确率从65%上升到90%。其结果还是令人兴奋的,因此写博客以记录。
本文实现的方法是:“编辑距离”,所谓编辑距离,就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目。
最后:先取两个字符串长度的最大值maxLen,用1-(需要操作数除maxLen),得到相似度。
例如,abc 和abe 需要一个操作,长度为3,所以相似度为1-1/3=0.666。
必要的安装包:pip install python-Levenshtein 指令安装 Levenshtein
import Levenshtein
str_list = ["你好", "今天天气很好", "明天去吃大餐", "我喜欢编程"]
string = "天气正好好"
score_list = []
for i in str_list:
# 计算编辑距离相似度,即莱文斯坦比
score = Levenshtein.ratio(string, i)
score_list.append(score)
print("%s与其他字符串的相似度分别为" % string)
print(str_list)
print(score_list)
输出结果:
天气正好好与其他字符串的相似度分别为
['你好', '今天天气很好', '明天去吃大餐', '我喜欢编程']
[0.2857142857142857, 0.5454545454545454, 0.18181818181818182, 0.0]
看来结果还是比较可靠的,相似度越高,说明两个字符串越接近。博主在项目中用到了该技巧,使文本识别的准确率大大提高。
参考:字符串相似性的其他几种度量方法
编辑距离的C++实现