架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 26506|回复: 2

[资料] 用C#实现字符串相似度算法

[复制链接]
发表于 2019-4-23 12:59:18 | 显示全部楼层 |阅读模式
最近需要处理一个问题,就是比较用户输入的字符串和系统取到的字符串,如果误差不是很大的,系统就认为符合要求的,最好可以设置阈值。
在搞验证码识别的时候需要比较字符代码的相似度用到“编辑距离算法”,关于原理和C#实现做个记录。

据百度百科介绍:

编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

  例如将kitten一字转成sitting:

  sitten (k→s)

  sittin (e→i)

  sitting (→g)

  俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。因此也叫Levenshtein Distance。

例如

如果str1="ivan",str2="ivan",那么经过计算后等于 0。没有经过转换。相似度=1-0/Math.Max(str1.length,str2.length)=1
如果str1="ivan1",str2="ivan2",那么经过计算后等于1。str1的"1"转换"2",转换了一个字符,所以距离是1,相似度=1-1/Math.Max(str1.length,str2.length)=0.8

应用

  • DNA分析
  • 拼字检查
  • 语音辨识
  • 抄袭侦测



算法用C#实现:

测试代码:




QQ截图20190423125322.jpg

从测试结果得出,空格或者标点符号字符串位置不同都会影响相似度的结果,所以,在进行字符串相识度比较的时候,建议去掉字符串中的所有空格和特殊符号再调用算法

参考资料:http://www.cnblogs.com/ECJTUACM-873284962/p/7661375.html

在GitHub上面,也有一个关于c#字符串相似度比较的类库

FuzzyString是一个开发用于我日常工作的库,用于协调不同电网模型之间的命名约定。我已经剥离了电力系统特定的代码,并将可以有效地用作字符串扩展的内容放在一起,以确定两个字符串之间的近似相等性。此处使用的所有算法都已从在线资源中提取,转换为C#,并编译到此库中。我发现了几个其他类似的开源实现,但没有用于.NET / C#。将* .dll添加到项目中将允许您访问此扩展以及ApproximatelyEquals()扩展名下的各个扩展。



地址:https://github.com/kdjones/fuzzystring

nuget安装:

该项目中包含的算法:

  • 汉明距离
  • Jaccard距离
  • Jaro距离
  • Jaro-Winkler距离
  • Levenshtein距离
  • 最长公共
  • 子序列最长公共子串
  • 重叠系数
  • Ratcliff-Obershelp相似性
  • Sorensen-Dice距离
  • Tanimoto系数



使用:


结果:

QQ截图20190423125819.jpg

(完)




上一篇:软件测试的艺术第三版 pdf
下一篇:《数据分析师八大能力培养》不加密完整课程
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-5-6 13:11:34 | 显示全部楼层
涨知识来了
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-7 15:01:05 | 显示全部楼层
是不是回复了才能看到代码
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-20 06:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表