博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#通过编辑距离计算两个字符串的相似度的代码
阅读量:6545 次
发布时间:2019-06-24

本文共 3423 字,大约阅读时间需要 11 分钟。

将开发过程中较好的一些代码段备份一下,下面的代码是关于C#通过编辑距离计算两个字符串的相似度的代码,应该能对码农们有些帮助。

using System;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace Levenshtein{    public delegate void AnalyzerCompletedHander(double sim);    public class LevenshteinDistance:IDisposable    {        private string str1;        private string str2;        private int[,] index;        int k;        Task
task; public event AnalyzerCompletedHander AnalyzerCompleted; public string Str1 { get { return str1; } set { str1 = Format(value); index = new int[str1.Length, str2.Length]; } } public string Str2 { get { return str2; } set { str2 = Format(value); index = new int[str1.Length, str2.Length]; } } public int TotalTimes { } public bool IsCompleted { get { return task.IsCompleted; } } public LevenshteinDistance(string str1, string str2) { this.str1 = Format(str1); this.str2 = Format(str2); index = new int[str1.Length, str2.Length]; } public LevenshteinDistance() { } public void Start() { task = new Task
(Analyzer); task.Start(); task.ContinueWith(o => Completed(o.Result)); } public double StartAyns() { task = new Task
(Analyzer); task.Start(); task.Wait(); return task.Result; } private void Completed(double s) { if (AnalyzerCompleted != null) { AnalyzerCompleted(s); } } private double Analyzer() { if (str1.Length == 0 || str2.Length == 0) return 0; for (int i = 0; i < str1.Length; i++) { for (int j = 0; j < str2.Length; j++) { k = str1[i] == str2[j] ? 0 : 1; if (i == 0&&j==0) { continue; } else if (i == 0) { index[i, j] = k + index[i, j - 1]; continue; } else if (j == 0) { index[i, j] = k + index[i - 1, j]; continue; } int temp = Min(index[i, j - 1], index[i - 1, j], index[i - 1, j - 1]); index[i, j] = temp + k; } } float similarty = 1 - (float)index[str1.Length - 1, str2.Length - 1] / (str1.Length > str2.Length ? str1.Length : str2.Length); return similarty; } private string Format(string str) { str = Regex.Replace(str, @"[^a-zA-Z0-9u4e00-u9fa5s]", ""); return str; } private int Min(int a, int b, int c) { int temp = a < b ? a : b; temp = temp < c ? temp : c; return temp; } public void Dispose() { task.Dispose(); } }}

转载于:https://blog.51cto.com/14176413/2345343

你可能感兴趣的文章
Linux 系统的单用户模式、修复模式、跨控制台登录在系统修复中的运用
查看>>
《http权威指南》阅读笔记(十)
查看>>
JQuery UI Widget Factory官方Demo
查看>>
Atlas揭秘 —— 绑定(Binding)
查看>>
install xcode_3.2.5_and_iOS_sdk_4.2 _final with mac lion10.7.3
查看>>
JavaScript权威指南(第6版)
查看>>
sql 自定義百分比轉換小數函數
查看>>
一起谈.NET技术,C# 委托,事件和Lambda表达式
查看>>
远离云计算风险三步走
查看>>
Silverlight 游戏开发小技巧:技能冷却效果2(Cool“.NET研究”down)2
查看>>
An Introduction to Asynchronous Programming and Twisted (2)
查看>>
vue 组件编码规范
查看>>
IEC61850与MMS的服务映射
查看>>
Java 泛型: 什么是PECS(Producer Extends, Consumer Super)
查看>>
软件包管理-打包解包压缩解压
查看>>
maven构建scala项目
查看>>
Memcached分布式缓存-windows上初步使用-网摘
查看>>
IIS无法启动的问题
查看>>
如何通过结构中的某个变量获取结构本身的指针?(container_of详解)
查看>>
Android 关于mnt/sdcard和sdcard的区别
查看>>