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

文档序号:9713574阅读:来源:国知局
单元20参照搜索信息存储单元50并识别包括输入字符串的前缀的集合(步骤S12)。
[0081 ]如缀识别单兀31从由如缀集合识别单兀20识别的如缀的集合中识别具有最尚(5U缀分数的前缀,并在队列中保持识别的前缀与前缀分数的配对(步骤S13)。
[0082]字符串识别单兀32从以识别的如缀开始的关键字中识别具有最尚字符串分数的关键字,并在队列中保持识别的关键字与字符串分数的配对(步骤S14)。
[0083]后续地,搜索管理单元30在队列中保持的前缀分数或字符串分数中识别具有最高分数的前缀或关键字(步骤S15)。然后,搜索管理单元30确定最高分数是前缀分数还是字符串分数(步骤S16)。
[0084]如果最高分数是字符串分数(步骤S16中的“字符串分数”),则搜索管理单元30识别具有最高字符串分数的关键字作为输出目标,并从队列中移除该关键字(步骤S17)。然后,字符串识别单元32识别在用于识别移除的关键字的关键字的范围内相对于所移除的关键字的字符串分数具有次高字符串分数的关键字,并在队列中保持识别的关键字与字符串分数的配对(步骤S18)。
[0085]另一方面,如果最高分数是前缀分数(步骤S16中的“前缀分数”),则搜索管理单元30从队列中移除具有该前缀分数的前缀(步骤S19)。然后,前缀识别单元31识别在用于识别移除的前缀的前缀的范围内具有相对于所移除的前缀的前缀分数的次高前缀分数的前缀,并在队列中保持识别的前缀与前缀分数的配对(步骤S20)。
[0086]此外,字符串识别单兀32从以步骤20中识别的如缀开始的关键字中识别具有最尚字符串分数的关键字,并在队列中保持识别的关键字与字符串分数的配对(步骤S21)。
[0087]如果队列为空或队列中最高的分数低于此时已经找到的第k个最高的字符串分数(步骤S22中的是),则搜索管理单元30输出此时已经找到的关键字,作为位于前面的关键字(步骤S23)。另一方面,除非队列为空并且队列中最高的分数低于此时已经找到的第k个最高的字符串分数(步骤S22中的否),则重复步骤S15和后续步骤的过程。
[0088]因此,在同一优先级队列中保持由前缀识别单元31识别的前缀与前缀分数的配对和由字符串识别单元32识别的关键字与字符串分数的配对,由此使得能够从前缀分数或字符串分数提取出具有最高分数的配对。
[0089]以下通过使用特定示例描述了图6中所示的操作。图7是示出选择具有高字符串分数的关键字的过程的示例的示意图。在图7中所示的示例中,输入字符串“gres”,并示出了搜索包含作为子字符串的3个关键字(k = 3)的方法。在图7的左侧的方框中示出的列表是示出XBW结构的列表,其中数字表示前缀分数并且字符表示前缀。此外,在图7的右侧的方框中示出的列表是示意性地示出特里树的列表,其中数字表示字符串分数并且字符表示关键字。
[°09°]在“aggres”、“congres”和“progres”作为候选的情况下,前缀集合识别单元20从由XBW结构表示的前缀的集合中,识别包含作为子字符串的字符串“gres”的关键字的范围。只要识别了前缀,则可以识别以该前缀开始的关键字。
[0091]前缀识别单元31从所决定的前缀的集合中选择以输入字符串“gres”结尾的前缀中具有最高分数的前缀。图7中,示出了其中以前缀分数递减的顺序布置所选的前缀的状态。在图7所示的示例中,“congres”的前缀分数是最高的45。因此,前缀识别单元31识别“congres”作为前缀。
[0092]字符串识别单元32从以所选前缀开始的关键字中选出具有最高字符串分数的关键字。在图7中所示的示例中,存在具有前缀“congres”(即“congress”、“congress1nal”和“congressmen”)的三个关键字。它们中具有最高字符串分数的关键字是“congress”。因此,字符串识别单元32将“congress”识别为第一关键字并且搜索管理单元30将识别的“congress”识别为搜索目标关键字。
[0093]在该阶段,仅识别了一个关键字,并因此重复识别关键字的过程。
[0094]如上所述,搜索管理单元30事先具有用于保持候选(未示出)的信息的优先级队列,将此时已经找到的前缀和关键字连同它们的分数保持到队列中。
[0095]搜索管理单元30参照队列并选择队列中保持的前缀和关键字中具有最高分数的一个。如果所选的是关键字,则字符串识别单元32在与被用于搜索所选关键字的范围相同的关键词的范围内,搜索具有次高字符串分数的关键字。如果所选的是前缀,则前缀识别单元31在与被用于搜索所选前缀的范围相同的前缀的范围内,搜索具有相对于所选前缀的次尚BU缀分数的如缀。
[0096]在该示例的情况下,在队列中保持具有前缀分数45的前缀“congres”和具有字符串分数45的关键字“congress”。因为这时分数彼此相等,首先搜索关键字和前缀中的哪个是不重要的。如果搜索关键字,则搜索管理单元30首先弹出关键字“congress”,以从队列移除该关键字。然后,字符串识别单元32在以与被用于获得关键字“congress”的相同前缀“congres”开始的关键字中搜索具有相对于关键字“congress”的字符串分数次高字符串分数的关键字。具体地,搜索管理单元30这次在获得关键字“congress”时从已经搜索的关键字的范围中排除了关键字“congress”,并将范围划分为两部分。然后,字符串识别单元32在两个范围内搜索具有最高字符串分数的关键字。在这种情况下,在通过用排除的关键字“congress”平分所获得的两个范围内在以字典式顺序关键字“congress”之前的范围中没有出现关键字。因此,仅需要在以字典式顺序关键字“congress”之后的范围中找到具有最高字符串分数的关键字。关键字是具有字符串分数13的“congressmen”。因此,搜索管理单元30重新将该关键字保持到队列中。
[0097]如果搜索前缀,则搜索管理单元30首先弹出前缀“congress”,并将其从队列中移除。然后,前缀识别单元31搜索相对于前缀“congres”具有次高前缀分数的前缀。具体地,搜索管理单元30这次在获得前缀“congres”时从已经搜索的关键字的范围中排除了关键字“congres”,并将范围划分为两部分。然后,前缀识别单元31在两个范围内搜索具有最高前缀分数的前缀。在这种情况下,在用前缀“congres”平分所获得的两个范围内具有最高前缀分数的前缀是具有前缀分数12的前缀“aggres”和具有前缀分数21的前缀“progres”。因此,搜索管理单元30重新将两个前缀保持到队列中。
[0098]此外,字符串识别单元32获得以前缀“aggres”和“progres”的每一个开始的具有最高字符串分数的关键字。由此,字符串识别单元32获得具有字符串分数12的关键字“aggressive”和具有字符串分数21的关键字“progress”。因此,可以确认关于以上获得的两个前缀,前缀“aggres”的前缀分数是12,并且前缀“progres”的前缀分数是21。
[0099]在该示例实施例中,仅保持RMQ结构,而不保持前缀分数本身。尽管RMQ结构自身实现找到具有最高前缀分数的前缀,但是不实现计算特定前缀分数。因此,为了在获得范围内具有最高前缀分数的前缀之后具体确定该前缀分数是什么值,有必要获得以该前缀开始的关键字中的最高字符串分数。
[0100]根据以上处理,在队列中保持5个分数:具有前缀分数21的前缀“progres”;具有前缀分数12的前缀“aggres” ;具有字符串分数21的关键字“progress” ;具有字符串分数13的关键字“congressmen” ;以及具有字符串分数12的关键字“aggressive”。
[0101]由于它们中的最高分数属于具有前缀分数21的前缀“progres”或具有字符串分数21的关键字“progress”,所以可以搜索前缀和关键字中的任意一个。
[0102]重复该过程。如果新近找到的前缀的前缀分数低于此时已经找到的第k个最高的字符串分数,则搜索管理单元30不在队列中登记该前缀。这是因为相对于该前缀具有次高前缀分数的前缀具有比该分数低的分数。类似地,如果新近找到的关键字的分数低于此时已经找到的第k个最高的字符串分数,则搜索管理单元30不在队列中登记该关键字。因此,可以省去针对具有低前缀分数和针对具有低字符串分数的搜索,由此能够有效地收集分数中如k个关键字。
[0103]如果队列为空或队列中最高的分数低于此时已经找到的第k高的字符串分数,则搜索结束。
[0104]如上所述,根据该示例实施例,前缀集合识别单元20从前缀的集合中识别以输入字符串结尾的前缀的集合,并且前缀识别单元31从以输入字符串结尾的前缀的集合中识别具有最尚BU缀分数的如缀。然后,字符串识别单兀32从以识别的如缀开始的关键字中识别具有最高字符串分数的关键字。
[0105]具体地,在该示例实施例中,创建前缀和关键字的索引,并且因此与创建所有子字符串索引的情况相比,能够更多地减小字典尺寸。此外,在该示例实施例中,前缀识别单元31识别具有更尚BU缀分数的如缀,并且字符串识别单兀32从如缀中搜索具有更尚字符串分数的关键字,并且因此可以通过从最高分数的关键字搜索能够有效找到的前k个关键字。因此,本发明能够高速执行针对字符串的子字符串匹配搜索,同时减小数据量。
[0106]例如,日语字典、英语字典、查询登录名或URL通常包含公共前缀。该示例实施例的字符串搜索设备使用特里树作为能够将公共前缀收集到一起的数据结构,由此支持数据尺寸的减小。尽管该示例实施例已经例示出了通过使用特里树数据结构表示关键字的情况,该数据结构可以是Patricia树。通过使用Partricia树,可以与使用特里树的树结构时相比更多地减小数据尺寸。
[0107]此外,该示例实施例的字符串搜索设备包括用于管理搜索范围的搜索管理单元30。具体地,搜索管理单元30识别其中从以字符串识别单元32识别的关键字的前缀开始的关键字排除已经识别的关键字的范围,并识别其中从前缀集合识别单元20识别的前缀的集合排除由前缀识别单元31识别的前缀的范围。然后,前缀识别单元31从由搜索管理单元30识别的如缀的范围中识别具有最尚如缀分数的如缀,并且字符串识别单兀32从由搜索管理单元30识别的关键字的范围中识别具有最高字符串分数的关键字。这实现了将用作字典的数据结构的XBW扩展至Top-k搜索,由此使得能够在针对前k个候选执行子字符串匹配搜索时,高速以节省空间的方式执行处理。
[0108]示例实施例2
[0109]以下描述了根据本发明的字符串搜索设备的第二示例实施例。该示例实施例的字符串搜索设备的配置与第一示例实施例的配置相同。然而,第二示例实施例的字符串搜索设备旨在实现与第一示例实施例的字符串搜索设备相比更大程度的保持数据量的减小。
[0110]根据第一示例实施例中所描述的特里树T,产生了两个数据结构。一个是前缀的数据结构并且另一个是关键字的数据结构。
[0111]前缀的数据结构包括xbw和与其附接的第一RMQ,该xbw是特里树T的XBW表示。如第一示例实施例中所描述的,用其中从xbw数据结构上的末端对前缀分类的顺序布置前缀。
[0112]此外,针对第一示例实施例中示出的前缀分数等级RP产生了第一RMQ结构。在该情况下,搜索信息存储单元50不需要显式地保持前缀分数等级RP,而是仅可以保持根据前缀
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1