C#利用莱文史特距离算法计算字符串相似性的方法
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
这篇文章主要介绍了C#计算字符串相似性的方法,实例分析了C#计算字符串相似性的原理与算法实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了C#计算字符串相似性的方法。分享给大家供大家参考。具体如下: 计算字符串相似性的办法很多,甚至最笨的办法可以挨个匹配,这里要讲的是使用莱文史特距离来计算字符串相似性。 莱文史特距离概念:假设函数名是LD 用于计算两个字符串之间的相似度。 譬如有两个字符串A和B。假设以A为基准,那么该算法就是计算把B通过(替换、删除、加字符)等方法变成A需要多少步。 例如: A=”abcd”, B=”abc”, 那么 LD(A,B)=1,只需在B字符串中插入一个字符那么就完全等于A A=”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#写的一款莱文史特距离的实现。
希望本文所述对大家的C#程序设计有所帮助。 该文章在 2023/3/22 18:26:05 编辑过 |
关键字查询
相关文章
正在查询... |