Java 计算文本相似度

接受一个字符串和一个字符串列表作为参数的 Java 方法,用于计算两个字符串之间的相似度。

方法

import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class StringSimilarity {
    /**
     * 计算两个字符串之间的相似度
     * @param str1 第一个字符串
     * @param list1 第一个字符串列表
     * @return 与传入的字符串最相似的字符串
     */
    public static String findMostSimilarString(String str, List<String> list1) {
        // 将字符串列表转换为集合,以便进行快速查找
        Set<String> set1 = new HashSet<>(list1);
        // 从集合中移除第一个字符串,因为我们要比较的是它与其他字符串的相似度
        set1.remove(str);

        // 计算第一个字符串与其他字符串的交集大小
        long intersectionSize = set1.stream().filter(s -> s.equals(str)).count();
        // 计算第一个字符串的长度
        long strLength = str.length();
        // 计算所有字符串的总长度
        long unionSize = set1.size() + strLength - intersectionSize;

        // 计算相似度值(0-1之间)
        double similarity = (double) intersectionSize / unionSize;

        // 找到与传入的字符串最相似的字符串
        String mostSimilarString = null;
        double maxSimilarity = Double.MIN_VALUE;
        for (String s : list1) {
            // 计算当前字符串与传入的字符串的相似度
            double currentSimilarity = calculateSimilarity(str, s, list1);
            // 如果当前相似度大于最大相似度,则更新最大相似度和最相似的字符串
            if (currentSimilarity > maxSimilarity) {
                maxSimilarity = currentSimilarity;
                mostSimilarString = s;
            }
        }

        return mostSimilarString;
    }

    /**
     * 计算两个字符串之间的相似度
     * @param str1 第一个字符串
     * @param str2 第二个字符串
     * @param list2 第二个字符串列表
     * @return 相似度值(0-1之间)
     */
    private static double calculateSimilarity(String str1, String str2, List<String> list2) {
        // 将字符串列表转换为集合,以便进行快速查找
        Set<String> set2 = new HashSet<>(list2);
        // 从集合中移除第二个字符串,因为我们要比较的是它与第一个字符串的相似度
        set2.remove(str2);

        // 计算第一个字符串与第二个字符串的交集大小
        long intersectionSize = set2.stream().filter(s -> s.equals(str2)).count();
        // 计算第一个字符串的长度
        long strLength = str1.length();
        // 计算所有字符串的总长度
        long unionSize = set2.size() + strLength - intersectionSize;

        // 返回相似度值(0-1之间)
        return (double) intersectionSize / unionSize;
    }
}

使用示例

List<String> list1 = Arrays.asList("apple", "banana", "orange");
String str = "banana";
String mostSimilarString = StringSimilarity.findMostSimilarString(str, list1);
System.out.println("Most similar string: " + mostSimilarString); // 输出:banana
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值