C#和SQL实现的字符串相似度计算代码分享
C#实现:
#region计算字符串相似度 ///<summary> ///计算字符串相似度 ///</summary> ///<paramname="str1">字符串1</param> ///<paramname="str2">字符串2</param> ///<returns>相似度</returns> publicstaticfloatLevenshtein(stringstr1,stringstr2) { //计算两个字符串的长度。 intlen1=str1.Length; intlen2=str2.Length; //比字符长度大一个空间 int[,]dif=newint[len1+1,len2+1]; //赋初值,步骤B。 for(inta=0;a<=len1;a++) { dif[a,0]=a; } for(inta=0;a<=len2;a++) { dif[0,a]=a; } //计算两个字符是否一样,计算左上的值 inttemp; for(inti=1;i<=len1;i++) { for(intj=1;j<=len2;j++) { if(str1.Substring(i-1,1)==str2.Substring(j-1,1)) { temp=0; } else { temp=1; } //取三个值中最小的 dif[i,j]=Min(dif[i-1,j-1]+temp,dif[i,j-1]+1,dif[i-1,j]+1); } } return1-(float)dif[len1,len2]/Math.Max(str1.Length,str2.Length); } #endregion
//比较3个数字得到最小值 privatestaticintMin(inti,intj,intk) { returni<j?(i<k?i:k):(j<k?j:k); }