首先先介绍一下mmseg分词算法,再详细分析新闻分词所用分词方式及其逻辑。
(一)mmseg分词算法mmseg是一个非常好用的分词器,开箱即用。那么为什么还要了解其算法呢?
1.没有任何一样技术可以直接适用于任何场景,了解其算法才能知道什么场景适合用这个算法。
2.了解算法才能知道最终产品的性能受到该分词环节的影响有多大,以便优化。
简介:
mmseg算法是基于词典匹配的算法;
拓展:另一分支是基于统计模型的分词方式,可Google查阅,暂不记录。
拓展:还有一种基于树的词库构建方式,非常便于分词和精确全文检索(当然查全率和查准率不可同时最优)。
算法流程:
文本通过分词系统,首先通过匹配算法和词典进行匹配,再根据消歧规则将最终的分词结果输出;
分词过程用到了三个词典:chars.dic,units.dic,words.dic
词典:chars.dic(汉字字典)
units.dic(中文单位词语)
words.dic(自定义词典)----该词典可用于自己添加新的词汇,如刚出现的一些新名词;
MMSEG分为“匹配算法(Matching algorithm)”和“消除歧义的规则(Ambiguity resolution rules)”这两部分。
“匹配算法”是说如何根据词典里保存的词语,对要切分的语句进行匹配(正向?逆向?粒度?);
“消除歧义的规则”是说当一句话可以这样分,也可以那样分的时候,用什么规则来判定使用哪种分法;
MMSEG的“匹配方法”有两种: 1.Simple方法,即简单的正向匹配,根据开头的字,列出所有可能的结果。比如“研究生命起源”,可以得到 研究 研究生 研究生命 研究生命起源 这四个匹配结果(假设这四个词都包含在词典里)。 2.Complex方法,匹配出所有的“三个词的词组”,即从某一既定的字为起始位置,得到所有可能的“以三个词为一组”的所有组合。(若一句话切分不出三个词,比如只能切成两部分,也可以存在)比如“研究生命起源”,可以得到
研_究_生
研_究_生命
研究生_命_起源
研究_生命_起源
/**
* 得到所有候选词
* @param text 文本
*/
private void getCandidateWord(String text){
candidateWord=new ArrayList();
int rest_len;
int n=text.length();
String word;
for(int offset=0;offset
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?