C# 计算两个字符串的类似度

咱们在作数据系统的时候,常常会用到模糊搜索,可是,数据库提供的模糊搜索并不具有按照相关度进行排序的功能。
 如今提供一个比较两个字符串类似度的方法。
 经过计算出两个字符串的类似度,就能够经过Linq在内存中对数据进行排序和筛选,选出和目标字符串最类似的一个结果。
 
本次所用到的类似度计算公式是 类似度=Kq*q/(Kq*q+Kr*r+Ks*s) (Kq > 0 , Kr>=0,Ka>=0)
其中,q是字符串1和字符串2中都存在的单词的总数,s是字符串1中存在,字符串2中不存在的单词总数,r是字符串2中存在,字符串1中不存在的单词总数. Kq,Kr和ka分别是q,r,s的权重,根据实际的计算状况,咱们设Kq=2,Kr=Ks=1.
根据这个类似度计算公式,得出如下程序代码:
/// <summary>
 /// 获取两个字符串的类似度
/// </summary>
 /// <param name=”sourceString”>第一个字符串</param>
 /// <param name=”str”>第二个字符串</param>
 /// <returns></returns>
 public static decimal GetSimilarityWith(this string sourceString, string str)
 {

decimal Kq = 2;
 decimal Kr = 1;
 decimal Ks = 1;

char[] ss = sourceString.ToCharArray();
 char[] st = str.ToCharArray();

//获取交集数量
int q = ss.Intersect(st).Count();
 int s = ss.Length – q;
 int r = st.Length – q;

return Kq * q / (Kq * q + Kr * r + Ks * s);
 }

 
这就是计算字符串类似度的方法,可是实际应用时,还须要考虑到同义词或近义词的状况发生, 如“爱造人小说阅读的更新最快”和“爱造人小说阅读地更新最快” 。两个字符串在必定意义上说实际上是相同的,若是使用上述方法计算就会出现不许确的状况。因此在实际应用的时候,咱们须要替换同义词或近义词,计算替换后的类似度。
 若是是近义词,须要综合替换近义词前和近义词后的计算结果,得出两个字符串的实际类似度。

 
摘自  kuibono
相关文章
相关标签/搜索