放牧代码和思想
专注自然语言处理、机器学习算法

Ansj分词双数组Trie树实现与arrays.dic词典格式

事实上,ansj实现的双数组没有通用性,你也无法往里面加入自己的词语,或者删除任何词语。我实现了一个通用的双数组trie树,提供更灵活的接口,更高的速度:http://www.hankcs.com/nlp/hanlp.html

arrays.dic是一个双数组Trie树格式的词典,用文本的形式储存了索引,字串,base,check,status与词性。

一个直观的图示:

index就是base数组中的下标。

term是词的当前状态,不一定代表一个词,如“一举一”是“一举一动”的前缀。

base是base数组的值。代表字串的当前状态,其实就是字串一路按base[tx] = base[t] + x查过来的值。比如base[一举一动] = base[一举一] + code(动)。特别地,如果字串长度为1的话(字符),那么base值就是字符的双字节码。

check是check数组的值。check是用来验证这个词是从哪个状态转换过来的。比如是由转换过来的。base[105540] + 21160 = 126700.

status是term的成词状态:1:继续 2:是个词语但是还可以继续 3:确定。参考

nature是这个词以这些词性出现的频次。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Ansj分词双数组Trie树实现与arrays.dic词典格式

分享到:更多 ()

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    博主,我想问一下,如果用双数组trie实现关键词匹配过滤,应该是很高效的吧?

    web菜鸟3年前 (2015-01-06)回复

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机