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

Excel导入时,一个简单的匹配中文外键的方法

Excel导入时,外健往往只能用中文导入,在代码中,尝试用中文去匹配外建的id然后绑到要导入的数据中,这样一个,外健中文就必须和表里面的一模一样,但在实际中,导入的名称与表里存的名称总有少量字不同的差异,导致不能成功匹配到外健,如下所示:

导入数据Excel内容:
user_name office_id
张三 民主党派

office表数据:
1 民主党派管理部

用户表需正确存储的数据:
user_name office_id
张三 1

根据上面场景,作了下面这个经验外健匹配工具,原理也简单,算一下目标匹配字符与需要匹配字符串之间匹配的百分比,该方法较简单,存在误判率。需要手工校正。但整体还是可行的。在不同的项目中有过验证。也可以提高几个经验数字来提高匹配的准确率。具体使用可以视导入数据的重要程度、敏感程度等不同场景来决定。当然喽,也可直接新增一个外键数据,比如上面,再加一个民主党派的部门,缺点是会造成数据重复。这个就不提了。

  // sourceStr=民主党派领域--> targetStr=民主党派
  private boolean matchWithRate(String sourceStr, String targetStr) {
        // 有为空的,没有匹配的必要了
        if (ZYStrUtils.isAnyNull(sourceStr, targetStr)) {
            return false;
        }
        // 相等,直接匹配成功
        if (sourceStr.equals(targetStr)) {
            return true;
        }

        // 原字符太短了,失去匹配的意义,3是个经验长度
        if (sourceStr.length() < 3) {
            return false;
        }

        // 变成单个字符集合
        // [民,主,党,派]
        List<String> items = ZYStrUtils.strToChars(targetStr);
        int i = 0;
        for (String item : items) {
            // 原字段包含了单个字符
            if (sourceStr.contains(item)) {
                i++;
            }
        }
        if(i==0){
          return false;
        }
        // 计算匹配率
        BigDecimal beNum = new BigDecimal(items.size());
        BigDecimal num = new BigDecimal(i);
        BigDecimal num100 = new BigDecimal(100);
        BigDecimal divide = num.divide(beNum, BigDecimal.ROUND_HALF_DOWN, 2);
        BigDecimal multiply = divide.multiply(num100);
        double v = multiply.doubleValue();
        // 超过60%的匹配率,60也是个经验数字  如 民主党派领域--> 民主党派是匹配的
        return v > 60;
    }

http://www.kler.cn/a/317296.html

相关文章:

  • gpu-V100显卡相关知识
  • D67【python 接口自动化学习】- python基础之数据库
  • Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
  • LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)
  • [项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]
  • SQL50题
  • 防护装备穿戴与否检测系统源码分享
  • Vue.js Emit
  • 多旋翼无人机维修、组装、调试技术详解
  • typora使用和激活
  • 【机器学习】生成对抗网络(GAN)——生成新数据的神经网络
  • 共建智能座舱AI应用生态 夸克合作斑马智行开拓AI搜索新场景
  • 【Linux】SSH:远程连接
  • python 项目中使用Elasticsearch
  • Qt Creator项目模板介绍
  • 使用OVPN导致电脑网速变慢的原因
  • MySQL record 08 part
  • 成功使用DDNS动态域名访问我的群晖NAS(TP-link路由器)
  • Yocto - 使用Yocto开发嵌入式Linux系统_03 基于Poky制作第一个系统
  • vue.js 展示一个树形结构的数据视图,并禁用其中默认选中的节点
  • java并发之并发理论
  • 【自动驾驶】基于车辆几何模型的横向控制算法 | Pure Pursuit 纯跟踪算法详解与编程实现
  • 同一网络下两台电脑IP一样吗?探究局域网内的IP分配机制
  • 释放TK49N65W5 MOSFET的潜力
  • 镭射限高防外破预警装置-线路防外破可视化监控,安全尽在掌握中
  • C++继承(上)