中文分词算法 之 基于词典的逆向最大匹配算法
在之前的博文中介绍了 基于词典的正向最大匹配算法 ,用了不到50行代码就实现了,然后分析了 词典查找算法 的时空复杂性,最后使用 前缀树 来实现词典查找算法,并做了3次优化。 下面我们看看 基于词典的逆向最大匹配算法 的实现,实验表明,对于汉语来说,逆向最大匹配算法比(正向)最大匹配算法更有效, 如下代码所示: public static List<String> segReverse(String text){ Stack<String> result = new Stack<>(); while(text.length()>0){ int len=MAX_LENGTH; if(text.length()<len){ len=text.length(); } //取指定的最大长度的文本去词典里面匹配 String tryWord = text.substring(text.length() - len); while(!DIC.contains(tryWord)){ //如果长度为一且在词典中未找到匹配,则按长度为一切分 if(tryWord.length()==1){ break; } //如果匹配不到,则长度减一继续匹配 tryWord=tryWord.substring(1); } result.push(tryWord); //从待分词文本中去除已经分词的文本 text