这是一种计算两个字符串之间相似度的方法,想必都听过Edit Distance,Jaro-Winkler Distance 是Jaro Distance的一个扩展,而Jaro Distance(Jaro 1989;1995)据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,具体干什么就不管了,让我们先来看一下Jaro Distance的定义。
两个给定字符串S1和S2的Jaro Distance为:
- m是匹配的字符数;
- t是换位的数目。
两个分别来自S1和S2的字符如果相距不超过 时,我们就认为这两个字符串是匹配的;而这些相互匹配的字符则决定了换位的数目t,简单来说就是不同顺序的匹配字符的数目的一半即为换位的数目t,举例来说,MARTHA与MARHTA的字符都是匹配的,但是这些匹配的字符中,T和H要换位才能把MARTHA变为MARHTA,那么T和H就是不同的顺序的匹配字符,t=2/2=1.
那么这两个字符串的Jaro Distance即为:
而Jaro-Winkler则给予了起始部分就相同的字符串更高的分数,他定义了一个前缀p,给予两个字符串,如果前缀部分有长度为 的部分相同,则Jaro-Winkler Distance为:
这样,上面提及的MARTHA和MARHTA的Jaro-Winkler Distance为:
- d w = 0.944 + (3 * 0.1(1 − 0.944)) = 0.961
以上资料来源于维基百科:
http://en.wikipedia.org/wiki/Jaro-Winkler_distance
这样一来很容易写出这个算法的代码:
1: double jaro_distance(string s1,string s2)2: {
3: if(s1.empty()||s2.empty())4: {
5: if(s1.empty()&&s2.empty())6: return 1.0;7: return 0.0;
Jaro-Winkler Distance 浅析
最新推荐文章于 2023-07-13 16:03:53 发布
Jaro-Winkler Distance是Jaro Distance的扩展,主要用于衡量两个字符串的相似度。它在计算Jaro Distance的基础上,对起始部分相同的字符串给予更高的评分。公式涉及到匹配字符数、换位数目和前缀匹配长度的调整。该算法在诸如姓名比对等领域有应用。
摘要由CSDN通过智能技术生成