当前位置: 首页 > news >正文

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
http://www.lryc.cn/news/136912.html

相关文章:

  • MySQL 视图
  • 深入理解回调函数qsort:从入门到模拟实现
  • 【Git基础】获取远程仓库
  • chatGPT界面
  • windows一键启动jupyter
  • 树形结构的快速生成
  • Android笔记(二十七):自定义Dialog实现居中Toast
  • css实现文字的渐变,适合大屏
  • 软考高级系统架构设计师系列论文八十七:论企业应用集成
  • C++设计模式之适配器模式
  • 山西电力市场日前价格预测【2023-08-24】
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(一)
  • 百度Q2财报:营收341亿元实现加速增长,净利润高速增长44%,增长强劲全线重构
  • ARM DIY(二)配置晶振频率
  • 高等数学:线性代数-第三章
  • 深入理解 SQL 注入攻击原理与防御措施
  • QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)
  • 爱校对发布全新PDF校对工具,为用户带来更为便捷的校正体验
  • 记录protocol buffers Mac安装
  • 基于Jenkins自动打包并部署docker、PHP环境,ansible部署-------从小白到大神之路之学习运维第86天
  • 【附安装包】Midas Civil2019安装教程
  • Apache StreamPark系列教程第一篇——安装和体验
  • mysql replace insert update delete
  • 实现SSM简易商城项目的商品查询功能
  • 视频批量剪辑矩阵分发系统源码开源分享----基于PHP语言
  • 亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列
  • 第11章 优化多线程应用程序
  • 分布式下的session共享问题
  • webrtc的Sdp中的Plan-b和UnifiedPlan
  • LLM-Rec:基于提示大语言模型的个性化推荐