java判断字符串(含中文)的内容相似度

/**
     * 判断地址相似
     * 此处简单的判断字符串的内容80%相似即可
     * @param str1
     * @param str2
     * @return
     */
    public static boolean isNearby(String str1, String str2) {
        Map<Character, int[]> vectorMap = new HashMap<>();
        char[] chArray1 = str1.toCharArray();
        for (char c : chArray1) {
            if (vectorMap.containsKey(c)) {
                vectorMap.get(c)[0]++;
            } else {
                int[] arr = new int[2];
                arr[0] = 1;
                vectorMap.put(c, arr);
            }
        }
        char[] chArray2 = str2.toCharArray();
        for (char c : chArray2) {
            if (vectorMap.containsKey(c)) {
                vectorMap.get(c)[1]++;
            } else {
                int[] arr = new int[2];
                arr[1] = 1;
                vectorMap.put(c, arr);
            }
        }
        double vector1Modulo = 0;
        double vector2Modulo = 0;
        double vectorProduct = 0;
        for (Map.Entry<Character, int[]> entry : vectorMap.entrySet()) {
            int[] arr = entry.getValue();
            vector1Modulo += arr[0] * arr[0];
            vector2Modulo += arr[1] * arr[1];
            vectorProduct += arr[0] * arr[1];
        }
        vector1Modulo = Math.sqrt(vector1Modulo);
        vector2Modulo = Math.sqrt(vector2Modulo);
        if (vector1Modulo == 0 || vector2Modulo == 0) {
            return false;
        } else {
            double v = vectorProduct / (vector1Modulo * vector2Modulo);
            return  v >= 0.8;
        }
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值