java文本相似度

在 Java 中,可以使用一些现成的库来比较文本的相似度。这里,我将为您提供一个使用 Jaccard 相似度算法(集合相似度)比较文本相似度的方法。首先,请确保将 commons-collections4-4.4.jar 添加到项目的类路径中。您可以从 Maven Central 仓库下载这个 JAR 文件。

  1. 添加 Maven 依赖:

<dependency>
    <groupId>org.apache.commonsgroupId>
    <artifactId>commons-collections4artifactId>
    <version>4.4version>
dependency>

  1. 使用 Jaccard 相似度算法比较文本相似度的 Java 方法:
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.Transformer;

import java.util.ArrayList;
import java.util.List;

public class TextSimilarity {

    public static double jaccardSimilarity(String text1, String text2) {
        List<String> words1 = tokenize(text1);
        List<String> words2 = tokenize(text2);

        List<String> union = new ArrayList<>(words1);
        CollectionUtils.addAll(union, words2);

        List<String> intersection = ListUtils.intersection(words1, words2);

        return (double) intersection.size() / union.size();
    }

    private static List<String> tokenize(String text) {
        // 您可以根据需要替换为您喜欢的分词器,例如:结巴分词等
        String[] tokens = text.toLowerCase().split("\\s+");
        return new ArrayList<>(List.of(tokens));
    }

    public static void main(String[] args) {
        String text1 = "今天是个好天气。";
        String text2 = "今天天气真好。";

        double similarity = jaccardSimilarity(text1, text2);
        System.out.println("文本相似度: " + similarity);
    }
}

这个示例中的 jaccardSimilarity 方法使用 Jaccard 系数计算两个字符串之间的相似度。tokenize 方法负责将输入字符串分解为单词。您可以根据需要替换为您喜欢的分词器。

请注意,这个示例仅提供了一个基本的文本相似度比较方法。实际上,有许多其他相似度指标和算法,如余弦相似度、编辑距离等,您可以根据实际需求进行选择。

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