还是参考了苏神的系列文章:【中文分词系列】 2. 基于切分的新词发现,感觉作者好厉害,用不同的角度思考问题。原先是从“从语料中判断是否成词即不可切分”的角度出发,现在却反过来思考:若一个片段的内部凝固度低于一定程度时,则这个片段是不是就不成词,因此要被切分开。
对比之前的那篇文章:【新词发现(1)——核心代码解读】,发现无需计算左邻与右邻信息熵,因此少了很多计算量。我们来看一下代码实现
|
|
为了得到有意义的语句,需要去除非中文、英文与数字的字符,并在其位置进行断句。
|
|
字典chars
与pairs
中存放单字符与相邻2字符的频数统计情况,并过滤掉出现次数过少的,再通过互信息的计算最后只筛选出“比较密切”的相邻字,同时存放到strong_segments
字典中。
|
|
这一步就是从之前筛选出的“比较密切”相邻字中,去判断一个片段是否成词。举个例子来说,比如现在有齐天大圣孙悟空
,从齐天
开始,在不在strong_segments
字典中。假设存在,那么这么不切分,继续查找天大
、大圣
在不在。诶,突然我们发现圣孙
不在字典中,那么此处应该被切分,齐天大圣
就被切分成了一个单独的词语。
|
|
最后我们还是在金庸的《天龙八部》上检验下效果