接受一个字符串和一个字符串列表作为参数的 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
文章来源地址https://www.toymoban.com/news/detail-669220.html
文章来源:https://www.toymoban.com/news/detail-669220.html
到了这里,关于Java 计算文本相似度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!