赞
踩
分词目标:
在词典中进行扫描,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。
算法流程:
假设词典中最长的单词为 5 个(MAX_LENGTH),那么最大匹配的起始子串字数也为 5 个
(1)扫描字典,测试读入的子串是否在字典中
(2)如果存在,则从输入中删除掉该子串,重新按照规则取子串,重复(1)
(3)如果不存在于字典中,则从右向左减少子串长度,重复(1)
分词实例:
比如说输入 “北京大学生前来应聘”,
正向匹配法最终的切分结果为:”北京大学 / 生前 / 来 / 应聘”
正向匹配法实现代码如下:
public List<String> leftMax(String str) {
List<String> results = new ArrayList<String>();
String input = str;
while( input.length() > 0 ) {
String subSeq;
// 每次取小于或者等于最大字典长度的子串进行匹配
if( input.length() < MAX_LENGTH)
subSeq = input;
else
subSeq = input.substring(0, MAX_LENGTH);
while( subSeq.length() > 0 ) {
// 如果字典中含有该子串或者子串颗粒度为1,子串匹配成功
if( dictionary.contains(subSeq) || subSeq.length() == 1) {
results.add(subSeq);
// 输入中从前向后去掉已经匹配的子串
input = input.substring(subSeq.length());
break; // 退出循环,进行下一次匹配
} else {
// 去掉匹配字段最后面的一个字
subSeq = subSeq.substring(0, subSeq.length() - 1);
}
}
}
return results;
}

分词目标:
在词典中进行扫描,尽可能地选择与词典中最长单词匹配的词作为目标分词,然后进行下一次匹配。
在实践中,逆向最大匹配算法性能优于正向最大匹配算法。
算法流程:
假设词典中最长的单词为 5 个(MAX_LENGTH),那么最大匹配的起始子串字数也为 5 个
(1)扫描字典,测试读入的子串是否在字典中
(2)如果存在,则从输入中删除掉该子串,重新按照规则取子串,重复(1)
(3)如果不存在于字典中,则从左向右减少子串长度,重复(1)
分词实例:
比如说输入 “北京大学生前来应聘”,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。