一种字符串词典的索引方法及系统的制作方法

文档序号:6525784阅读:163来源:国知局
一种字符串词典的索引方法及系统的制作方法
【专利摘要】本申请公开了一种字符串词典的索引方法,包括:获取待测字符串键P;查询预先建立的包括索引Trie和标签Trie的索引模型,其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。本申请将原有的Patricia?Trie分解为一个索引Trie和一个标签Trie,索引Trie只记录字符串标签的首字母,其尾字符串由标签Trie提供,相比于原有的Patricia?Trie需要记录全部的字符串标签,大大减少了存储空间。
【专利说明】—种字符串词典的索引方法及系统
【技术领域】
[0001]本申请涉及数据索引【技术领域】,更具体地说,涉及一种字符串词典的索引方法及系统。
【背景技术】
[0002]近年来,随着互联网和移动设备的迅猛发展和大数据时代的来临,大规模的数据需要处理,其中文本数据占据着越来越大的比重。字符串词典索引作为文本索引的基础,其应用无处不在。如RDF、IP数据包分类、网络搜索引擎和生物信息计算等。
[0003]但是,现有的字符串词典索引系统,例如将Patricia和B+tree相结合的StringB-tree、B-trie等,均存在空间占用过大的问题,影响了字符串词典索引的发展。因此,需要一种新的字符串词典索引系统,来解决上述问题。

【发明内容】

