zoukankan      html  css  js  c++  java
  • 中文分词常用算法之基于词典的逆向最大匹配

    算法描述:

    1. S1为带切分字符串,S2为空,MaxLen为词典中的最大词长
    2. 判断S1是否为空,若是则输出S2
    3. 从S1右边开始,取出待处理字符串str(其中str的长度小于MaxLen)
    4. 查看str是否在词典中,若是则转5,若否则转6
    5. S2+=str+”/”,S1-=str,转2
    6. 将str最左边的一个字去掉
    7. 判断str是否为单字,若是则转5,若否则转4

    Java实现代码:

     1 public static List<String> BMM(String text) {
     2         Stack<String> result = new Stack<String>();
     3         while (text.length() > 0) {
     4             int len = MAX_LENGTH;
     5             if (text.length() < len) {
     6                 len = text.length();
     7             }
     8             String tryWord = text.substring(text.length() - len);
     9             while (!DIC.contains(tryWord)) {
    10                 if (tryWord.length() == 1) {
    11                     break;
    12                 }
    13                 tryWord = tryWord.substring(1);
    14             }
    15             result.push(tryWord);
    16             text = text.substring(0, text.length() - tryWord.length());
    17         }
    18         int len = result.size();
    19         List<String> list = new ArrayList<String>(len);
    20         for (int i = 0; i < len; i++) {
    21             list.add(result.pop());
    22         }
    23         return list;
    24     }

    小结:

    逆向最大匹配也是中文分词基本算法之一,因为是机械切分,所以它也有分词速度快的有点,最大逆向匹配比起正向最大匹配更符合人们的语言习惯,在上篇提到的“长春市长春节快乐”这句话它能完美的切分,但是它还是有局限性比如在切分“长春药店”、“画上荷花和尚画”这类句字时它的表现就没有正向最大匹配好,所以在此基础上我们可以使用双向最大匹配来解决此类问题。

  • 相关阅读:
    java前三章总结
    Java入门第二章
    MYSQL 3306设置允许外网访问
    Lnmp Laravel搭建网站需要注意的几点:
    Linux 如何删除网站目录下的user.ini
    Linux Composer的安装
    lnmp切换PHP版本
    解决GitHub的raw.githubusercontent.com无法连接问题
    Linux 7系列默认不能连网的解决办法
    lnmp安装
  • 原文地址:https://www.cnblogs.com/stardjyeah/p/4528782.html
Copyright © 2011-2022 走看看