中文词语粗分

闲来无事 看了 基于N-最短路径方法的中文词语粗分模型 一论文, 这个分词模型也存在缺点, 难以消除歧义, 所以只能叫粗分; 打算尝试下隐马尔科夫模型, 用于分词系统:

基于N-最短路径方法的中文词语粗分模型
图片来自: 基于N-最短路径方法的中文词语粗分模型

有了上次的 ac自动机, 从字典中提出词语就方便很多啦,
上代码

from ac import Trie



# 加载字典
print('read dict...')
# string = '工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作'
string = '他说的确实在理'
extra_dict = codecs.open('./extra_dict/dict.txt.small', 'r', 'utf-8').read()
# 暂时取4000个 节省计算资源
extra_dict = extra_dict.split('\n')[:4000]
extra_dict = [x.split(' ')[0] for x in extra_dict]
print('dict length:', len(extra_dict))


# 查找词语
trie = Trie(extra_dict=extra_dict)
trie.buildac()
result = trie.search(string)
queue = [''] * len(string)
for i in result:
  if len(queue[i.start]) > 0:
    queue[i.start] += '/'
  queue[i.start] += i.value
print('\n'.join(queue))

语料他说的确实在理
结果

他
说
的/的确
确/确实
实/实在
在/在理
理

HMM 我来啦 ^_^