• java 查找英语单词相似度,用于单词匹配,法1


    import java.math.BigDecimal;

    /**
    * 计算两个单词的差距
    */
    public class EnglisOperate {

    /\*\*
     \* 比较两个字符串的相识度
     \* 核心算法:用一个二维数组记录每个字符串是否相同,如果相同记为0,不相同记为1,每行每列相同个数累加
     \* 则数组最后一个数为不相同的总数,从而判断这两个字符的相识度
     \*/
    
    private static int compare(String key, String target) {
    
        System.out.println("--------------------比较:"+key+"=="+target);
    
        int row = key.length();//循环目标
        int col = target.length();//key
    
        if (row == 0) {
            return 0;
        }
        if (col == 0) {
            return 0;
        }
    
    
    
    
        char col1; // key的
        char row1; // target的
        int temp; // 记录相同字符,在某个矩阵位置值的增量,
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    // abstract
    // String key = “abundance”;
    // String b = “abundant”;

        int samesums = 0;
        String sames = "";
        for (int i0 = 0; i0 < row; i0++) {// 遍历少的
    
            int tmp = 0;
            int samesum = 0;//计相同数
            String same = "";
            for (int i = i0; i < row; ) {// 遍历少的,一个个去找
                row1 = key.charAt(i);// 去匹配target
    
                boolean isfinde = false;
                for (int j = tmp; j < col; j++) {//循环多的,用少的在多的里来找
                    col1 = target.charAt(j);
                    if (row1 == col1) {//表字符相等
                        if(0 == tmp){//第一进来
                            tmp = j + 1;//当前在  tmp(0) + j   这个位置找到第一匹配的
                        }else if(j == tmp){//是上一个的下一个位置
                            tmp = j + 1;
                        }else if(j != tmp){//第二或三或四个位置没找到
                            break;
                        }
    
                        samesum++;
                        same += col1;
                        isfinde = true;
                        break;
                    }
                }
                if (!isfinde) {//没找到
                    break;
                }
                i++;
            }
            System.out.println("相同数:"+samesum+">"+same);
    
            if(samesums < samesum){
                samesums = samesum;
                sames = same;
            }
    
        }
        System.out.println("最终最大相同数:"+samesums+">"+sames);
    
        return samesums;
    }
    
    /\*\*
     \* 获取最小的值
     \*/
    private static int min(int one, int two, int three) {
        return (one = one < two  one : two) < three  one : three;
    }
    
    /\*\*
     \* 获取两字符串的相似度
     \*/
    
    
    public static double getSimilarityRatio(String key, String target) {
        int max = Math.max(key.length(), target.length());
        int sames = 0;
        if(key.length() < target.length()){
            sames = compare(key,target );//前少后多
        }else {
            sames = compare(target, key);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    // int keylen = target.length();
    System.out.println(sames+“/”+max);
    if(0 == sames){
    return 0;
    }
    double f1 = new BigDecimal((float)sames/max).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    // System.out.println(“ddd===”+f1);
    return f1;
    // return 0;
    }

    public static void main(String\[\] args) {
    
    • 1

    // abandon>>vt.离弃,丢弃;遗弃,抛弃;放弃
    abdomen>>n.腹,下腹(胸部到腿部的部分)
    abide>>vi.(abode,abided)(by)遵守;坚持
    ability>>n.能力;本领;才能,才干;专门技能,天资
    able>>a.有(能力、时间、知识等)做某事,有本事的
    abnormal>>a.反常的,不正常的,不规则的
    aboard>>ad.&prep.在船(飞机、车)上;ad.上船(飞机)
    abolish>>vt.废除(法律、习惯等);取消
    abound>>vi.大量存在;(in,with)充满,富于
    about>>ad.在周围;大约 prep.关于;在周围 a.准备
    above>>a.上述的 ad.在上面 prep.在…之上,高于
    abroad>>ad.到国外,在国外;在传播,在流传
    abrupt>>a.突然的,出其不意的;(行为等)粗鲁无礼的
    absence>>n.缺乏,不存在;缺席,不在;缺席的时间
    absent>>a.缺席的;缺乏的,不存在的;心不在焉的
    absolute>>a.绝对的,完全的;确实的,肯定的
    absorb>>vt.吸收(水、光、蒸汽等);使全神贯注
    abstract>>a.抽象的 n.摘要,梗概 vt.提取;摘录要点
    absurd>>a.荒谬的,荒诞的,荒唐可笑的;不合理的
    abundance>>n.丰富,充裕,大量
    abundant>>a.大量(充足)的;(in)丰富(富裕)的

        String key = "standpoint";
        String standard = "abandon";
        double dis = getSimilarityRatio(key, standard);
        System.out.println("相似度:" + dis);
    
        int max = Math.max(key.length(), standard.length());
        double keyrate = getdisRate(max);
        if(dis >= keyrate) {//相似度
            System.out.println("ok");
        }
    }
    
    
    public static double getdisRate(int stlen){
        //权重,越短,比较越高
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    // int stlen = standard.length();
    double keyrate = 0.3;
    switch (stlen){
    case 2:
    keyrate = 0.9;
    break;
    case 3:
    keyrate = 0.6;
    break;
    case 4:
    keyrate = 0.7;
    break;
    case 5:
    case 6:
    keyrate = 0.7;
    break;
    case 7:
    case 8:
    keyrate = 0.6;
    break;
    case 9:
    case 10:
    case 11:
    keyrate = 0.5;
    break;
    case 12:
    case 13:
    case 14:
    keyrate = 0.4;
    break;
    case 15:
    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    keyrate = 0.3;
    break;
    }
    return keyrate;
    }

    }

  • 相关阅读:
    微服务从代码到k8s部署应有尽有系列(十一、日志收集)
    数字孪生背后:谁在构建真实的数字世界?
    SPA项目之主页面--动态树&右侧内容管理
    [ubuntu][转载]ubuntu挂载nas并实现开机自动挂载
    牛客竞赛每日俩题 - 动态规划2
    【160】相交链表
    [C语言]水群杂记
    单元测试pytest
    计算机视觉图像处理面试笔试题整理——光流算法
    SpringBoot SpringBoot 原理篇 2 自定义starter 2.5 使用属性配置设置功能参数【2】
  • 原文地址:https://blog.csdn.net/m0_59092234/article/details/126388361