您的位置:首页 > 其它

基于词的编辑距离文本相似度计算

2016-12-15 18:30 281 查看
分词结果放在list里面

//基于词的编辑距离计算

        public static float levenshtein(ArrayList<String> listfirst, ArrayList<String> listsecond) {

            // 计算两个字符串的长度。

            int len1 = listfirst.size();

            int len2 = listsecond.size();

            System.out.println(len1 +"  "+len2);

            // 建立上面说的数组,比字符长度大一个空间

            int[][] dif = new int[len1 + 1][len2 + 1];

            // 赋初值,步骤B。

            for (int a = 0; a <= len1; a++) {

                dif[a][0] = a;

            }

            for (int a = 0; a <= len2; a++) {

                dif[0][a] = a;

            }

            // 计算两个字符是否一样,计算左上的值

            int temp;

            for (int i = 1; i <= len1; i++) {

                for (int j = 1; j <= len2; j++) {

                    

                    if (listfirst.get(i-1).equals(listsecond.get(j-1)) ) {

                        temp = 0;

                    } else {

                        temp = 1;

                    }

                    // 取三个值中最小的

                    dif[i][j] = min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1,

                            dif[i - 1][j] + 1);

                    System.out.println("i = " + i + ", j = " + j + ", dif[i][j] = "

                            + dif[i][j]);

                }

            }

       

            // 计算相似度

            float similarity = 1 - (float) dif[len1][len2]

                    / Math.max(listfirst.size(), listsecond.size());

            System.out.println("相似度:" + similarity);

            

            return similarity;

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: