博客
关于我
java判断两个字符串相似的方法
阅读量:797 次
发布时间:2023-01-28

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

Java判断两个字符串相似的方法

在实际应用中,判断两个字符串的相似度常常是通过计算它们的相似度系数来实现的。常见的相似度系数包括编辑距离、余弦相似度、Jaccard系数等。

比较字符串的相似度

在文本匹配、数据清洗、搜索等操作中,判断两个字符串的相似度是非常有用的需求。通过计算两个字符串的相似度系数,可以有效地衡量它们的相似程度。

编辑距离

编辑距离,也称为Levenshtein距离,是一种用于字符串相似度比较的常见方法。它表示将一个字符串转换为另一个字符串所需的最少操作数。以下是计算编辑距离的具体实现:

public int calculateEditDistance(String s1, String s2) {    int m = s1.length();    int n = s2.length();    int[][] dp = new int[m + 1][n + 1];        for (int i = 0; i <= m; i++) {        dp[i][0] = i;    }        for (int j = 0; j <= n; j++) {        dp[0][j] = j;    }        for (int i = 1; i <= m; i++) {        for (int j = 1; j <= n; j++) {            if (s1.charAt(i - 1) == s2.charAt(j - 1)) {                dp[i][j] = dp[i - 1][j - 1];            } else {                dp[i][j] = Math.min(dp[i - 1][j - 1] + 1,                                   Math.min(dp[i][j - 1] + 1,                                            dp[i - 1][j] + 1));            }        }    }        return dp[m][n];}

以上代码使用动态规划算法计算两个字符串之间的编辑距离。dp[i][j] 表示将 s1 的前 i 个字符转换为 s2 的前 j 个字符所需的最小编辑操作数。函数返回两个字符串的编辑距离。

余弦相似度

余弦相似度是一种常用的度量两个向量之间相似度的方法,可以用于度量两个字符串之间的相似度。以下是余弦相似度的具体实现:

public double calculateCosineSimilarity(String s1, String s2) {    Map
vector1 = generateVector(s1); Map
vector2 = generateVector(s2); double dotProduct = 0.0; double norm1 = 0.0; double norm2 = 0.0; for (Character key : vector1.keySet()) { if (vector2.containsKey(key)) { dotProduct += vector1.get(key) * vector2.get(key); } norm1 += Math.pow(vector1.get(key), 2); } for (Character key : vector2.keySet()) { norm2 += Math.pow(vector2.get(key), 2); } double similarity = dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2)); return similarity;}private Map
generateVector(String s) { Map
vector = new HashMap<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (vector.containsKey(c)) { vector.put(c, vector.get(c) + 1); } else { vector.put(c, 1); } } return vector;}

以上代码使用余弦相似度计算两个字符串之间的相似度。calculateCosineSimilarity 函数接受两个字符串 s1s2,返回它们的余弦相似度。这项技术可以用来衡量两个字符串的内容相似度。

Jaccard系数

Jaccard系数是一种用于计算两个集合之间相似度的方法,也可以用于度量两个字符串之间的相似度。以下是Jaccard系数的具体实现:

import java.util.HashSet;import java.util.Set;import java.util.HashMap;import java.util.Map;public class Main {    public static double calculateJaccardSimilarity(String str1, String str2) {        Set
set1 = new HashSet<>(); for (char c : str1.toCharArray()) { set1.add(c); } Set
set2 = new HashSet<>(); for (char c : str2.toCharArray()) { set2.add(c); } Set
intersection = new HashSet<>(set1); intersection.retainAll(set2); Set
union = new HashSet<>(set1); union.addAll(set2); if (union.isEmpty()) { return 0.0; } double jaccardSimilarity = (double) intersection.size() / union.size(); return jaccardSimilarity; } public static void main(String[] args) { String str1 = "这两天,河北廊坊市人民医院退还核酸检测费的消息引发热议。奔流新闻记者从廊坊市人民医院财务科证实,'从5月20日开始对收到短信的市民退费,多数成年人已经完成退费,今天开始对青少年儿童退费。'"; String str2 = "5月20日,一些市民收到廊坊市人民医院发来的短信:按上级要求退还2020年至2021年核酸检测费。请持身份证于5月20日-6月20日工作日时间到市医院财务部退费。"; double similarity = calculateJaccardSimilarity(str1, str2); System.out.println("Jaccard Similarity: " + similarity); }}

以上代码使用Jaccard系数计算两个字符串之间的相似度。calculateJaccardSimilarity 函数将两个字符串转换为字符集合,计算它们的交集和并集,然后返回Jaccard相似度。

这些方法各有优缺点,可以根据具体需求选择最合适的相似度计算方式。

转载地址:http://pjryk.baihongyu.com/

你可能感兴趣的文章
Java基础学习总结(59)——30 个java编程技巧
查看>>
Java类实现一个类的障眼法
查看>>
Java基础学习总结(5)——多态
查看>>
Java基础学习总结(60)——Java常用的八种排序算法
查看>>
java计算机毕业设计(附源码)电影管理系统的设计与实现(springboot+mysql+maven+论文)
查看>>
Java基础学习总结(63)——Java集合总结
查看>>
Java基础学习总结(64)——Java内存管理
查看>>
Java基础学习总结(66)——配置管理库typesafe.config教程
查看>>
Java基础学习总结(67)——Java接口API中使用数组的缺陷
查看>>
Java基础学习总结(68)——有关Java线程方面的面试题
查看>>
Java基础学习总结(70)——开发Java项目常用的工具汇总
查看>>
Java基础学习总结(73)——Java最新面试题汇总
查看>>
Java基础学习总结(75)——Java反射机制及应用场景
查看>>
Java基础学习总结(76)——Java异常深入学习研究
查看>>
java酒店管理(ssm)
查看>>
Java基础学习总结(80)——Java性能优化详解
查看>>
Kubernetes 笔记 08 Deployment 副本管理 重新招一个员工来填坑
查看>>
Java基础知识陷阱系列
查看>>
Kubernetes 网络模型和网络通信
查看>>
Java基础系列
查看>>