`
单眼皮大娘
  • 浏览: 110953 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

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

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

    mmseg4j采用 key-tree的形式存储字典数据结构,这有点类似中科院的ictclas4j的字典结构,ictclas4j的字典结构含有6768个字块(好像是这么多,可能有误),每一个子块是由含有以该字开头的词组成。结构图如下所示:


    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的树状词典结构,在进行最大模式匹配时提升很大的效率。

以上的叙述有些粗浅。
  • 大小: 31.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics