C# 实现字符串相似度计算(Levenshtein 算法)

简介: 介绍计算字符串编辑距离的算法,基于Levenshtein距离实现相似度分析,适用于搜索建议与拼写纠错,附C#代码示例。

计算两个字符串的编辑距离,判断相似度,常用于搜索建议、拼写纠错。

public class StringSimilarity
{
    // 计算Levenshtein编辑距离
    public static int CalculateLevenshteinDistance(string s1, string s2)
    {
        int[,] dp = new int[s1.Length + 1, s2.Length + 1];
        // 初始化边界
        for (int i = 0; i <= s1.Length; i++) dp[i, 0] = i;
        for (int j = 0; j <= s2.Length; j++) dp[0, j] = j;
        // 动态规划计算
        for (int i = 1; i <= s1.Length; i++)
        {
            for (int j = 1; j <= s2.Length; j++)
            {
                int cost = s1[i - 1] == s2[j - 1] ? 0 : 1;
                dp[i, j] = Math.Min(Math.Min(dp[i - 1, j] + 1, dp[i, j - 1] + 1), dp[i - 1, j - 1] + cost);
            }
        }
        return dp[s1.Length, s2.Length];
    }
    // 计算相似度(0-100%)
    public static double CalculateSimilarity(string s1, string s2)
    {
        if (string.IsNullOrEmpty(s1) && string.IsNullOrEmpty(s2)) return 100;
        if (string.IsNullOrEmpty(s1) || string.IsNullOrEmpty(s2)) return 0;
        int distance = CalculateLevenshteinDistance(s1, s2);
        int maxLength = Math.Max(s1.Length, s2.Length);
        return (1 - (double)distance / maxLength) * 100;
    }
    // 调用示例
    public static void TestSimilarity()
    {
        string s1 = "C#编程教程";
        string s2 = "C#程序设计";
        double similarity = CalculateSimilarity(s1, s2);
        Console.WriteLine($"相似度: {similarity:F2}%");
    }
}
相关文章
|
4月前
|
存储 算法 C#
C# 哈希值计算:MD5/SHA256 加密
本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。
|
2月前
|
缓存 JSON API
SnapTranslate轻量划词翻译工具:开箱即用的外文阅读神器(详细教程+原理拆解)
SnapTranslate是一款轻量开源的划词翻译工具,基于Python开发,支持Windows全场景(PDF/Word/网页等)。选中文本+Ctrl+L秒出翻译,悬浮窗就近提示+日志记录,无广告、不占内存、极简高效。代码已开源,新手可轻松定制。
497 2
|
4月前
|
Web App开发 数据采集 存储
使用 Selenium 爬取京东手机销量与评分数据
使用 Selenium 爬取京东手机销量与评分数据
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
37_开源LLM:LLaMA与Mistral的突破_深度解析
在人工智能领域,2025年已经成为开源大语言模型的黄金时代。从Meta的LLaMA系列到欧洲初创公司Mistral AI的创新突破,开源LLM正在重塑整个AI生态系统的格局。截至2025年4月,Meta的LLaMA系列已成为全球下载量最高、社区使用最活跃的开源大语言模型之一,并被集成于数百个学术项目、创业平台和AI产品之中
799 1
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
1205 1
|
存储 缓存 网络协议
ARP协议:地址解析协议
ARP协议:地址解析协议
469 0
|
开发框架 .NET API
实现数据同步的webapi接口
【10月更文挑战第10天】本文介绍了一个在ASP.NET Core中使用C#实现数据同步的Web API接口示例。首先定义了用户数据模型和Entity Framework Core数据库上下文,然后创建了一个控制器来处理客户端的数据同步请求:通过清空现有数据并添加新数据实现同步。注意实际应用需考虑更多细节如错误处理等。
481 3
|
XML 运维 JavaScript
winsw 是什么工具
【6月更文挑战第9天】winsw 是什么工具
2364 6
|
开发框架 前端开发 JavaScript
基于Admin.NET框架的前端的一些改进和代码生成处理(1)
基于Admin.NET框架的前端的一些改进和代码生成处理(1)
|
数据采集 并行计算 物联网
使用LLaMA Factory来训练智谱ChatGLM3-6B模型
使用LLaMA Factory来训练智谱ChatGLM3-6B模型