0
点赞
收藏
分享

微信扫一扫

Java中文分词【逆向最大匹配法】

Java中文分词【逆向最大匹配法】

一:正文

思想:
逆向最大匹配法:将整个字符串作为一个“词组”带入到词典中进行比对,若不成功,删除第一个字符,继续进行如此操作,直到成功或者只剩下最后一个字,再把结果放入一个字符串的数组中,最后删除原句中的结果,继续上面的操作。下面我将用一个例子解释这个操作:

原句:河南师范大学位于河南省新乡市牧野区建设东路四十六号
词典:“师范”,“河南”,“牧野”
第一次代入:南师范大学位于河南省新乡市牧野区建设东路四十六号(在词典中没有该词汇,删除首字符继续比对)
删除首字符:师范大学位于河南省新乡市牧野区建设东路四十六号(在词典中没有该词汇,删除首字符继续比对)
删除首字符:范大学位于河南省新乡市牧野区建设东路四十六号(在词典中没有该词汇,删除首字符继续比对)
删除首字符:大学位于河南省新乡市牧野区建设东路四十六号(在词典中没有该词汇,删除首字符继续比对)

删除首字符:号(在词典中没有该词汇,只剩下一个字,放入结果数组,并删除位于句尾的最后这个字,进行第二次代入)
第二次代入:河南师范大学位于河南省新乡市牧野区建设东路四十六(在词典中没有该词汇,删除首字符继续比对)

删除首字符:牧野(在词典中找到词汇“牧野”,放入结果数组,并删除位于句尾的结果“牧野”,进行第三次代入)

实现逻辑:

 public static void main(String args[]) {
        String[] cs = {"今晚", "月亮", "漂亮"};//词典
        String a = "今晚月亮真漂亮啊";
        System.out.print("原句:");
        System.out.print(a + '\n');
        System.out.print("拆分后为:");
        String[] cs2 = new String[100]; //结果数组
        int jud = 0;//找到匹配字符串与否的标志
        int j = 0;
        String temp = null;//初始化临时字符串
        for (; a.length() > 0; ) {
            for (int i = 0; i < a.length(); i++) {
                temp = a.substring(i);//每次截取掉首个字符
                if (isin(cs, temp) == true) {//如果目标字符串在数组中
                    cs2[j] = temp;
                    jud = 1;
                    int number = temp.length();
                    a = a.substring(0, a.length() - number);
                }
            }
            if (jud == 0) {//没有找到匹配字符串

                cs2[j] = a.substring(a.length() - 1, a.length());//将最后一个元素放在cs2里面
                a = a.substring(0, a.length() - 1);//截掉最后一个元素继续循环。
            }
            jud = 0;
            j++;
        }
        for (; j >= 0; j--) {
            if (cs2[j] != null)
                System.out.print(cs2[j] + "   ");
        }
    }

//    下面为判断字符串是否在词典中的函数方法


    static public boolean isin(String[] cs, String temp) {
        int i;
        for (i = 0; i < cs.length; ) {
            if (temp.equals(cs[i]))
                i = cs.length + 1;
            else
                i++;
        }
        if (i == cs.length + 1)
            return true;
        else
            return false;
    }
举报

相关推荐

0 条评论