[发明专利]一种基于一维线性空间实现Trie树的词典存储管理方法有效
申请号: | 201310288785.2 | 申请日: | 2013-07-03 |
公开(公告)号: | CN103365991A | 公开(公告)日: | 2013-10-23 |
发明(设计)人: | 王国印 | 申请(专利权)人: | 深圳市华傲数据技术有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518057 广东省深圳市南山区高新区中*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 线性 空间 实现 trie 词典 存储 管理 方法 | ||
技术领域
本发明涉及一种词典存储管理方法,尤其涉及一种基于一维线性空间实现Trie树的词典存储管理方法。
背景技术
在信息检索和自然语言处理领域,特别是基于词典的技术应用中,词典的规模一般都非常大,拥有成千上万甚至上亿条记录,尤其是搜索引擎中倒排索引词的规模最为庞大。对海量数据词典的存储,当前通常采用索引的数据结构来实现。常用的索引结构包括线性索引表、倒排表、散列(hash)表和搜索树等。当前网络上流行的Trie树的实现版本一般都是基于双数组的,两个数组的名字分别为base[]和check[],数组中的每一个元素下标i相当于Trie树的一个结点编号或在双数组中的存储位置,又称状态编号。
base[i]:存放的是当前状态i到所有后继状态最小无冲突的偏移量;
check[i]:存放的是当前状态i的直接前驱信息,即存储当前状态是由哪一个状态转移而来;
base和check是成对的;
base[i]和check[i]代表同一个状态的属性。
然而这种基于双数组实现的Trie树的词典数据存储方法存在着这样一个问题:会因为插入新状态而引起的冲突导致要移动大量存在冲突的词典数据,不仅会导致词典数据存储速率慢,也会导致数据移动或存储空间的回溯问题。
发明内容
为了解决上述技术的缺陷之一,本发明实施例提供一种基于一维线性空间实现Trie树的词典存储管理方法,本发明采用一维数组代替双数组(base[]和check[]),本方法使得Trie树序列化和反序列化更加便捷,使得词典的加载存储更有效率,同时本发明可以解决双数组实现Trie树的词典数据存储方法中存在的数据移动或存储空间的回溯问题。
为此,本发明实施例公开了一种基于一维线性空间实现Trie树的词典存储管理方法。该方法包括以下步骤:获取完整的词典数据;生成有序的词典数据并存放在一维数组中;创建Trie树实现对词典数据的存储。
在本发明实施例中,使用一维数组代替双数组(base[]和check[]),此种做法的好处使得Trie树序列化和反序列化更加简单,使得词典的加载更加容易。具体做法可以将base数组放在一维数组的偶数位,check数组放在奇数位,对应关系如下:
base[i]->>array[2*i];
check[i]->>array[2*i+1].
在本发明的一个实施例中,所述生成有序的词典数据包括:
将词典数据中所有词条和属性信息以Key为中心按词典顺序排序;
合并拥有相同Key值的values。
在本发明的一个实施例中,所述的key包括:
在每个key后面添加一个虚拟字符代表叶子结点(终端结点),每个叶子结点虚拟字符的存储位置由其直接前驱的base值确定。
本发明实施例中,允许让每个key带上自己的属性值values(词性或者其他标注信息)。当前很多Trie树的实现版本,只能存储key,无法将key和key的属性或解释信息(统称为values)直接关联起来。本方法的解决方式是在每个key后面加一个虚拟字符“$”代表叶子结点(终端结点),使得原先的终端结点变为非终端结点,在其后增加一个终端结点“$”作为其直接后继。把每个叶子结点“$”(终端结点)的base值赋上其所处的key按词典顺序序号的相反数-m(m为当前key在所有词条集中的词典顺序序号,m能直接确定相关key对应的values的存储位置),每个叶子结点“$”的存储位置,直接由其直接前驱的base值确定,同时叶子结点的直接前驱定义为自己,即叶子结点的check值等于其状态编号即逻辑存储位置。
在本发明的一个实施例中,所述词典顺序排序还包括:
拥有公共前缀的keys相邻。
在本发明的一个实施例中,所述状态的信息包括:
用一个数据机构Node存储每个状态的信息;
每个状态的信息包含:当前输入字符、状态的深度、第一个拥有当前状态key的编号、最后一个拥有当前状态key的下一个编号、拥有当前状态key的数量。
在本发明实施例中,在创建Trie树的过程中为了很好的避免因插入新状态导致冲突而引起的数据移动,要求所有信息按照key有序,才能够获取当前状态的所有直接后继状态的信息(如当前输入的字符c,该状态在Trie树的深度,直接后继状态包含的词条位置范围等)。为了方便,本发明定义一个数据结构Node存储每个状态的信息。
在本发明的一个实施例中,创建Trie树包括以下步骤:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳市华傲数据技术有限公司,未经深圳市华傲数据技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310288785.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:变压器及电机用新型耐高温纸包线
- 下一篇:汽车门锁保护装置