C# 计算两个字符串的相似度
2017-01-02 17:55
218 查看
我们在做数据系统的时候,经常会用到模糊搜索,但是,数据库提供的模糊搜索并不具备按照相关度进行排序的功能。 现在提供一个比较两个字符串相似度的方法。 通过计算出两个字符串的相似度,就可以通过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
相关文章推荐
- C#计算两个字符串的相似度
- C#计算两个字符串的相似度
- 计算两个字符串相似度
- 字符串相似度计算的方法,使用SQL以及C#实现,本文非原创摘自网络(.NET SQL技术交流群入群206656202需注明博客园)
- 计算两个字符串的相似度(递归和DP)
- C#和SQL实现的字符串相似度计算代码分享
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- 计算两个字符串相似度的算法
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- 利用编辑距离(Edit Distance)计算两个字符串的相似度
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- C#和SQL实现的字符串相似度计算代码分享
- 编程之美3.3 计算两个字符串的相似度
- 编辑距离(LD)计算两个字符串相似度
- 编程之美:计算两个字符串的相似度---动态规划实现
- 比较字符串总结:如果计算两个字符串的相似度或者距离
- 编辑距离LCS算法详解:Levenshtein Distance算法计算两个字符串的相似度
- C#计算字符串长度(中文两个字符)
- C#计算2个字符串的相似度