[0004]有鉴于此,本申请提供了一种字符串词典的索引方法及系统,用于解决现有的索引方法空间占用大的问题。
[0005]为了实现上述目的,现提出的方案如下:
[0006]一种字符串词典的索引方法,包括:
[0007]获取待测字符串键P;
[0008]查询预先建立的包括索引Trie和标签Trie的索引模型;
[0009]其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0010]优选地,所述索引Trie和所述标签Trie为通过LOUDS表示法进行存储的。
[0011]优选地,所述索引Trie和所述标签Trie的建立过程如下:
[0012]将多个字符串键值对进行排序,该排序与字符串在词典中的顺序一致;
[0013]将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对;
[0014]为上述每个组建立一个第一 Patricia Trie ;
[0015]从每个第一 Patricia Trie中选取最大键作为新键,每个第一 Patricia Trie的标识作为对应新键的值;
[0016]使用所有的新键及新键的值构造一个第二Patricia Trie,该第二Patricia Trie作为根节点,与作为叶子节点的所述第一 Patricia Trie形成树状结构;
[0017]将第一PatriciaTrie 和第二Patricia Trie 中的每个Patricia Trie,分解成一个标签Trie和一个索引Trie ;[0018]其中:将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0019]优选地,还包括:将所有的标签Trie以叠加的方式合并为一个统一标签Trie,则所述索引模型中包括的标签Trie为所述统一标签Trie。
[0020]优选地,所述查询预先建立的包括索引Trie和标签Trie的索引模型,包括:
[0021]在第二索引Trie中查找第一个不小于所述P的字符串键和对应的值,该过程包括准确查找和下界查找,其中准确查找过程为:
[0022]I)令第二索引Trie的根节点为当前节点node,P为当前待测字符串P丨;
[0023]2)判断是否为空字符串;
[0024]3)如果是,准确查找过程结束,获得当前节点node和当前待测字符串P丨;
[0025]4)如果不是,在当前节点node中找到P '的首字母a的子节点;
[0026]如果找不到,执行步骤3);
[0027]5)如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s ’ ;
[0028]6)将P'首字母a和s'组成字符串as ',判断as'是否是的前缀;
[0029]如果不是,执行步骤3);
[0030]7)如果是,将子节点作为新的当前节点node,将P '去掉as '前缀后的字符串作为新的当前待测字符串,返回步骤2):判断P'是否为空字符串;
[0031]准确查找结束后,得到当前节点node和当前待测字符串P丨,接下来进行下界查找,下界查找过程如下:
[0032]I)判断是否为空字符串;
[0033]如果是,则执行下述步骤9);
[0034]2)如果不是,在当前节点node的字符串标签的首字母标签中查找第一个不小于P '首字母a的首字母标签c ;
[0035]如果没找到,执行下述步骤6);
[0036]3)如果找到C,同时找到c对应的子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s ,;
[0037]4)将c和?组成字符串CS丨,判断CS丨是否不小于P丨;
[0038]5)如果是,将c对应的子节点作为新的当前节点node,执行下述步骤9);
[0039]6)如果不是,查找子节点右边第一个超级兄弟节点;
[0040]7)如果没找到,提示查找失败;
[0041]8)如果找到,将找到的超级兄弟节点作为新的当前节点node ;
[0042]9)判断当前节点node中的值是否存在;
[0043]10)如果不存在,将node的左边第一个子节点作为新的当前节点node,执行所述步骤9);[0044]11)如果存在,查找成功,将当前节点node携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P ;
[0045]其中,所述步骤6)查找子节点右边第一个超级兄弟节点的过程为:
[0046]I)查找当前节点node的右边第一个兄弟节点;
[0047]2)如果查找到,则查找成功,返回该兄弟节点;
[0048]3)如果没找到,查找当前节点node的父节点;
[0049]4)如果查找到父节点,将其作为新的当前节点node,执行上述步骤I);
[0050]5)如果没查找到父节点,则提示查找失败。
[0051]优选地,所述将所述第二索引Trie中的节点a携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P,包括:
[0052]令第一索引Trie的根节点为当前节点node,P为当前待测字符串P ’ ;
[0053]判断是否为空字符串;
[0054]如果是,将当前节点b携带的值作为所述待测字符串键P的值;
[0055]如果不是,贝U在当前节点node中找到对应P '首字母a的子节点;
[0056]如果找不到,提示查找失败;
[0057]如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s f ;
[0058]将P '首字母a和s '组成字符串as ’,判断as ’是否是P ’的前缀;
[0059]如果不是,提示查找失败;
[0060]如果是,则将该节点作为新的当前节点node,将P '去掉as '前缀后的字符串作为新的当前待测字符串,执行判断是否为空字符串这一步骤。
[0061]一种字符串词典的索引系统,包括:
[0062]获取单元,用于获取待测字符串键P ;
[0063]查询单元,用于查询预先建立的包括索引Trie和标签Trie的索引模型;
[0064]其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串键除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0065]优选地,还包括:
[0066]索引模型建立单元,用于建立索引Trie和标签Trie,其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0067]优选地,所述索引模型建立单元包括:
[0068]排序单元,用于将多个字符串键值对进行排序,该排序与字符串在词典中的顺序
一致;
[0069]分组单元,用于将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对;
[0070]第一 Patricia Trie建立单元,用于为上述每个组建立一个第一 Patricia Trie ;
[0071]第二 Patricia Trie建立单元,用于从每个第一 Patricia Trie中选取最大键作为新键,每个第一Patricia Trie的标识作为对应新键的值,使用所有的新键及新键的值构造一个第二 Patricia Trie,该第二 Patricia Trie作为根节点,与作为叶子节点的所述第一 Patricia Trie形成树状结构;
[0072]分解单兀,用于将第一 Patricia Trie和第二 Patricia Trie中的每个PatriciaTrie,分解成一个标签Trie和一个索引Trie ;其中:将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0073]优选地,所述索引模型建立单元还包括合并单元,用于将所述标签Trie以叠加的方式合并为一个统一标签Trie。
[0074]从上述的技术方案可以看出,本申请公开的字符串词典索引方法,通过查找预先建立的索引模型,来查找待测字符串键,该索引模型由索引Trie和标签Trie构成,其中,所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。本申请将原有的Patricia Trie分解为一个索引Trie和一个标签Trie,索引Trie只记录字符串标签的首字母,其尾字符串由标签Trie提供,相比于原有的Patricia Trie需要记录全部的字符串标签,大大减少了存储空间。
【专利附图】

