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

java 相似度计算

 


public class Same {

  public static void main(String[] args) {
    //读取excel中的数据进行相似度的计算
    File file = new File("D:\\1.xlsx");
    try {
      XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(file));
      int tabIndex = 0;
      Sheet sheet = xssfWorkbook.getSheetAt(tabIndex);
      Row row = null;
      Cell cell1 = null;
      List<String> list = new ArrayList<>();
    HashMap map = new HashMap();
      for (int i = 0; i <= 899; i++) {
        row = sheet.getRow(i);     //指定行
        cell1 = row.getCell(0);  //指定列
        cell1.setCellType(CellType.STRING);
        String cellValue0 = cell1.getStringCellValue();
        list.add(cellValue0);
      }
      //双重for循环,去掉重复的比较
      for (int i = 0; i < list.size()-1; i++) {
        for (int j = i+1; j < list.size(); j++) {
          String a = list.get(i);
          String b = list.get(j);
          float levenshtein = Levenshtein(a, b);
          if (levenshtein >= 0.80) {
            System.out.println(a+"<--->"+b+","+levenshtein+"\r\n");
          }
        }
      }
      System.out.println(map.size());
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  /**
   * 相似度公共方法
   * @param a
   * @param b
   * @return
   */
  public static float Levenshtein(String a, String b) {
    if (a == null && b == null) {
      return 1f;
    }
    if (a == null || b == null) {
      return 0F;
    }
    int editDistance = editDis(a, b);
    return 1 - ((float) editDistance / Math.max(a.length(), b.length()));
  }

  private static int editDis(String a, String b) {

    int aLen = a.length();
    int bLen = b.length();

    if (aLen == 0) {
      return aLen;
    }
    if (bLen == 0) {
      return bLen;
    }

    int[][] v = new int[aLen + 1][bLen + 1];
    for (int i = 0; i <= aLen; ++i) {
      for (int j = 0; j <= bLen; ++j) {
        if (i == 0) {
          v[i][j] = j;
        } else if (j == 0) {
          v[i][j] = i;
        } else if (a.charAt(i - 1) == b.charAt(j - 1)) {
          v[i][j] = v[i - 1][j - 1];
        } else {
          v[i][j] = 1 + Math.min(v[i - 1][j - 1], Math.min(v[i][j - 1], v[i - 1][j]));
        }
      }
    }
    return v[aLen][bLen];
  }
}

相关文章:

  • Python和Nose实现移动应用的自动化测试
  • 各种框架的面试
  • 深信服Python笔试
  • JS中ajax的原理是什么?
  • nacos 拉取配置失败
  • 猿创征文|centos7升级openssh服务(再也不怕漏扫啦)
  • C++正则表达式
  • 【流行框架】Spring
  • Code For Better 谷歌开发者之声——开发者必备神器
  • 猿创征文|机器学习实战(8)——随机森林
  • 红黑树的删除
  • 猿创征文|学习记录之 PHP 中的面向对象编程
  • 猿创征文|UDP/TCP网络编程
  • 1-丁基-3-甲基咪唑双三氟甲基磺酰亚胺([BMIm] NTf2)离子液体修饰Ni镍纳米颗粒的介绍
  • 定时任务报警通知解决方案详解
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • ES6系统学习----从Apollo Client看解构赋值
  • GraphQL学习过程应该是这样的
  • java 多线程基础, 我觉得还是有必要看看的
  • Python - 闭包Closure
  • React-生命周期杂记
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于 Babel 的 npm 包最小化设置
  • 今年的LC3大会没了?
  • 每天一个设计模式之命令模式
  • 前端面试之闭包
  • 我的zsh配置, 2019最新方案
  • 小程序01:wepy框架整合iview webapp UI
  • 在Unity中实现一个简单的消息管理器
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​linux启动进程的方式
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 达梦数据库知识点
  • #android不同版本废弃api,新api。
  • #stm32驱动外设模块总结w5500模块
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十六)Flask之蓝图
  • (十五)使用Nexus创建Maven私服
  • (数据结构)顺序表的定义
  • (四)linux文件内容查看
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转) 深度模型优化性能 调参
  • (转)fock函数详解
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .aanva
  • .apk文件,IIS不支持下载解决
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析