一种多模匹配方法和装置与流程

文档序号:14950760发布日期:2018-07-17 22:29阅读:153来源:国知局

本发明涉及计算机技术领域,特别是涉及一种多模匹配方法和装置。



背景技术:

aho-corasick自动机又称为ac自动机,其1975年产生于贝尔实验室。ac自动机巧妙地将字符比较转化为了状态转移,其有两个特点,一个是扫描文本时完全不需要回溯,另一个是时间复杂度与关键字的数目和长度无关。现有的aho-corasick自动机是基于trie树进行多模匹配的,在匹配失败时会使用failure表进行回退,当trie树上的节点比较多时,可能会造成一次失败需要回退多次才能到达目标状态,因此会大大降低匹配速度,假设有n个模式串,平均长度为l;文章长度为m,则匹配时时间复杂度为o(m*l)。由此可以看出,目前的匹配方法的时间复杂度较高,造成匹配效率较低。



技术实现要素:

有鉴于此,本发明提供了一种多模匹配方法和装置,用于降低字符匹配的时间复杂度,从而有效提高匹配效率。

为了解决上述问题,本发明公开了一种多模匹配方法,应用于ach-corasick自动机,所述多模匹配方法包括步骤:

接收需要匹配的待匹配字符;

将所述待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到所述待匹配字符的匹配结果,所述跳转表包括多个状态,还包括每个所述状态在每种输入字符下的跳转状态。

可选的,所述跳转表的生产步骤包括:

生成goto表和failure表;

将所述failure表与所述goto表进行合并,得到所述跳转表。

可选的,所述将所述待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到所述待匹配字符的匹配结果,包括:

将所述待匹配字符输入所述跳转表中进行查找运算,得到运算结果;

生成output表;

所述运算结果输入到所述output表中进行查找运算,得到所述匹配结果。

相应的,为了保证上述方法的实施,本发明还提供了一种多模匹配装置,应用于ach-corasick自动机,所述多模匹配装置包括:

字符接收模块,用于接收需要匹配的待匹配字符;

匹配运算模块,用于将所述待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到所述待匹配字符的匹配结果,所述跳转表包括多个状态,还包括每个所述状态在每种输入字符下的跳转状态。

可选的,还包括:

跳转表生成模块,用于生成所述跳转表。

可选的,所述跳转表生成模块包括:

第一表生成单元,用于生成goto表和failure表;

表合并单元,用于将所述failure表与所述goto表进行合并,得到所述跳转表。

可选的,所述匹配运算模块包括:

第一查找单元,用于将所述待匹配字符输入所述跳转表中进行查找运算,得到运算结果;

第二表生成单元,用于生成output表;

第二查找单元,用于所述运算结果输入到所述output表中进行查找运算,得到所述匹配结果。

从上述技术方案可以看出,本发明提供了一种多模匹配方法和装置,该方法和装置应用于ach-corasick自动机或运行该自动机的电子设备,具体为接收需要匹配的待匹配字符;将待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到待匹配字符的匹配结果,跳转表包括多个状态,还包括每个状态在每种输入字符下的跳转状态。由于本申请提供的方法中状态跳转仅与当前状态和当前输入字符有关,当待匹配字符给定后状态必然是有限且确定的,因此,进行匹配时就不需回退,从而降低了字符匹配的时间复杂度,进而有效提高了匹配效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种多模匹配方法的步骤流程图;

图2为本发明实施例提供的一种跳转表的示意图;

图3为本发明实施例提供的一种多模匹配装置的结构框图;

图4为本发明实施例提供的另一种多模匹配装置的结构框图;

图5为本发明实施例提供的又一种多模匹配装置的结构框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

图1为本发明实施例提供的一种多模匹配方法的步骤流程图。

参照图1所示,本实施例提供的多模匹配方法应用于ach-corasick自动机,该自动机其实是一种算法,即具体来说时本方法应用于运行上述自动机的电子设备。该多模匹配方法具体包括步骤:

s101:接收需要匹配的待匹配字符。

在需要对字符进行匹配运算时,需要提前接受用户或系统输入的待匹配字符,以便进一步对其进行运算。

s102:将待匹配字符输入到跳转表中进行匹配运算。

在接收到待匹配字符后,利用预先根据failure表生产的跳转表中进行匹配运算,该跳转表中包括有事先穷举的所有状态,且包括每个状态在每种输入字符下的跳转状态,通过上述运算,从而得到该待匹配字符的匹配结果。

在匹配过程中,当输入一个待匹配字符后,在通过failure表进行跳转的最终状态时确定的,即状态跳转仅与当前状态和当前输入字符有关,当待匹配字符给定后状态必然是有限且确定的。当aho-corasick自动机处于任意状态时,都能根据当前的待匹配字符直接找到下一状态,因此,通过根据failure表生成的跳转表进行匹配时就不需回退,也就使字符匹配的时间复杂度大为降低,时间复杂度变为o(m)。

从上述技术方案可以看出,本实施例提供了一种多模匹配方法,该方法应用于ach-corasick自动机,具体为接收需要匹配的待匹配字符;将待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到待匹配字符的匹配结果,跳转表包括多个状态,还包括每个状态在每种输入字符下的跳转状态。由于本申请提供的方法中状态跳转仅与当前状态和当前输入字符有关,当待匹配字符给定后状态必然是有限且确定的,因此,进行匹配时就不需回退,从而降低了字符匹配的时间复杂度,进而有效提高了匹配效率。

