C#计算字符串相似性

计算字符串相似性的办法很多,甚至最笨的办法可以挨个匹配,这里要讲的是使用莱文史特距离来计算字符串相似性。莱文史特距离概念:假设函数名是LD用于计算两个字符串之间的相似度。譬如有两个字符串A和B。假设以A为基准,那么该算法就是计算把B通过(替换、删除、加字符)等方法变成A需要多少步。例如:A=”abcd”,B=”abc”,那么LD(A,B)=1,只需在B字符串中插入一个字符那么就完全等于AA=”abcd”,B=”abcd”,那么LD(A,B)=,因为这两个货完全相同A=”abcd”,B=”abdc”,那么LD(A,B)=1,因为只需把B中”dc”互换位置就等于A了。A=”fwegwegweg@#2″,B=”ddd*&&%^&”,那么LD(A,B)=????,这个叔真不知道了,要用程序算了。莱文史特距离计算出来的值越大代表步骤越多,说明两个字符串的相似程度越低。譬如大家要做个简易的“文章抄袭”判定功能,那么用这个莱文史特距离完全可以实现个初步方法。算法注释:1、假设字符串str1的长度为n,str2的长度为m。如果n=0,则返回m并退出;(这是句废话)2、如果m=0,则返回n并退出。(这依然是句废话)3、如果上述都不是则要开始进行计算,构建一个数组d[0..m,0..n]。将第0行初始化为0..n,第0列初始化为0..m。依次检查str1的每个字母(i=1..n)。依次检查str2的每个字母(j=1..m)。如果str1[i]=str2[j],则sign=0;(sign仅仅是个标记,没有任何意思,为了记录相等还是不相等)如果str1[i]!=str12[j],则sign=1。将d[i,j]设置为以下三个值中的最小值:紧邻当前格上方的格的值加一,即d[i-1,j]+1紧邻当前格左方的格的值加一,即d[i,j-1]+1当前格左上方的格的值加sign,即d[i-1,j-1]+sign重复上述几步直到循环结束。d[n,m]既为最终的值接下来是用c#写的一款莱文史特距离的实现。大家可以抄袭 <无>

源码与演示:源码出处演示出处

.CodeEntity .code_pieces ul.piece_anchor{width:25px;position:absolute;top:25px;left:-30px;z-index:1000;}.CodeEntity .code_pieces ul.piece_anchor li{width:25px;background: #efe;margin-bottom:2px;}.CodeEntity .code_pieces ul.piece_anchor li{border-left:3px #40AA63 solid;border-right:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li:hover{border-right:3px #40AA63 solid;border-left:3px #efe solid;}.CodeEntity .code_pieces ul.piece_anchor li a{color: #333;padding: 3px 10px;}.CodeEntity .code_pieces .jump_to_code{visibility:hidden;position:relative;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code{visibility:visible;}.CodeEntity .code_pieces .code_piece:hover .jump_to_code a{text-decoration:none;}.CodeEntity .code_pieces h2 i{float:right;font-style:normal;font-weight:normal;}.CodeEntity .code_pieces h2 i a{font-size:9pt;background: #FFFFFF;color:#00A;padding: 2px 5px;text-decoration:none;}

C#计算字符串相似性

相关文章:

你感兴趣的文章:

标签云: