概要
给定一个字符串a,在字符串列表B中找到与a最相似字符串b,或者让列表B按与a相似度排序。本文提出一种算法来较好的解决这个问题。并且该算法很容易扩展支持拼音模糊相似度计算,在语音识别应用如语音搜索联系人打电话方面有较好的优势。
标记距离相似算法
如图,我们需要计算a和b的相似度,需要执行三个步骤:
1、将a和b的相同字符一一进行标记,这里用相同颜色表示。
2、计算a每一个字符的相似得分。
3、将a的每一个字符最大得分相加就得到这两行字符串的总相似度分数。
第一步和第三步显然很简单,我们来讨论第二步,如何计算每个字符的相似得分:
我们这样定义相同字符的距离:
a和b中两个相同颜色字符的索引减去他们前面的相同颜色字符的索引之间的差就是这两个字符的距离。如上图,从左到右,设an和bm的颜色相同,ax和by的颜色相同,且an、bm是ax、by左边第一个满足Indexan < Indexax && Indexbm < Indexby,那么ax、by的相似距离就是:
d = ∣ ( I n d e x a n − I n d e x a n ) − ( I n d e x b y − I n d e x b m ) ∣ d = |(Index_{a_n} - Index_{a_n}) - (Index_{b_y} - Index_{b_m})| d=∣(Indexan−Indexa