1-中文分词算法
- 正向最大匹配法
- 逆向最大匹配法
- 双向最大匹配法
正向最大匹配法
这个顾名思义有 正向跟最大 两个词,步骤大概是
- 假定最大分词长度为maxlen, 则从被处理的当前字符串的前maxlen个字作为匹配字段,查找
- 若存在,则匹配成功,将当前字符串已匹配的去掉,将剩余字符串当成当前被处理字符串
- 若不存在,则将maxlen-1 ,当前被处理字符串的前maxlen-1个字作为匹配字段
- 重复循环2,3步
举个例子
正向即从前往后取词,从7->1,每次减一个字,直到词典命中或剩下1个单字。
第1次:“我们在野生动物”,扫描7字词典,无
第2次:“我们在野生动”,扫描6字词典,无
。。。。
第6次:“我们”,扫描2字词典,有
扫描中止,输出第1个词为“我们”,去除第1个词后开始第2轮扫描,即:
第2轮扫描:
第1次:“在野生动物园玩”,扫描7字词典,无
第2次:“在野生动物园”,扫描6字词典,无
。。。。
第6次:“在野”,扫描2字词典,有
扫描中止,输出第2个词为“在野”,去除第2个词后开始第3轮扫描,即:
第3轮扫描:
第1次:“生动物园玩”,扫描5字词典,无
第2次:“生动物园”,扫描4字词典,无
第3次:“生动物”,扫描3字词典,无
第4次:“生动”,扫描2字词典,有
扫描中止,输出第3个词为“生动”,第4轮扫描,即:
第4轮扫描:
第1次:“物园玩”,扫描3字词典,无
第2次:“物园”,扫描2字词典,无
第3次:“物”,扫描1字词典,无
扫描中止,输出第4个词为“物”,非字典词数加1,开始第5轮扫描,即:
第5轮扫描:
第1次:“园玩”,扫描2字词典,无
第2次:“园”,扫描1字词典,有
扫描中止,输出第5个词为“园”,单字字典词数加1,开始第6轮扫描,即:
第6轮扫描:
第1次:“玩”,扫描1字字典词,有
扫描中止,输出第6个词为“玩”,单字字典词数加1,整体扫描结束。
正向最大匹配法,最终切分结果为:“我们/在野/生动/物/园/玩”,其中,单字字典词为2,非词典词为1。
环境为python3.6
1 | #coding=gbk |
本文作者:NoOne
本文地址: https://noonegroup.xyz/posts/e1fe0412/
版权声明:转载请注明出处!