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

你可能感兴趣的:(算法,java,开发语言,算法)