IKanalyzer中文分词源码分析<一>字典的数据结构

基于IK3.2.8
1,词典的加载和词典的数据结构
   1.1 词典的加载
    IKanalyzer的词典采用单例模式实现。
    可以通过以下方法获取词典实例:
    Dictionary.getInstance();
     Dictionary 实例化的时候将会加载多个词典,包括:
    主词典(main.dic)
    姓氏词典(surname.dic)
    量词词典(quantifier.dic)
    后缀词典(suffix.dic)
    介词\副词词典(prep.dic)
    停止词词典(stopword.dic) 
    其中主词典、停止词词典可以通过IKAnalyzer.cfg.xml配置文件进行扩展。

     1.2 词典的数据结构:  
     IKanalyzer 用树的结构实现詞典,每一个词典,都以空字符(char)0作为根节点,将词的第一个字做为1级子节点,第二个字作为2级子节点。如果另有一个词的第一个字与之前的词相同,则直接将词的第二个字放在第一个字下作为子节点。如果第二个字也有相同的,则把第三个字放在第二个字下作为子节点。
    示意图如下:
    

    其中,每一个节点用DictSegment实现,当节点的子节点不超过3个时,用数组来存储子节点,当子节点数量超过3个时,用HashMap来存储子节点。
    同时DictSegment中有一个静态的MAP,用来存放所有的汉字。因此整个词典中的每一个字都只存放了一份,减小了词典的最终大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值