mmseg4j的字典数据结构(版本1.8.5)

最近在做分词,在网上发现了MMSEG,论文简单入理。在code.google.com上搜到了java的实现版本,非常感谢chenlb开源自己的代码。
在学习mmseg4j对字典的结构比较困惑,做了些调研,写下自己的感受。

mmseg4j采用 key-tree的形式存储字典数据结构,这有点类似中科院的ictclas4j的字典结构,ictclas4j的字典结构含有6768个字块(好像是这么多,可能有误),每一个子块是由含有以该字开头的词组成。结构图如下所示:
[img]http://dl.iteye.com/upload/attachment/0066/4764/e3fc5fee-3687-3416-b914-7208941e4abf.jpg[/img]

mmseg4j原始字典有两个,一个是chars.dct,另一个是words.dct。mmseg4j先加载chars.dct,这个比较简单,直接就是字 和 在语料库中的频率。频率是在CharNode这个类中。在加载words.dct的时候,实际上是对第一步加载chars.dct的填充,填充 CharNode 的 KeyTree字段。
KeyTree类中含有一个 TreeNode 字段,该字段也是一个类,其总定义了
                     char key;
Map<Character, TreeNode> subNodes;
boolean alsoLeaf;

该定义是一个递归的数据结构结构。

程序首先是通过下面的语句
CharNode cn = dic.get(line.charAt(0));

找到dic 中的 CharNode,dic即为加载chars.dct后的dct。 其后开始逐渐的对CharNode填充,最后填充成这样的一种形式:所有同一个字开始的词语被放入到同一个CharNode中,而该规则是递归的,所有第二个词一样的也被列在同一个hashmap中,之后是第三个...依次类推下去。

这样构成了一个Character-CharNode的树状词典结构,在进行最大模式匹配时提升很大的效率。

以上的叙述有些粗浅。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值