aspcms分类信息网站,微信引流推广网站建设,公众号开发者是什么意思,wordpress 翻译语言包平时的编码中#xff0c;我们经常需要判断两个文本的相似性#xff0c;不管是用来做文本纠错或者去重等等#xff0c;那么我们应该以什么维度来判断相似性呢#xff1f;这些算法又怎么实现呢#xff1f;这篇文章对常见的计算方式做一个记录。Levenshtein 距离#xff0c;… 平时的编码中我们经常需要判断两个文本的相似性不管是用来做文本纠错或者去重等等那么我们应该以什么维度来判断相似性呢这些算法又怎么实现呢这篇文章对常见的计算方式做一个记录。Levenshtein 距离又称编辑距离指的是两个字符串之间由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符插入一个字符删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的故又叫Levenshtein Distance。我们在做数据系统的时候经常会用到模糊搜索但是数据库提供的模糊搜索并不具备按照相关度进行排序的功能。现在提供一个比较两个字符串相似度的方法。通过计算出两个字符串的相似度就可以通过Linq在内存中对数据进行排序和筛选选出和目标字符串最相似的一个结果。本次所用到的相似度计算公式是 相似度Kqq/(KqqKrrKss) (Kq 0 , Kr0,Ka0) 其中q是字符串1和字符串2中都存在的单词的总数s是字符串1中存在字符串2中不存在的单词总数r是字符串2中存在字符串1中不存在的单词总数. Kq,Kr和ka分别是q,r,s的权重根据实际的计算情况我们设Kq2KrKs1. 根据这个相似度计算公式得出以下程序代码
/// summary/// 获取两个字符串的相似度
/// /summary/// param name”sourceString”第一个字符串/param/// param name”str”第二个字符串/param/// returns/returnspublic 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);}这就是计算字符串相似度的方法但是实际应用时还需要考虑到同义词或近义词的情况发生 如“爱造人小说阅读的更新最快”和“爱造人小说阅读地更新最快” 。两个字符串在一定意义上说其实是相同的如果使用上述方法计算就会出现不准确的情况。所以在实际应用的时候我们需要替换同义词或近义词计算替换后的相似度。如果是近义词需要综合替换近义词前和近义词后的计算结果得出两个字符串的实际相似度。