一段比较字串相似度的代码

来源:互联网 发布:matlab里矩阵的条件数 编辑:程序博客网 时间:2024/06/14 08:31
public class StringsCompare{private int compare(String str1, String str2){int d[][];int n = str1.length();int m = str2.length();int i; int j; char ch1; char ch2; int temp; if (n == 0) { return m; }if (m == 0) { return n; }d = new int[n + 1][m + 1];for (i = 0; i <= n; i++){ d[i][0] = i;}for (j = 0; j <= m; j++){ d[0][j] = j;}for (i = 1; i <= n; i++){ ch1 = str.charAt(i - 1);for (j = 1; j <= m; j++){ch2 = target.charAt(j - 1);if (ch1 == ch2){temp = 0;} else{temp = 1;}d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + temp);}}return d[n][m];}private int min(int one, int two, int three){return (one = one < two ? one : two) < three ? one : three;}/*** 获取两字符串的相似度*/public float getSimilarityRatio(String str, String target){return 1 - (float) compare(str, target) / Math.max(str.length(), target.length());}public static void main(String[] args){Levenshtein lt = new Levenshtein();String str = "abc";String target = "acb";System.out.println("similarityRatio=" + lt.getSimilarityRatio(str, target));}

}

函数compare(String str1, String str2)返回一个int值,该值为一个二阶数组的最后一位数值。该函数首先假定一个字串不变时,另一个字串变动1位则差异度+1, 即二阶数组的第一行和第一列的值都+1。而当实际进行比较的字符相同时,则差异度记为0,不同则记为1。那么二阶数组中的每个数,都代表着当前进行比较的两个字串按当前长度截取后的差异度。最终得到完整的字串长度对比后的差异度。可以从str1=null,str2=""开始,str1=="",差异度为零。str1有具体取值,如"a",则差异度为1,str2也取值为"a"的话,差异度又变为0。这时候temp的取值为0或1,即代表了当前是否出现新的差异。

 
原创粉丝点击