【附图说明】
[0075]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0076]图1为本申请实施例公开的一种字符串词典的查找方法流程图;
[0077]图2为本申请实施例公开的索引模型建立方法流程图;
[0078]图3为本申请实施例公开的一个简单的字符串词典示意图;
[0079]图4为本申请实施例公开的第一和第二 Patricia Trie示意图;
[0080]图5为本申请实施例公开的索引Trie和统一标签Trie示意图;
[0081]图6为本实施例公开的一种准确查找方法流程图;
[0082]图7为本申请实施例公开的一种下界查找方法流程图;
[0083]图8为本申请实施例公开的一种查找超级兄弟节点方法流程图;
[0084]图9为本申请实施例公开的一种在第一索引Trie中匹配P的方法流程图;[0085]图10为本申请实施例公开的一种字符串词典的索引系统结构图;
[0086]图11为本申请实施例公开的另一种字符串词典的索引系统结构图;
[0087]图12为本申请实施例公开的一种索引模型建立单元结构图;
[0088]图13为本申请实施例公开的另一种索引模型建立单元结构图。
【具体实施方式】
[0089]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0090]为了便于表述,下面我们对本文中用到的一些专业词语做解释:
[0091]字符串词典:一个键值对的集合,键是字符串,值一般是整数;
[0092]Trie:一种有序树,每个分支对应一个字符,字符串键的字符存储在从根节点到某个节点的路径上,值存在该节点内。一般用于索引和存储字符串词典;
[0093]LOUDS:Level-0rder Unary Degree Sequence,是一个二进制数组,用来表不树的拓扑结构信息,这种表示可以避免用指针,从而大大减少存储时候的空间占用。
[0094]实施例一
[0095]参见图1,图1为本申请实施例公开的一种字符串词典的查找方法流程图。
[0096]如图1所示,该方法包括:
[0097]步骤101:获取待测字符串键P ;
[0098]步骤102:查询预先建立的包括索引Trie和标签Trie的索引模型。
[0099]具体地,所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0100]本实施例中,通过查找预先建立的索引模型,来查找待测字符串键,该索引模型将原有的Patricia Trie分解为一个索引Trie和一个标签Trie,索引Trie只记录字符串键的首字母,其尾字符串由标签Trie提供,在索引时,只需要在索引Trie中查找字符串标签的首字母,其对应的尾字符串由标签Trie提供,相比于原有的Patricia Trie需要记录全部的字符串标签,大大减少了存储空间。
[0101]需要说明的是,索引Trie和标签Trie可以通过树的LOUDS表示法来存储的。LOUDS:Level-0rder Unary Degree Sequence,是一个二进制数组,用来表示树的拓扑结构信息,这种表示可以避免用指针,从而大大减少存储时候的空间占用。
[0102]实施例二
[0103]本实施例将详细介绍索引模型即索引Trie和标签Trie的建立过程。
[0104]参见图2,图2为本申请实施例公开的索引模型建立方法流程图。
[0105]如图2所示,该方法包括:
[0106]步骤201:将多个字符串键值对进行排序,该排序与字符串在词典中的顺序一致;[0107]步骤202:将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对;
[0108]步骤203:为上述每个组建立一个第一 Patricia Trie ;
[0109]步骤204:建立一个第二 Patricia Trie ;
[0110]具体地,从每个第一 Patricia Trie中选取最大键作为新键,每个第一 PatriciaTrie的标识作为对应新键的值,使用所有的新键及新键的值构造一个第二Patricia Trie,该第二 Patricia Trie作为根节点,与作为叶子节点的所述第一 Patricia Trie形成树状结构。
[0111]步骤205:将第一Patricia Trie和第二Patricia Trie 中的每个Patricia Trie,分解成一个标签Trie和一个索引Trie。
[0112]具体地,将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0113]下面我们以一个具体的实例来进行说明:
[0114]参见图3,图3为一个简单的字符串词典。以该词典为数据,建立索引模型。
[0115]首先,对键值对集合按照字符串键的词典顺序进行排列。假设每个叶子节点只能够存储三个键值对,那么我们将该键值对集合分成三组,分别以b、k、t为首字母。
[0116]然后,为每个分组建立一个第一 Patricia Trie,形成一个叶子节点,同时从每个分组中取出最大键作为新键,分组对应的叶子节点的位置作为值,这样形成一个新的键值对集合,为该集合建立一个第二Patricia Trie,形成根节点,此时结果如图4。图4中,各个节点中的数值,第一个数值为该节点的节点编号,第二个数值为该节点对应字符串键的值。
[0117]接着,对各个节点的Patricia Trie进行分解,分解成一个索引Trie和一个标签Trie。
[0118]分解完成后,还可以进一步将分解成的多个标签Trie进行合并,以叠加的方式合并为一个统一标签Trie。分解后的索引Trie及统一标签Trie如图5所示。图5中,索引Trie的节点中记载有三个数值,第一数值为节点编号,第二个数值为尾字符串在标签Trie中的节点编号,第三数值为当前节点对应的字符串键的值。图5中的标签Trie是各个Patricia Trie分解成的分标签Trie经合并后的统一标签Trie,适用于各个索引Trie。
[0119]实施例三
[0120]本实施例将详细介绍如何根据建立的索引模型进行查找的。
[0121]该方法包括在第二索引Trie中查找第一个不小于所述P的字符串键和对应的值,该过程包括准确查找和下界查找两个过程,其中准确查找过程参见图6,图6为本实施例公开的一种准确查找方法流程图。
[0122]步骤601:令第二索引Trie的根节点为当前节点node,P为当前待测字符串P丨;
[0123]步骤602:判断P丨是否为空字符串;
[0124]步骤603:如果是,准确查找过程结束,获得当前节点node和当前待测字符串P';
[0125]步骤604:如果不是,在当前节点node中找到P丨的首字母a的子节点;
[0126]如果找不到,执行步骤603 ;
[0127]步骤605:如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s丨;
[0128]步骤606:将P'首字母a和s'组成字符串as ',判断as'是否是的前缀;
[0129]如果不是,执行步骤603 ;
[0130]步骤607:如果是,将子节点作为新的当前节点node,将P'去掉as'前缀后的字符串作为新的当前待测字符串P丨,返回步骤:602:判断P丨是否为空字符串。
[0131]经过上述准确查找过程,结束后我们会得到当前节点node和当前待测字符串P'。接下来,我们进行下界查找,下界查找过程如下:
[0132]参见图7,图7为本申请实施例公开的一种下界查找方法流程图。
[0133]步骤603:获得当前节点node和当前待测字符串P ’ ;
[0134]步骤701:判断P'是否为空字符串;
[0135]如果是,则执行下述步骤709 ;
[0136]步骤702:如果不是,则查找第一个不小于P '首字母a的首字母标签c ;
[0137]具体地,在当前节点node的字符串标签的首字母标签中查找第一个不小于P ’首字母a的首字母标签C,如果没找到,执行下述步骤706 ;
[0138]步骤703:如果找到C,则继续在标签Trie中查找尾字符串s丨;
[0139]具体地,在找到c时,同时找到c对应的子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s ,;
[0140]步骤704:将c和?组成字符串cs ;,判断cs ;是否不小于P ;;
[0141]步骤705:如果是,将c对应的子节点作为新的当前节点node,执行下述步骤709 ;
[0142]步骤706:如果不是,查找子节点右边第一个超级兄弟节点;
[0143]步骤707:如果没找到,提示查找失败;
[0144]步骤708:如果找到,将找到的超级兄弟节点作为新的当前节点node ;
[0145]步骤709:判断当前节点node中的值是否存在;
[0146]步骤710:如果不存在,将node的左边第一个子节点作为新的当前节点node,执行所述步骤709 ;
[0147]步骤711:如果存在,查找成功,将当前节点node携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P。
[0148]需要说明的是,在步骤706:查找子节点右边第一个超级兄弟节点时,可以按照下述方法进行,详细请参见图8,图8为本申请实施例公开的一种查找超级兄弟节点方法流程图。
[0149]步骤801:查找当前节点node的右边第一个兄弟节点;
[0150]步骤802:如果查找到,则查找成功,返回该兄弟节点;
[0151]步骤803:如果没找到,查找当前节点node的父节点;
[0152]步骤804:如果查找到父节点,将其作为新的当前节点node,执行上述步骤801 ;
[0153]步骤805:如果没查找到父节点,则提示查找失败。[0154]至此,我们完成了在第二索引Trie中的匹配过程,接下来将介绍在第一索引Trie中的匹配过程,也就是上述步骤711,将当前节点node携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P。
[0155]参见图9,图9为本申请实施例公开的一种在第一索引Trie中匹配P的方法流程图。
[0156]在该第一索引Trie中匹配P,包括:
[0157]步骤7111:令第一索引Trie的根节点为当前节点node,P为当前待测字符串;
[0158]步骤7112:判断P丨是否为空字符串;
[0159]步骤7113:如果是,将当前节点b携带的值作为所述待测字符串键P的值;
[0160]步骤7114:如果不是,则在当前节点node中找到对应P'首字母a的子节点;
[0161]步骤7115:如果找不到,提示查找失败;
[0162]步骤7116:如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s丨;
[0163]步骤7117:将P'首字母a和s'组成字符串as ',判断as'是否是"的前
三双;
[0164]如果不是,执行步骤7115:提示查找失败;
[0165]步骤7118:如果是,则将该节点作为新的当前节点node,将P'去掉as '前缀后的字符串作为新的当前待测字符串P丨,执行步骤7112:判断P丨是否为空字符串。
[0166]执行上述步骤,直到找不到匹配的分支节点或者当前P为空字符串。
[0167]下面,我们以图5中的索引模型为基础,以待查找字符串P=then为例,举例说明整个查找过程。
[0168]在第二索引Trie中匹配以t为首字母的分支,找到节点4 ;
[0169]节点4中存储有尾字符串在标签Trie中的节点编号为9 ;
[0170]从标签Trie中节点9开始往上遍历经过节点7、6、3、1,得到尾字符串为hing ;
[0171]判断hing大于hen,确定P只可能存在该节点4所对应的叶子节点中,则将节点4对应的值3所代表的第一索引Trie调入内存,在该第一索引Trie中匹配P。
[0172]具体地,在第一索引Trie中匹配P如下:
[0173]在第一索引Trie的根节点I匹配t,找到节点2 ;
[0174]节点2内存储有尾字符串在标签Trie中的节点编号为4 ;
[0175]从标签Trie中节点4往上遍历,得到尾字符串h;
[0176]h匹配P的后缀hen的前缀,说明P只可能存在与节点2的为根的子树中;
[0177]在节点2中匹配e,找到节点4 ;
[0178]节点4内存储有尾字符串在标签Trie中的节点编号为5 ;
[0179]从标签Trie中节点5往上遍历,得到尾字符串η ;
[0180]η匹配P的后缀η,说明如果P存在,那么对应的节点就是节点4 ;
[0181]节点4内值信息存在,说明P存在,其对应的值为44,查找成功。
[0182]实施例四
[0183]参见图10,图10为本申请实施例公开的一种字符串词典的索引系统结构图。
[0184]如图10所示,该系统包括:[0185]获取单元101,用于获取待测字符串键P ;
[0186]查询单元102,用于查询预先建立的包括索引Trie和标签Trie的索引模型;
[0187]其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串键除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0188]本实施例中,通过查找预先建立的索引模型,来查找待测字符串键,该索引模型将原有的Patricia Trie分解为一个索引Trie和一个标签Trie,索引Trie只记录字符串标签的首字母,其尾字符串由标签Trie提供,在索引时,只需要在索引Trie中查找字符串标签的首字母,其对应的尾字符串由标签Trie提供,相比于原有的Patricia Trie需要记录全部的字符串标签,大大减少了存储空间。
[0189]实施例五
[0190]参见图11,图11为本申请实施例公开的另一种字符串词典的索引系统结构图。
[0191]如图11所示,在上一实施例的基础上,本实施例进一步增加了索引模型建立单元103,用于建立索引Trie和标签Trie,其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0192]实施例六
[0193]参见图12,图12为本申请实施例公开的一种索引模型建立单元结构图。
[0194]如图12所示,索引模型建立单元103包括:
[0195]排序单元1031,用于将多个字符串键值对进行排序,该排序与字符串在词典中的顺序一致;
[0196]分组单元1032,用于将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对;
[0197]第一 Patricia Trie建立单元1033,用于为上述每个组建立一个第一PatriciaTrie ;
[0198]第二 Patricia Trie建立单兀1034,用于从每个第一 Patricia Trie中选取最大键作为新键,每个第一Patricia Trie的标识作为对应新键的值,使用所有的新键及新键的值构造一个第二 Patricia Trie,该第二 Patricia Trie作为根节点,与作为叶子节点的所述第一 Patricia Trie形成树状结构;
[0199]分解单兀1035,用于将第一 Patricia Trie和第二 Patricia Trie中的每个Patricia Trie,分解成一个标签Trie和一个索引Trie ;其中:将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
[0200]需要说明的是,索引模型建立单元103还可以进一步增加合并单元1036,用于将所述标签Trie以叠加的方式合并为一个统一标签Trie,如图13所不。
[0201]最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0202]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0203]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种字符串词典的索引方法,其特征在于,包括: 获取待测字符串键P ; 查询预先建立的包括索引Trie和标签Trie的索引模型; 其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
2.根据权利要求1所述的方法,其特征在于,所述索引Trie和所述标签Trie为通过LOUDS表示法进行存储的。
3.根据权利要求1所述的方法,其特征在于,所述索引Trie和所述标签Trie的建立过程如下: 将多个字符串键值对进行排序,该排序与字符串在词典中的顺序一致; 将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对; 为上述每个组建立一个第一 Patricia Trie ; 从每个第一 Patricia Trie中选取最大键作为新键,每个第一 Patricia Trie的标识作为对应新键的值; 使用所有的新键及新键的值构造一个第二Patricia Trie,该第二Patricia Trie作为根节点,与作为叶子节点的所述第一 Patricia Trie形成树状结构; 将第一Patricia Trie 和第二Patricia Trie 中的每个Patricia Trie,分解成一个标签Trie和一个索引Trie ; 其中:将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
4.根据权利要求3所述的方法,其特征在于,还包括:将所有的标签Trie以叠加的方式合并为一个统一标签Trie,则所述索引模型中包括的标签Trie为所述统一标签Trie。
5.根据权利要求3所述的方法,其特征在于,所述查询预先建立的包括索引Trie和标签Trie的索引模型,包括: 在第二索引Trie中查找第一个不小于所述P的字符串键和对应的值,该过程包括准确查找和下界查找,其中准确查找过程为: 1)令第二索引Trie的根节点为当前节点node,P为当前待测字符串P’ ; 2)判断P丨是否为空字符串; 3)如果是,准确查找过程结束,获得当前节点node和当前待测字符串P丨; 4)如果不是,在当前节点node中找到P丨的首字母a的子节点; 如果找不到,执行步骤3); 5)如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s丨; 6)将首字母a和s'组成字符串as',判断as'是否是P'的前缀; 如果不是,执行步骤3); 7)如果是,将子节点作为新的当前节点node,将P'去掉as '前缀后的字符串作为新的当前待测字符串,返回步骤2):判断P'是否为空字符串; 准确查找结束后,得到当前节点node和当前待测字符串P ',接下来进行下界查找,下界查找过程如下: 1)判断P’是否为空字符串; 如果是,则执行下述步骤9); 2)如果不是,在当前节点node的字符串标签的首字母标签中查找第一个不小于P丨首字母a的首字母标签c ; 如果没找到,执行下述步骤6); 3)如果找到C,同时找到c对应的子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s ,; 4)将(^和?组成字符串,判断是否不小于; 5)如果是,将c对应的子节点作为新的当前节点node,执行下述步骤9); 6)如果不是,查找子节点右边第一个超`级兄弟节点; 7)如果没找到,提示查找失败; 8)如果找到,将找到的超级兄弟节点作为新的当前节点node; 9)判断当前节点node中的值是否存在; 10)如果不存在,将node的左边第一个子节点作为新的当前节点node,执行所述步骤9); 11)如果存在,查找成功,将当前节点node携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P ; 其中,所述步骤6)查找子节点右边第一个超级兄弟节点的过程为: O查找当前节点node的右边第一个兄弟节点; 2)如果查找到,则查找成功,返回该兄弟节点; 3)如果没找到,查找当前节点node的父节点; 4)如果查找到父节点,将其作为新的当前节点node,执行上述步骤I); 5)如果没查找到父节点,则提示查找失败。
6.根据权利要求5所述的方法,其特征在于,所述将所述第二索引Trie中的节点a携带的字符串键的值对应的第一索引Trie调入内存,在该第一索引Trie中匹配P,包括:令第一索引Trie的根节点为当前节点node,P为当前待测字符串P丨; 判断P '是否为空字符串; 如果是,将当前节点b携带的值作为所述待测字符串键P的值; 如果不是,则在当前节点node中找到对应P丨首字母a的子节点; 如果找不到,提示查找失败; 如果找到子节点,根据找到的子节点携带的尾字符串在标签Trie中的节点编号,在所述标签Trie中查找尾字符串s f ;将P'首字母a和s'组成字符串as',判断as'是否是P '的前缀; 如果不是,提示查找失败; 如果是,则将该节点作为新的当前节点node,将P '去掉as '前缀后的字符串作为新的当前待测字符串,执行判断是否为空字符串这一步骤。
7.一种字符串词典的索引系统,其特征在于,包括: 获取单元,用于获取待测字符串键P ; 查询单元,用于查询预先建立的包括索引Trie和标签Trie的索引模型; 其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串键除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
8.根据权利要求7所述的系统,其特征在于,还包括: 索引模型建立单元,用于建立索引Trie和标签Trie,其中:所述索引Trie由多个节点,及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号,所述尾字符串为字符串标签除首字母外剩余的字符串;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。`
9.根据权利要求8所述的系统,其特征在于,所述索引模型建立单元包括: 排序单元,用于将多个字符串键值对进行排序,该排序与字符串在词典中的顺序一致; 分组单元,用于将所有字符串键值对分成若干组,每组具有若干按照上述顺序排列的字符串键值对; 第一 Patricia Trie建立单元,用于为上述每个组建立一个第一 Patricia Trie ; 第二 Patricia Trie建立单元,用于从每个第一 Patricia Trie中选取最大键作为新键,每个第一 Patricia Trie的标识作为对应新键的值,使用所有的新键及新键的值构造一个第二 Patricia Trie,该第二 Patricia Trie作为根节点,与作为叶子节点的所述第一Patricia Trie形成树状结构; 分解单兀,用于将第一 Patricia Trie和第二 Patricia Trie中的每个PatriciaTrie,分解成一个标签Trie和一个索引Trie ;其中:将所述第一 Patricia Trie分解成的索引Trie确定为第一索引Trie,将所述第二 Patricia Trie分解成的索引Trie确定为第二索引Trie,所述索引Trie由多个节点及节点之间路径上的字符串标签首字母组成,各节点中携带字符串键的值及字符串标签的尾字符串在标签Trie中的节点编号;所述标签Trie上的各节点具有唯一编号,且每个节点到根节点之间的路径上存储的字符串,为所述索引Trie上携带当前节点编号的节点对应的字符串标签的尾字符串。
10.根据权利要求9所述的系统,其特征在于,所述索引模型建立单元还包括合并单元,用于将所述标签Trie以叠加的方式合并为一个统一标签Trie。
【文档编号】G06F17/30GK103699647SQ201310731193
【公开日】2014年4月2日 申请日期:2013年12月26日 优先权日:2013年12月26日
【发明者】张广泉, 张国清, 戎玫, 顾玉磊 申请人:苏州大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1