文本字符串搜索设备、文本字符串搜索方法和文本字符串搜索程序的制作方法_2

文档序号:9713574阅读:来源:国知局
(aba、abcc、cab、cac),则构建特里树,使得在同一节点中布置由它们共享的同一字符。搜索信息存储单元50可以存储由特里树表示的关键字本身,或如稍后所描述的可以仅存储特里树的结构。
[0046]此外,树结构中所表示的每个叶节点与每个关键字相对应。因此,搜索信息存储单元50与每个叶节点相关联存储图2中所示每个关键字的分数(字符串分数)。由此,在通过搜索特里树到达叶节点时,能够获得与由叶节点表示的关键字相对应的字符串分数。
[0047]此外,搜索信息存储单元50存储前缀p的集合,以搜索以查询P结尾的字符串。前缀P是从每个关键字的开始部分提取出的一个或更多个连续字符的字符串。可以按照字典式顺序从结尾开始对前缀P的集合分类。
[0048]在该示例实施例中,结构XBW被用于表示这种上述前缀的集合。XBW是能够有效表示标记的树结构的数据结构。通过经由使用XBW结构来表达特里树,实现对以查询P结尾的前缀P的范围查询。
[0049]已知能够通过用于实现等同操作的两种类型的数据结构来实现XBW。在与前缀相对应的特里树上的节点中,关于字典中的每个前缀,第一XBW具有与表示子节点的字符相关联的结构。在特里树上与前缀相对应的节点中,关于字典中的每个前缀,第二XBW具有将前缀的ID关联为双亲节点的结构。以下,将描述每个XBW的内容。
[0050]图3是示出第一XBW的示例的示意图。在图3中所示的第一XBW中,以字典式顺序从结尾开始布置与特里树的各节点相对应的前缀,并且表示子节点的字符与每个前缀相关联。该结构实现从前缀向表示特定字符的子节点的移动,由此实现与特里树的操作等同的操作。此外,可以针对以查询P结尾的前缀p执行范围搜索。
[0051 ]图4是示出第二XBW的示例的示意图。在图4中所示的第二XBW中,以字典式顺序从结尾开始布置与特里树的各节点相对应的前缀,并且将ID指派给各前缀。然后,各前缀与其双亲ID相关联。该结构实现对于下一个双亲节点的移动。此外,与第一 XBW类似,可以针对以查询P结尾的前缀p执行范围搜索。
[0052]顺便提及,在第二XBW中,很难搜索子节点,原因在于仅获得了双亲(parent)ID。然而,即使在使用第二 XBW时,也可以执行针对以查询P结尾的前缀p的范围搜索。在该示例实施例中,适用任一XBW。
[0053]分别在参考文献1和参考文献2中描述了第一 XBW和第二 XBW。
[0054]〈参考文南犬l>Paolo Ferragina,Fabriz1 Lucc1 ,G1vanni Manzini和S.Muthukrishnan,“Structuring labeled trees for optimal succinctness,andbeyond,,,F0CS‘05Proceedings of the 46th Annual IEEE Symposium on Foundat1nsof Computer Science,页数 184-196
[0055]〈参考文献2>Wing_KaiHon,Tsung_Han Ku,Rahul Shah,Sharma V.Thankachan,和Jerey Scott Vitter,“Faster compressed dict1nary matching”,SPIRE’lOProceedings of the 17th internat1nal conference on String processing andinformat1n retrieval,页数 191-200
[0056]此外,在该示例实施例中,针对每个前缀定义分数(具体地,前缀分数)。由与以前缀开始的关键字相关联的字符串分数中的最高字符串分数来定义前缀分数。可以由等式1表达该分数。等式1中右侧的字符“Score”表示字符串分数,并且等式1中左侧的字符“Score”表示前缀分数。
[0057]Score (p) =max {Score (pre (以前缀p开始的关键字)}(等式 1)
[0058]在该示例实施例中,通过树结构表示关键字的集合,并且因此在与前缀相对应的节点下呈现了以特定前缀开始的关键字。因此,前缀分数是节点下呈现的多个关键字中的最高字符串分数。
[0059]在该示例实施例中,向XBW结构添加第一RMQ结构,以通过使用第一RMQ结构识别与每个节点相对应的前缀分数。具体地,在RMQ中所使用的数组中存储每个前缀的前缀分数。以下,其中存储前缀分数的数组被称为“前缀分数等级RP”。由于基于结尾对前缀分类,以相同字符串结尾的前缀被识别为连续范围。因此,可以通过使用第一 RMQ结构来识别前缀分数等级RP的任意范围中的最高值。
[0060]此外,在该示例实施例中,允许通过使用第二RMQ结构来识别每个关键字的字符串分数。具体地,在RMQ中所使用的数组中存储每个关键字的字符串分数。以下,其中存储字符串分数的数组被称为“字符串分数等级Rk”。由于从开始对关键字分类,所以以特定前缀开始的关键字被识别为连续范围。因此,可以通过使用第二 RMQ结构识别在字符串分数等级Rk的任意范围中的最高值。
[0061]图5是示出由搜索信息存储单元所存储的数据结构的示例的示意图。通过针对特里树中的每个节点具有三个元素的集合的集合S表示该示例实施例中的XBW结构。Siast(?)是二进制标志,如果该节点是节点的双亲节点的最后一个子节点,则将Slast设置为1,否则设置为0 da是由节点表示的字符是与节点的双亲节点相对应的前缀,其是通过将字符依次从根连接至双亲节点所获得的字符串。顺便提及,Suf包括节点本身的字符。通过对包括在每个元素中的前缀的最后一个字符到第一个字符的比较,以字典式顺序对三个元素的每个集合分类。在图5中所示的示例中,从开始依次向分类的集合(SbShS^t)指派行号。图5中,$指不关键字的开始,#指不关键字的结束。
[0062]此外,如图5所示,针对每个前缀定义前缀分数仏。由于根据与上述每个关键字相关联的字符串分数计算了前缀分数RP,不需要显式地保留前缀分数。用从结尾对包括在字典中的所有前缀分类的顺序,来指派图5中所示的前缀ID。因此,前缀ID的顺序与具有被设置为1的Siast的前缀ID的顺序一致。
[0063]图5中所示的结构使能识别以查询P结尾的前缀的范围。例如,所理解的是,与以查询“ab”结尾的前缀相对应的行是与行号7至9相对应的行(具体地,与“$ab”和“$cab”相对应的行)。此外,所理解的是,“$ab”和“$cab”的前缀分数RP分别是与前缀ID 4和5相对应的9和4。
[0064]只要可以识别前缀的范围,就可以通过使用第一RMQ结构获得范围中具有最高分数的前缀的ID。此外,可以通过递归地使用第一RMQ结构获得具有第二高及随后的分数的前缀ID。
[0065]根据上述内容,通过使用XBW结构,能够从以查询P结尾的前缀p中选出具有较高前缀分数的任意数量的前缀P。
[0066]前缀集合识别单元20从搜索信息存储单元50中存储的前缀的集合中识别包括输入字符串的前缀的集合。具体地,前缀集合识别单元20识别以输入字符串结尾的前缀的集合。例如,如果搜索信息存储单元50存储图5中所示的前缀的集合,则作为字符串的“ab”的输入使得前缀集合识别单元20识别在行号7至9范围中呈现的前缀(即,“$ab”和“$cab”),作为如缀的集合。
[0067]前缀识别单元31从由前缀集合识别单元20识别的前缀的集合中识别具有较高前缀分数的前缀。前缀识别单元31可以识别具有最高前缀分数的前缀或与top-n前缀分数(η是任意自然数)相对应的前缀。
[0068]字符串识别单元32在以识别的前缀开始的关键字中识别具有较高字符串分数的关键字。字符串识别单元32可以搜索具有最高字符串分数的关键字或与top-m字符串分数(m是任意自然数)相对应的关键字。
[0069]例如,假设在图5中将前缀识别单元31识别的“$ab”作为前缀。在这种情况下,以识别的前缀“$ab”开始的关键字是“aba”和“abcc”。“aba”的字符串分数是3并且“abcc”的字符串分数是9。在这种情况下,字符串识别单元32可以选择“abcc”作为关键字。
[0070]搜索管理单元30识别由前缀识别单元31所搜索的前缀的范围。搜索管理单元30识别由字符串识别单元32所搜索的关键字的范围,并识别由字符串识别单元32识别的关键字作为搜索目标关键字。
[0071]具体地,首先,搜索管理单元30将由前缀集合识别单元20所识别的前缀的范围识别为要由前缀识别单元31搜索的前缀的范围。然后,搜索管理单元30识别在要由字符串识别单元32搜索的关键字的识别范围内以前缀开始的关键字。此外,搜索管理单元30识别由字符串识别单元32识别的关键字作为搜索目标关键字。
[0072]此后,搜索管理单元30识别以字符串识别单元32识别的关键字的前缀开始的关键字中已经识别的关键字以外的关键字的范围。此外,搜索管理单元30从前缀集合识别单元20识别的前缀的集合中识别由前缀识别单元31识别的前缀以外的前缀的范围。
[0073]然后,搜索管理单元30使得前缀识别单元31和字符串识别单元32执行各自的过程。具体地,前缀识别单元31从由搜索管理单元30识别的前缀的范围中识别具有最高前缀分数的前缀。此外,字符串识别单元32从由搜索管理单元30识别的关键字的范围中识别具有最高字符串分数的关键字。
[0074]搜索管理单元30对从前缀的范围中识别的前缀的前缀分数与从关键字的范围中识别的关键字的字符串分数进行比较。如果作为比较的结果,最高的分数是字符串分数,则在以与该关键字相同的关键字开始的关键字中,执行针对相对于相关关键字的次高关键字搜索。具体地,搜索管理单元30将关键字划分为两组,从在识别关键字时所使用的关键字的范围排除关注关键字,并识别两个范围。字符串识别单元32从两个范围中识别具有最高字符串分数的关键字。
[0075]如果最高的分数是前缀分数,则搜索相对于关注的前缀具有次高前缀分数的前缀。具体地,搜索管理单元30将前缀划分为两组,从在识别前缀时所使用的前缀的范围排除该前缀,并识别两个范围。前缀识别单元31从这些范围中识别具有最高前缀分数的前缀。
[0076]输出单元40输出由搜索管理单元30识别的关键字作为搜索结果。
[0077]通过根据程序(字符串搜索程序)操作的计算机的CPU实现前缀集合识别单元20、搜索管理单元30、前缀识别单元31和字符串识别单元32。例如,可以在字符串搜索设备的存储单元(未示出)中存储程序,并且CPU可以读出程序,以根据程序操作为前缀集合识别单元
20、搜索管理单元30、前缀识别单元31和字符串识别单元32。
[0078]此外,可以由专用硬件实现前缀集合识别单元20、搜索管理单元30、前缀识别单元31和字符串识别单元32中的每一个。
[0079]以下描述了该示例实施例的字符串搜索设备的操作。图6是示出该示例实施例的字符串搜索设备的操作示例的流程图。这里,假设选择k个关键字作为候选。此外,假设搜索管理单元30包括优先级队列(未示出),优先级队列保持由前缀识别单元31识别的前缀与前缀分数的配对以及由字符串识别单元32所识别的关键字与字符串分数的配对。优先级队列是保持候选的信息的队列。在以下说明中,将优先级队列简称为“队列”。
[0080]输入单元10输入要搜索的字符串(步骤S11)。前缀集合识别
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1