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

http://www.hankcs.com/nlp/ansj-word-pairs-array-tire-tree-achieved-with-arrays-dic-dictionary-format.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词典格式

时间: 2024-10-09 06:50:48

Ansj分词双数组Trie树实现与arrays.dic词典格式的相关文章

双数组Trie树(DoubleArrayTrie)Java实现

http://www.hankcs.com/program/java/%E5%8F%8C%E6%95%B0%E7%BB%84trie%E6%A0%91doublearraytriejava%E5%AE%9E%E7%8E%B0.html 双数组Trie树(DoubleArrayTrie)是一种空间复杂度低的Trie树,应用于字符区间大的语言(如中文.日文等)分词领域. 双数组Trie (Double-Array Trie)结构由日本人JUN-ICHI AOE于1989年提出的,是Trie结构的压缩

结合双数组Trie的AC自动机算法

结合双数组Trie的AC自动机算法是一种相对比较快的词匹配算法,常见于分词系统用于分词,本文准备用伪代码结合实例的形式来讲解一下该匹配算法的实现原理 构建步骤: 1.Trie树的构建 首先直观感受一下Trie树: 插入模式串 ball.bat.doll.dork.dorm.do.send.sense之后形成的trie树 trie树分三步:插入(构建).查找.删除 插入: 1.输入一个模式串 String 2.如果该模式串已经存在于树中,则跳转 8.如果不存在,跳转3 3.设置当前节点为根节点 4

双数组Trie的一种实现

An Implementation of Double-Array Trie 双数组Trie的一种实现 原文:http://linux.thai.net/~thep/datrie/datrie.html 引文:http://quweiprotoss.blog.163.com/blog/static/4088288320091120112155178/ Contents What is Trie? What Does It Take to Implement a Trie? Tripple-Arr

中文分词系列(二) 基于双数组Tire树的AC自动机

秉着能偷懒就偷懒的精神,关于AC自动机本来不想看的,但是HanLp的源码中用户自定义词典的识别是用的AC自动机实现的.唉-没办法,还是看看吧 AC自动机理论 Aho Corasick自动机,简称AC自动机,要学会AC自动机,我们必须知道什么是Trie,也就是字典树.Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高.之

BZOJ 2251 2010Beijing WC 外星联络 后缀数组/Trie树

题目大意 给出一个字符串,问这个字符串中出现过1次以上的子串的个数,按照子串的字典序输出. 思路 由于数据范围过小,这个题有两个解法. 基本的想法就是用后缀数组来进行后缀的排序,之后按照height数组扫就可以了.应该是挺快的. 但是注意到数据范围只有3000,因此我们只需要弄出所有的后缀拿出来建立一颗后缀Trie树就行了.最后DFS一次树种的所有节点. CODE SuffixArray #include <cstdio> #include <cstring> #include &

java trie树 压缩空间版本

最近一直在加强自己在数据结构和算法的理解,这不,最近碰到了一个帖子,收藏起来. 收藏自:http://www.hankcs.com/program/java/双数组trie树doublearraytriejava实现.html 双数组Trie树(DoubleArrayTrie)是一种空间复杂度低的Trie树,应用于字符区间大的语言(如中文.日文等)分词领域. 双数组Trie (Double-Array Trie)结构由日本人JUN-ICHI AOE于1989年提出的,是Trie结构的压缩形式,仅

字典树Trie树

一.字典树 字典树--Trie树,又称为前缀树(Prefix Tree).单词查找树或键树,是一种多叉树结构. 上图是一棵Trie树,表示了关键字集合{"a", "to", "tea", "ted", "ten", "i", "in", "inn"} .从上图可以归纳出Trie树的基本性质: 1. 根节点不包含字符,除根节点外的每一个子节点都包含一

Trie树的数组实现原理

Trie(Retrieval Tree)又称前缀树,可以用来保存多个字符串,并且非常便于查找.在trie中查找一个字符串的时间只取决于组成该串的字符数,与树的节点数无关.因此,它的查找速度通常比二叉搜索树更快.trie的结构很简单,每条边表示一个字符,从根节点到叶节点就可以表示一个完整的字符串.所以,如果用trie表示一组英文单词,就是一颗26叉数:表示一组自然数,就是一颗10叉树.直观上,实现trie很简单,比如实现英文单词的trie,使用如下的节点构造树: :::c struct node

trie树信息抽取之中文数字抽取

这一章讲一下利用trie树对中文数字抽取的算法.trie树是一个非常有用的数据结构,可以应用于大部分文本信息抽取/转换之中,后续会开一个系列,对我在实践中摸索出来的各种抽取算法讲开来.比如中文时间抽取,地址抽取等. Trie树 trie树又称为前缀树,索引树,字典树.用来对字符串进行索引,每个节点存储一个字符,每个叶子节点代表一个字符串,即从根到它的路径上所有字符的序列. 这个结构有什么优点呢?可以快速的匹配一个目标字符串中存在的单词.换句话说,我有一个字典,是单词的集合,我把字典中所有的单词存