hanlp中文分词器解读
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中文分词器解析hanlp分词器接口设计:
提供外部接口:
分词器封装为静态工具类,并提供了简单的接口
标准分词是最常用的分词器,基于HMM-Viterbi实现,开启了中国人名识别和音译人名识别,调用方法如下:
HanLP.segment其实是对StandardTokenizer.segment的包装。
/**
* 分词
*
* @param text 文本
* @return切分后的单词
*/
publicstatic List
{
return StandardTokenizer.segment(text.toCharArray());
}
/**
* 创建一个分词器
* 这是一个工厂方法
* 与直接new一个分词器相比,使用本方法的好处是,以后HanLP升级了,总能用上最合适的分词器
* @return一个分词器
*/
publicstatic Segment newSegment()
}
publicclass StandardTokenizer
{
/**
* 预置分词器
*/
publicstaticfinalSegment SEGMENT = HanLP.newSegment();
/**
* 分词
* @param text 文本
* @return分词结果
*/
publicstatic List
{
return SEGMENT.seg(text.toCharArray());
}
/**
* 分词
* @param text 文本
* @return分词结果
*/
publicstatic List
{
return SEGMENT.seg(text);
}
/**
* 切分为句子形式
* @param text 文本
* @return句子列表
*/
publicstatic List>seg2sentence(String text)
{
return SEGMENT.seg2sentence(text);
}
}
publicstatic Segment newSegment()
{
returnnew ViterbiSegment();// Viterbi分词器是目前效率和效果的最佳平衡
}
/**
* Viterbi分词器
* 也是最短路分词,最短路求解采用Viterbi算法
*
* @author hankcs
*/
publicclass ViterbiSegment extends WordBasedGenerativeModelSegment
NLP分词NLPTokenizer会执行全部命名实体识别和词性标注。,调用方法如下:
∙NLP分词NLPTokenizer会执行全部命名实体识别和词性标注。
∙所以速度比标准分词慢,并且有误识别的情况。
publicclass NLPTokenizer
{
/**
* 预置分词器
*/
publicstaticfinalSegment SEGMENT =
HanLP.newSegment().enableNameRecognize(true).enableTranslatedNameRecognize( true).enableJapaneseNameRecognize(true).enablePlaceRecognize(true).enableOr ganizationRecognize(true).enablePartOfSpeechTagging(true);
publicstatic List
{
return SEGMENT.seg(text);
}
/**
* 分词
* @param text 文本
* @return分词结果
*/
publicstatic List
{
return SEGMENT.seg(text);
}
/**
* 切分为句子形式
* @param text 文本
* @return句子列表
*/
publicstatic List>seg2sentence(String text)
{
return SEGMENT.seg2sentence(text);
}
}
索引分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,另外通过term.offset可以获取单词在文本中的偏移量。调用方法如下:
List
for(Termterm:termList)
{
System.out.println(term+"
["+term.offset+":"+(term.offset+term.word.length())+"]");
}
publicclass IndexTokenizer
{
/**
* 预置分词器
*/
publicstaticfinalSegment SEGMENT = HanLP.newSegment().enableIndexMode(true); publicstatic List
{
return SEGMENT.seg(text);
}
/**
* 分词