本实施例中的跳转表是通过如下步骤获取的。

首先,首先生成goto表和failure表。其中goto表是指ac自动机生成的跳转列表,其中包含有跳转步骤的列表;failure表则是ac自动机在匹配失败时进行跳转的跳转列表,output表则是根据匹配运算输出匹配结果的列表。

goto表是由模式集合p中的所有模式构成的状态转移自动机,对于给定的集合p{p1,p2,...pm},生成goto表的步骤是,对于p中的每一个模式pi[1...j](1<=i<m+1),按照其包含的字母从前到后依次输入自动机,起始状态d[0],如果自动机的当前状态d[p],对于pi中的当前字母pi[k](1<=k<=j),没有可用的转移,则将状态机的总状态数smax+1,并将当前状态输入pi[k]后的转移位置,置为d[p][pi[k]]=smax,如果存在可用的转移方案d[p][pi[k]]=q,则转移到状态d[q],同时取出模式串的下一个字母pi[k+1],继续进行上面的判断过程。这里我们所说的没有可用的转移方案,等同于转移到状态机d的初始状态d[0],即对于自动机状态d[p],输入字符pi[k],有d[p][pi[k]]=0。

failure表的生成是一个广度优先搜索的过程,在这个过程中,通过不断遍历状态trie树得到该failure表。

在生成上述goto表和failure表的基础上,将goto表与failure表进行合并即可得到上述的跳转表,其中省略了所有回退的步骤,如图2所示,其中任意状态都省略了跳转到0状态的箭头,例如在4状态,如果输入i则跳转到6状态,输入e跳转到5状态,输入其他字符则直接跳转到0状态。

本实施例中s102步骤中,将待匹配字符输入到跳转表中进行匹配运算的具体步骤如下所述:

首先,将待匹配字符输入到上述步骤得到的跳转表中进行查找运算,从而得到运算结果;

然后,生成output表。output表的生成其实跟trie树中的结束结点标志很类似,都是在模式串的末尾对状态进行修改的过程,而output表则是在状态节点对象中以组合的方式来体现。

然后,将上一步骤的运算结果输入到上述的output表中进行查找运算,从而最终得到预该待匹配字符相符合的匹配结果。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

实施例二

图3为本发明实施例提供的一种多模匹配装置的结构框图。

参照图3所示,本实施例提供的多模匹配装置应用于运行ach-corasick自动机算法电子设备。该多模匹配装置具体包括字符接收模块10和匹配运算模块20。

字符接收模块用于接收需要匹配的待匹配字符。

在需要对字符进行匹配运算时,需要提前接受用户或系统输入的待匹配字符,以便进一步对其进行运算。

匹配运算模块则用于将待匹配字符输入到跳转表中进行匹配运算。

在接收到待匹配字符后,利用预先根据failure表生产的跳转表中进行匹配运算,该跳转表中包括有事先穷举的所有状态,且包括每个状态在每种输入字符下的跳转状态,通过上述运算,从而得到该待匹配字符的匹配结果。

在匹配过程中,当输入一个待匹配字符后,在通过failure表进行跳转的最终状态时确定的,即状态跳转仅与当前状态和当前输入字符有关,当待匹配字符给定后状态必然是有限且确定的。当aho-corasick自动机处于任意状态时,都能根据当前的待匹配字符直接找到下一状态,因此,通过根据failure表生成的跳转表进行匹配时就不需回退,也就使字符匹配的时间复杂度大为降低,时间复杂度变为o(m)。

从上述技术方案可以看出,本实施例提供了一种多模匹配装置,该装置应用于ach-corasick自动机,具体为接收需要匹配的待匹配字符;将待匹配字符输入到预先根据failure表生成的跳转表中进行匹配运算,得到待匹配字符的匹配结果,跳转表包括多个状态,还包括每个状态在每种输入字符下的跳转状态。由于本申请提供的方法中状态跳转仅与当前状态和当前输入字符有关,当待匹配字符给定后状态必然是有限且确定的,因此,进行匹配时就不需回退,从而降低了字符匹配的时间复杂度,进而有效提高了匹配效率。

本实施例中还包括跳转表生成模块30,该模块用于生成上述跳转表,具体包括第一表生成单元31和表合并单元32,如图4所示。

表生成单元用于生成goto表和failure表。其中goto表是指生ac自动机生成的跳转列表,其中包含有跳转步骤的列表;failure表则是ac自动机在匹配失败时进行跳转的跳转列表,output表则是根据匹配运算输出匹配结果的列表。

表合并单元用于在表生产单元生成上述goto表和failure表后,将goto表与failure表进行合并,从而得到上述的跳转表,其中省略了所有回退的步骤,如图2所示,其中任意状态都省略了跳转到0状态的箭头,例如在4状态,如果输入i则跳转到6状态,输入e跳转到5状态,输入其他字符则直接跳转到0状态。

本实施例中匹配运算模块具体包括第一查找单元21、第二表生成单元22和第二查找单元23,如图5所示。

第一查找单元用于将待匹配字符输入到上述步骤得到的跳转表中进行查找运算,从而得到运算结果;

第二表生成单元生成output表。output表的生成其实跟trie树中的结束结点标志很类似,都是在模式串的末尾对状态进行修改的过程,而output表则是在状态节点对象中以组合的方式来体现。

第二查找单元用于将第一查找单元得到的运算结果输入到上述的output表中进行查找运算,从而最终得到预该待匹配字符相符合的匹配结果。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的技术方案进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1