《一种基于一维线性空间实现TRIE树的词典检索方法.pdf》由会员分享,可在线阅读,更多相关《一种基于一维线性空间实现TRIE树的词典检索方法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103365992 A(43)申请公布日 2013.10.23CN103365992A*CN103365992A*(21)申请号 201310288821.5(22)申请日 2013.07.03G06F 17/30(2006.01)(71)申请人深圳市华傲数据技术有限公司地址 518057 广东省深圳市南山区高新区中区高新中一道9号软件大厦7层713、715、716室(72)发明人王国印(54) 发明名称一种基于一维线性空间实现Trie树的词典检索方法(57) 摘要本发明提供一种基于一维线性空间实现Trie树的词典检索方法,通过生成一维线性空间的Trie树词典数据;根。
2、据用户输入确定待查询词条key;根据词条key的当前状态实现查询。在一维线性空间下构建Trie树的词典数据下,提高了词典加载和检索速度,并且能够快速检索到词条的所有前缀词,另外,基于一维线性空间实现Trie树的词典检索能够解决传统Trie树词典数据检索在Tire树的构建过程中存在的因插入新状态而引起的冲突问题,并能避免该冲突导致的大量词典数据的移动问题。(51)Int.Cl.权利要求书1页 说明书6页 附图1页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书1页 说明书6页 附图1页(10)申请公布号 CN 103365992 ACN 103365992 A1/1页21.一种。
3、基于一维线性空间实现Trie树的词典检索方法,其特征在于,该方法包括:生成一维线性空间Trie树的词典数据;根据用户输入确定待查询词条key;根据词条key的当前状态实现查询。2.根据权利要求1所述的方法,其特征在于,所述词典数据的key转化为节点后存储在一维数组中,所述一维数组的值用来标识base值是否唯一。3.根据权利要求1所述的方法,其特征在于,所述一维线性空间Trie树中将所有终端结点变为非终端结点,在所述终端结点后面增加一个叶子节点,并将叶子节点的check值赋上其存储位置。4.根据权利要求1或3所述的方法,其特征在于,所述叶子节点还包括:叶子节点的base值用以标识其是否为终端结点。
4、。5.根据权利要求1所述的方法,其特征在于,所述查询包括以下步骤:把当前结点指向根节点;根据当前输入的字符做出状态转移,获取其直接后继状态的位置;校验当前状态的前驱,确定当前状态由哪一状态转移而来;获取词条key对应的value值。6.根据权利要求1或权利要求5所述的方法,其特征在于,所述查询包括:根据词条key的查询可以获得其所有前缀词的结果。权 利 要 求 书CN 103365992 A1/6页3一种基于一维线性空间实现 Trie 树的词典检索方法技术领域0001 本发明涉及一种词典检索方法,尤其涉及一种基于一维线性空间实现Trie树的词典检索方法。背景技术0002 在信息检索和自然语言处。
5、理领域,特别是基于词典的技术应用中,词典的规模一般都非常大,拥有成千上万甚至上亿条记录,尤其是搜索引擎中倒排索引词的规模最为庞大。对海量数据词典的查找,当前通常采用索引的数据结构来实现。常用的索引结构包括线性索引表、倒排表、散列(hash)表和搜索树等。对于一个记录的关键字(key)长度为n,词典的规模为N的情况下(其中Nn)各索引结构检索的时间复杂度分析如下:0003 线性索引结构或倒排表一般采用顺序结构存储词典中的记录,对词典中记录的查找一般采用顺序遍历每一个记录,因此,每一次查找的时间复杂度为O(N)l(n)(其中l(n)为两条记录的关键字因比较所花费的时间)。此种方法的改进是让词典的每。
6、一条记录按关键字(key)有序,在检索的时候用折半查找,其时间复杂度为O(logN)l(n)。0004 在基于词典的自然语言处理应用,如基于词典的中文分词、基于词典的字音转换(汉字转换成拼音)、基于词典的命名实体识别、基于词典的标注(包括词性标注和语义标注等),其中的核心部分是要进行大量的查询操作。为了满足此类应用的要求,就需要一种高效的词典检索方法。现今也有基于二维数组的Trie树的词典查询方法,但是基于二维数组的这种查询方法在Trie树的构建过程中会存在因插入新状态而引起的冲突,导致要移动大量存在冲突的数据问题。发明内容0005 本发明旨在解决上述缺陷之一。0006 因此,本发明提供一种基。
7、于一维线性空间实现Trie树的词典检索方法,通过生成一维线性空间的Trie树词典数据;根据用户输入确定待查询词条key;根据词条key的当前状态实现查询。在一维线性空间下构建Trie树的词典数据下,提高了词典加载和检索速度,并且能够快速检索到词条的所有前缀词,另外,基于一维线性空间实现Trie树的词典检索能够解决传统Trie树词典数据检索在Tire树的构建过程中存在的因插入新状态而引起的冲突问题,并能避免该冲突导致的大量词典数据的移动问题。0007 为此,本发明公开了一种基于一维线性空间实现Trie树的词典检索方法,该方法包括以下步骤:生成一维线性空间Trie树的词典数据;根据用户输入确定待查。
8、询词条key;根据词条key的当前状态实现查询。0008 优选地,词典数据的key转化为节点后存储在一维数组中,所述一维数组的值用来标识base值是否唯一。0009 优选地,所述一维线性空间的Trie树中将所有终端结点变为非终端结点,在所述终端结点后面增加一个叶子节点,并将叶子节点的check值赋上其存储位置。说 明 书CN 103365992 A2/6页40010 优选地,所述叶子节点还包括:叶子节点的base值用以标识其是否为终端结点。0011 优选地,所述查询包括以下步骤:把当前结点指向根节点;根据当前输入的字符做出状态转移,获取其直接后继状态的位置;校验当前状态的前驱,确定当前状态由哪。
9、一状态转移而来;获取词条key对应的value值。0012 优选地,所述查询包括:词条key的查询可以获得其所有前缀词的结果。0013 本发明提供的一种基于一维线性空间实现Trie树的词典检索方法,通过生成一维线性空间的Trie树词典数据;根据用户输入确定待查询词条key;根据词条key的当前状态实现查询。在一维线性空间下构建Trie树的词典数据下,提高了词典加载和检索速度,并且能够快速检索到词条的所有前缀词。同时,在Trie树的构建过程中通过调整base值,使得其所有直接后继均不会发生冲突,因此避免了数据移动或存储空间分配的回溯问题。0014 应当理解,以上总体说明和以下详细说明都是说明性和。
10、实例性的,旨在提供对所要求的本发明的进一步说明。附图说明0015 图1是本发明实施例一种基于一维线性空间实现Trie树的词典检索方法的流程图。0016 图2是本发明实施例根据词条key的当前状态实现查询的流程框架图。具体实施方式0017 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。0018 本发明实施例提供的一种基于一维线性空间实现Trie树的词典检索方法。0019 如图1所示,是本发明实施例一种基于一维线性空间实现Trie树的词典检索方法的流程图。0020 步骤S1。
11、10:生成一维线性空间Trie树的词典数据。0021 获取词典数据,要生成一维线性空间Trie树的词典数据包括以下具体步骤:0022 步骤S111:将所有词条和属性信息以key为中心按词典顺序排序,合并拥有相同key值的values,要保证key不存在重复。0023 遍历_Keys和_values中存储的元素,按词典顺序将Keys和_values以key为中心排序,0024 并合并相同key的value值,将有序的key序列和value序列存储到ListStringkeys0025 和CollectionStringattributes中;0026 该步骤的伪代码如下:0027 说 明 书CN。
12、 103365992 A3/6页50028 步骤S112:定义起始状态,编号为0,其包含的信息值为code0,depth0,start0,endN,其中N为词典的规模,即key的数量。0029 步骤S113:将起始状态放入双数组第0位置,将其base01(array2*0array01),并标识base为1的值已经被占用(保证所有状态的base值唯 ),check00(array2*0+1array10)0030 步骤S114:以起始状态作为当前状态。0031 步骤S115:获取当前状态的所有直接后继状态的信息,若直接后继结点列表为空,即当前结点为终端结点“$”,表示从起始结点到当前结点构成的。
13、key恰好是词典中的一个完整词条,将当前结点(终端结点)的base值赋上当前key词典顺序序号的相反数,该路径上执行完毕;否则执行步骤S116。0032 该步骤的伪代码如下:0033 说 明 书CN 103365992 A4/6页60034 说 明 书CN 103365992 A5/6页70035 步骤S116:为当前结点寻找一个合适的base值,使得base值唯一,且不会导致所有直接后继结点与现有Trie树存储的结点冲突。依次将当前结点的直接后继结点插入Trie树中,并将其check值赋上当前结点的base值,再依次把当前结点的直接后继结点作为当前结点,跳转到步骤S115。0036 该步骤的。
14、伪代码如下:0037 0038 说 明 书CN 103365992 A6/6页80039 所述一维线性空间的Trie树中将所有终端结点变为非终端结点,在所述终端结点后面增加一个叶子节点,并将叶子节点的check值赋上其存储位置。0040 将所有的终端结点变为非终端结点,并在其后面增加一个叶子结点,叶子结点的check值赋上自己的存储位置,叶子结点的base值赋上从初始结点(0结点)到当前叶子结点路径上的输入字符组成的完整词条在整个有序词条集合中位置的相反数(即叶子结点所处的key中在所有按词典排序的词条集中序号的相反数),因此结点的base值的符号用于标识是否是终端结点(叶子结点,其base值。
15、小于0)。0041 步骤S120:根据用户输入待查询词条key。0042 Trie树构建好之后,接下来就是查询用户输入的词条是否存在Trie树,即是否是从根结点到叶子结点的一条完整路径。0043 步骤S130:根据词条key的当前状态实现查询。0044 如图2所示,是根据词条key的当前状态实现查询的流程框架图,具体步骤如下:0045 步骤S131:把当前结点指向根节点。0046 步骤S132:根据当前输入的字符做出状态转移,获取其直接后继状态的位置。0047 步骤S133:校验当前状态的前驱,确定当前状态由哪一状态转移而来。0048 步骤S134:获取词条key对应的value值。0049 。
16、在当前状态为s,输入的字符为c,下一状态为t的条件下,其本方法的查询过程的约束条件修改为:0050 checkbases+cbases;bases+ct;每个状态的bases值唯一。0051 若当前状态s可以转移到叶子结点t中,则其约束条件为:0052 basest;tcheckt。0053 baset0且baset的值为DFA的初始结点0到当前叶子结点经过的字符组成的词条在所有按词典顺序排序的词条集中位置的相反数。0054 本发明实施例中可以获取词条key的所有前缀词,并可以将检索到的每条结果信息保存在一个对象TrieResult中,该表存储的变量作如下描述:Length表示当前key的长度。
17、;Index当前key在词典中的存储序号-1,即当前key对应属性的存储位置。0055 本发明实施例一种基于一维线性空间实现Trie树的词典检索方法的查询速度18.3MB/s。0056 因此,本发明提供一种基于一维线性空间实现Trie树的词典检索方法,通过生成一维线性空间的Trie树词典数据;根据用户输入确定待查询词条key;根据词条key的当前状态实现查询。在一维线性空间下构建Trie树的词典数据下,提高了词典加载和检索速度,并且能够快速检索到词条的所有前缀词,同时,在Trie树的构建过程中通过调整base值,使得其所有直接后继均不会发生冲突,因此避免了数据移动或存储空间分配的回溯问题。说 明 书CN 103365992 A1/1页9图1图2说 明 书 附 图CN 103365992 A。