java字符串相似度算法

yizhihongxing

Java字符串相似度算法是一个有趣而且实用的话题。下面给出一份完整的攻略,帮助你快速了解和学习该算法。

什么是Java字符串相似度算法?

Java字符串相似度算法是用来计算两个字符串之间相似度的算法。相似度指两个字符串之间的相似程度,可以用来比较两个字符串的相似性。常用的算法有编辑距离算法(Levenshtein Distance)、余弦相似性算法(Cosine Similarity)等。

如何计算字符串相似度?

编辑距离算法(Levenshtein Distance)

编辑距离算法是一个常见的字符串相似度算法,用于计算两个字符串之间的编辑距离。编辑距离指将一个字符串转换成另一个字符串所需的最小编辑次数(编辑包括插入、删除、替换等操作)。

Java代码实现:

public static int editDistance(String s, String t) {
    int m = s.length();
    int n = t.length();
    int[][] d = new int[m + 1][n + 1];
    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= n; j++) {
            if (i == 0) {
                d[i][j] = j;
            } else if (j == 0) {
                d[i][j] = i;
            } else if (s.charAt(i - 1) == t.charAt(j - 1)) {
                d[i][j] = d[i - 1][j - 1];
            } else {
                d[i][j] = 1 + Math.min(Math.min(d[i][j - 1], d[i - 1][j]), d[i - 1][j - 1]);
            }
        }
    }
    return d[m][n];
}

余弦相似性算法(Cosine Similarity)

余弦相似性算法是一种基于向量空间模型的字符串相似度算法,计算两个字符串之间的余弦相似度。余弦相似度值范围在0到1之间,值越大表示两个字符串越相似。

Java代码实现:

public static double cosineSimilarity(String s1, String s2) {
    Map<String, Integer> map1 = toMap(s1);
    Map<String, Integer> map2 = toMap(s2);
    Set<String> set = new HashSet<>(map1.keySet());
    set.addAll(map2.keySet());
    int[] v1 = new int[set.size()];
    int[] v2 = new int[set.size()];
    int i = 0;
    for (String key : set) {
        v1[i] = map1.getOrDefault(key, 0);
        v2[i] = map2.getOrDefault(key, 0);
        i++;
    }
    return dot(v1, v2) / (norm(v1) * norm(v2));
}

private static Map<String, Integer> toMap(String s) {
    String[] arr = s.split("\\s");
    Map<String, Integer> map = new HashMap<>();
    for (String word : arr) {
        map.put(word, map.getOrDefault(word, 0) + 1);
    }
    return map;
}

private static int dot(int[] v1, int[] v2) {
    int sum = 0;
    for (int i = 0; i < v1.length; i++) {
        sum += v1[i] * v2[i];
    }
    return sum;
}

private static double norm(int[] v) {
    int sum = 0;
    for (int i = 0; i < v.length; i++) {
        sum += v[i] * v[i];
    }
    return Math.sqrt(sum);
}

示例说明

示例1

计算字符串“kitten”和“sitting”的相似度。

使用编辑距离算法计算:

int distance = editDistance("kitten", "sitting");
double similarity = 1.0 / (1.0 + distance);
System.out.println(similarity); // output: 0.4444444444444444

使用余弦相似性算法计算:

double similarity = cosineSimilarity("kitten", "sitting");
System.out.println(similarity); // output: 0.5

示例2

计算两篇文章的相似度。

使用余弦相似性算法计算:

String article1 = "Hello world, I am a Java programmer.";
String article2 = "Hi there, I am a Java developer and I like coding.";
double similarity = cosineSimilarity(article1, article2);
System.out.println(similarity); // output: 0.5860092167175827

以上就是Java字符串相似度算法的完整攻略,包括了编辑距离算法和余弦相似性算法的实现和示例说明。菜鸟们可以结合实际场景选择相应的算法进行应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java字符串相似度算法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java Stream常见用法汇总,开发效率大幅提升

    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 如果访问不了Github,可以访问gitee地址。 gitee地址 Java8 新增的 St…

    Java 2023年4月17日
    00
  • Java简单实现定时器

    一、Java简单实现定时器 1. 实现原理 Java实现定时器的原理是通过Java语言自带的Timer和TimerTask类来完成的。Timer类可以让我们在一定的时间间隔内执行任务,而TimerTask则是具体要执行的任务。 2. 使用方法 2.1 创建定时器 Timer timer = new Timer(); 2.2 创建任务 class Task e…

    Java 2023年5月18日
    00
  • SpringBoot注册Filter的两种实现方式

    下面是关于“SpringBoot注册Filter的两种实现方式”的完整攻略。 在SpringBoot中,有两种方式可以注册Filter: 1. 通过@Configuration注解注册Filter 在SpringBoot中,可以通过在@Configuration类中添加@Bean注解的方式注册Filter。示例代码如下: @Configuration pub…

    Java 2023年5月15日
    00
  • MySQL示例讲解数据库约束以及表的设计

    “MySQL示例讲解数据库约束以及表的设计”是一篇比较综合性的文章,内容在开始之前应该分章节引出。以下是我根据自己的经验和理解对这个主题进行的完整攻略。 1. 关于数据库约束 “数据库约束”是指在创建数据库表时,针对表内字段相关的行为限制和处理措施。常见的数据库约束有NOT NULL约束、UNIQUE约束、PRIMARY KEY约束、FOREIGN KEY约…

    Java 2023年5月26日
    00
  • SpringMVC 接收前端传递的参数四种方式小结

    下面我将为你详细讲解“SpringMVC 接收前端传递的参数四种方式小结”的攻略。 一、前言 在 SpringMVC 框架中,接收前端传递的参数是非常常见的操作,而我们可以通过以下四种方式来实现参数接收: URL传参 表单提交 请求参数自动封装 RESTful接口传参 下面我们将分别对这四种方式进行详细讲解。 二、URL传参 在 SpringMVC 框架中,…

    Java 2023年6月15日
    00
  • Java编程调用微信分享功能示例

    下面将详细讲解“Java编程调用微信分享功能示例”的完整攻略。 准备工作 1.获取微信开发者账号 要调用微信分享功能,首先需要先去微信公众平台申请开发者账号。 2.注册开发者账户 如果你还没有微信公众平台的账号,请先注册账户并绑定一个公众号。 3.开通JS接口权限 在微信公众平台中,需要先开通JS接口权限,该权限可以开启微信的网页开发能力,包括调用微信分享功…

    Java 2023年5月26日
    00
  • Java实现SHA-1算法实例

    下面是“Java实现SHA-1算法实例”的完整攻略。 简介 SHA-1是一种哈希算法,用于产生消息摘要。它将消息作为输入,输出一个128位(20字节)的消息摘要。它被广泛用于数字签名等领域。 本攻略将介绍如何在Java中实现SHA-1算法,以便在需要时生成文本的消息摘要。 实现步骤 步骤1:导入SHA-1算法库 Java自带了SHA-1算法库,我们只需要导入…

    Java 2023年5月19日
    00
  • java实现文件上传下载和图片压缩代码示例

    Java实现文件上传 1. 准备工作 在进行文件上传前,需要在服务器上建立一个存储上传文件的目录,并且需要在前端用HTML5的file标签来设置文件选择框。 2. 前端代码 前端代码使用HTML5的form表单和一个file选择框,具体如下: <!DOCTYPE html> <html lang="en"> &lt…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部