jieba分词
最近遇到的需求和业务场景需要 分词 这个业务。本着不造轮子的原则,先去搜索了一下网上现有的一些分词库。其中结巴链接: jieba分词吸引了我的注意。
原理
首先,使用结巴分词,虽然是拿来主义,但我们要了解他的原理,打开上述的github链接可以看到算法这个段落里的第一句
基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
无环图
环图
以上这个我们非常好理解无环图和环图。那么在这里需要特别注意的地方在于,如果不同层级有重复,也是不会向前循环的。
比如:
- 我爱你
- 我很爱你
- 他爱我
这三句话构建的无环图是这样的:
虽然他爱我中的我,之前已经出现过了,但是因为不能循环,所以又重新构建了一个结点。
查找
采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
这里对于每个节点有概率属性,这样可以基于概率最快得搜索出是否命中。
这样循环遍历规划搜索的时候,会优先搜索高概率的字
比如,世界上最美妙的词语是我爱你
遍历到我的时候:
优先选择
因为爱这个字跟着我后面是高概率的字。