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); }