基于正向最大匹配算法的分词算法

来源:互联网 发布:电脑部分软件乱码 编辑:程序博客网 时间:2024/06/06 10:02

基于正向最大匹配算法的分词算法


1.算法描述:

最大匹配算法主要包括正向最大匹配算法、逆向最大匹配算法、双向匹配算法等。 其主要原理都是切分出单字串,然后和词库进行比对,如果是一个词就记录下来,否则通过增加或者减少一个单字,继续比较,一直还剩下一个单字则终止,如果该单字串无法切分,则作为未登录处理。

而本组采用的是正向最大匹配算法,假设分词词典中的最长词的字数为 M,令其作为最大匹配系数。假设读取的汉字序列字数为 L,判断 L 是否小于最大匹配系数M。如果 L 大于最大匹配系数 M,则截取前 M 个汉字作为待匹配字段进行匹配 ,否则取整个汉字序列作为待匹配字段直接在分词词典中进行匹配。若字典中存在这样一个字数为 M 的词 ,则匹配成功 ,匹配字段被作为一个词切分出来 ;若词典中找不到这样的词 ,则匹配失败 ,将待匹配字段中的最后一个字去掉,将剩下的汉字序列作为待匹配字段重新在字典中进行匹配处理……如此进行下去 ,直到匹配成功 ,即切分出一个词 ,或者直到剩余字串的长度为 1 为止 ,即为一个单字。这样就完成了一轮查找匹配 ,然后取剩下的汉字序列以同样的方法进行匹配处理 , 直到文档被扫描完为止。






 


2.代码:


public class MM {    String Maxlen;    ArrayList<String> dict;    String filename;    String s;    String subs;    String result = "";    public MM(String filename) {        dict = new ArrayList<String>();        this.filename = filename;    }    //最大正向匹配算法    public String MMwork(int len, String sen) {        while (sen.length() != 1) {            while (true) {                if (len < sen.length()) {                    s = sen.substring(0, len);                } else {                    len = sen.length();                    s = sen.substring(0, len);                }                if (dict.contains(s) || len == 1) {                    result = result + s + "/";                    break;                } else {                    len = len - 1;                }            }            sen = sen.substring(len);            len = 3;        }        result = result + sen + "/";        return result;    }    //载入字典,这里我是用的字典格式为  字,词性 例如:冮,nr 揳入,v    public void readdict() throws IOException {        try {            File fileName = new File(filename);            BufferedReader br = new BufferedReader(new FileReader(fileName));            String line;            while ((line = br.readLine()) != null) {                String[] element;                element = line.trim().split(",");                dict.add(element[0]);            }        } catch (FileNotFoundException fileNotFoundException) {            System.out.println("找不到文件!");        }    }}


注意:

字典格式的格式改为UTF-8不会乱码。

原创粉丝点击