写在最前面:
由于我们chinese language的特殊性,不和英文中有天然空格符一样,我们需要将汉字序列切分成单独的词。
分词算法是文本挖掘的基础,通常对整个模型的效果起着较大的决定作用。中文分词算法主要分为基于词表的分词算法、基于统计模型的分词算法、基于序列标注的分析算法。下面我们来一一剖析吧
准备好了吗!迎接疾风吧,数学能让人清醒!!!
目录
1.基于词表的分词算法
1.1正向最大匹配法(FMM)
概念:对于输入的一个文本序列从左至右,以贪心的算法切分出当前位置上长度最大的词
分词原理:单词的颗粒度越大,所能表示的含义越确切
分词步骤:
- 首先我们有一个词库word_dict还一个待分词的字符串s,首先我们计算得到词库中最长词语的长度假设为m,从字符串第一个位置开始,选择一个最大长度的词长片段,如果该字符串的长度不足最大词长,则选择该全部字符串;
- 判断选择出来的字符串片段是否在词库中,若在,则将此词分离出来,若不在,则从右边开始,逐一减少一个字符,直到这个片段存在在词典中结束,或者以只剩下最后一个字结束;
- 字符串变为上一步截取分词后剩下的部分序列,直到序列完全被分割。
哈哈哈,上面肯定看的迷迷糊糊的,大家都这么过来的,文字太多容易视觉疲劳,那我们来举个小小的栗子吧。
比如说待分割的序列s=‘我爱长沙理工大学’,然后我们的word_dict={'喜欢',‘长沙’,‘长沙理工大学’,...}假设其中最长词语的长度是6,接下来步骤就是
- ‘我爱长沙理工’(不在)-->'我爱长沙理‘(不在)-->'我爱长沙’(不在)-->'我爱长'(不在)-->'我爱'(不在)-->'我' ====剩余一个字,加入词典
- ‘爱长沙理工大’(不在) -->'爱长沙理工'(不在)-->’爱长沙理‘(不在)-->'爱长沙'(不在)-->'爱长'(不在)-->'爱'====剩余一个字,加入词典
- '长沙理工大学'====在词典中,加入,遂分割完毕
于是"我爱长沙理工大学"就分割成了"我/爱/长沙理工大学"
1.2逆向最大匹配法(BMM)
如果比较深入的理解啦1.1中所说的正向最大匹配,那么只要将正向从左至右筛选的顺序换成从右至左筛选就好了。
其实90%(这个数字我乱编的,你可以理解成为大部分的意思)的情况下正向最大匹配法和逆向最大匹配法分词的结果都是一样的,但是也存在不一样的哟,比如说'结婚的和尚未结婚的'通过FMM可能会被分割成'结婚/的/和尚/未/结婚的/',但是通过BMM可能就会被分割成'结婚/的/和/尚未/结婚/的'