字符串相似度算法(编辑距离算法)

这篇博客介绍了如何利用编辑距离算法评估两个字符串的相似度。通过计算一个字符串需要进行多少次移除、替换和添加操作才能变为另一个字符串,以此来确定它们的相似度。举例说明了该算法的步骤,并指出尽管该算法有效,但对于不关心字符顺序的情况可能不适用。
摘要由CSDN通过智能技术生成

编辑距离算法

前言

比较两个字符串的相似度,通常我们会使用编辑距离算法来实现。
下面是常用字符串相似度计算的方法:
字符串相似度的几种度量方法

原理

最小编辑距离的原理是: 比较两个字符串,记录一个字符串通过移除,替换,添加操作转换到指定字符串的次数,来确定两个字符串直接的相似度。

公式

(操作次数)/ Math.max(str.length, str.length)  = 相似度 

例子

字符串1: bsada
字符串2: asqa

我们想把字符串2 变成字符串1 那么步骤如下:
bsada -> asada -> asda -> asqa 这里要经过3步操作,所以相似度就是 3/5 = 0.6
当然你也可以这样操作
bsada -> asada -> asqda -> asqd -> asqa 如果这样子做的话要经过4步操作。

所以此算法的核心就是求最小的操作次数,其实可以用矩阵来表示:

b s a d a
0 1 2 3 4 5
a 1 1 2 2 3 4
s 2 2 1 2 3 4
q 3 3 2 2 3 4
a 4 4 3 2 3 3

通过表格分析我们能发现:最小距离的规则如下:

  • 如果两字符相等则取左上角的数
  • 如果两字符不相等则取上,左,左上角的最小数加一

实现

    /**
     * 字符串相似度比较
     * 这里为了使空间使用率较高,
     * 请把字符串较短的放到str1参数
     *
     * @param str1 字符串1
     * @param str2 字符串2
     * @return 相似度
     */
    public static BigDecimal getLevenshteinDistance(String str1, String str2) {
   
        char[] char1 = str1.toCharArray
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符串相似度算法是用来比较两个字符串之间的相似程度的算法。常用的字符串相似度计算方法有编辑距离算法、余弦相似度算法、Jaccard相似度算法等。其中,编辑距离算法是一种常用的字符串相似度计算方法,它通过计算两个字符串之间的最小编辑距离来衡量它们的相似程度。编辑距离指的是将一个字符串转换成另一个字符串所需的最少操作次数,包括插入、删除、替换三种操作。 编辑距离算法的实现可以采用动态规划的方法,具体步骤如下: 1. 初始化一个二维数组,数组的行数为第一个字符串度加1,列数为第二个字符串度加1。 2. 将第一行和第一列的值分别初始化为0到列数和0到行数。 3. 从第二行和第二列开始,遍历整个二维数组,计算每个位置的值。具体计算方法如下: - 如果第一个字符串的当前字符等于第二个字符串的当前字符,则该位置的值等于左上角位置的值。 - 否则,该位置的值等于左上角、左边、上边三个位置中的最小值加1。 4. 遍历完整个二维数组后,右下角的值即为两个字符串之间的最小编辑距离。 除了编辑距离算法,余弦相似度算法和Jaccard相似度算法也是常用的字符串相似度计算方法。余弦相似度算法通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,适用于文本分类、信息检索等领域。Jaccard相似度算法则通过计算两个集合的交集与并集之间的比值来衡量它们的相似程度,适用于推荐系统、社交网络等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值