节点压缩方法及装置、以及多模匹配方法及装置转让专利

申请号 : CN200910137657.1

文献号 : CN101556619B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 廖恬瑜李星李顺发

申请人 : 成都市华为赛门铁克科技有限公司

摘要 :

本发明实施例公开了一种节点压缩方法及装置、以及多模匹配方法及装置,用于减少AC自动机匹配算法需要的存储空间,并提高多模匹配查找的速度。本发明实施例方法包括:对预置的AC模式树进行深度优先遍历;根据深度优先遍历的结果在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点。本发明实施例还提供一种节点压缩装置,多模匹配方法及装置。本发明实施例能有效地减少AC自动机匹配算法需要的存储空间,并提高多模匹配查找的速度。

权利要求 :

1.一种节点压缩方法,其特征在于,包括:

对预置的AC模式树进行深度优先遍历;

根据深度优先遍历的结果在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;

对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数组成。

2.根据权利要求1所述的方法,其特征在于,对所述第一节点,所述第二节点,以及所述中间节点进行压缩得到一个压缩节点包括:当所述第一节点,所述第二节点,以及所述中间节点中只有一个命中节点时,对所述第一节点,所述第二节点,以及所述中间节点进行压缩得到一个压缩节点;

其中所述压缩节点的节点信息中还包含命中标记参数以及命中位置参数,所述命中标记参数用于指示组成所述压缩节点的各节点中是否包括命中节点,所述命中位置参数用于指示所述命中节点的位置。

3.根据权利要求1所述的方法,其特征在于,对所述第一节点,所述第二节点,以及所述中间节点进行压缩得到一个压缩节点包括:当所述第一节点所对应的失败节点,所述第二节点所对应的失败节点,以及所述中间节点所对应的失败节点满足预置的条件时,则执行对所述第一节点,所述第二节点,以及所述中间节点进行压缩得到一个压缩节点的步骤。

4.根据权利要求3所述的方法,其特征在于,确定所述第一节点所对应的失败节点,所述第二节点所对应的失败节点,以及所述中间节点所对应的失败节点满足预置的条件包括:当所述第一节点所对应的失败节点,所述第二节点所对应的失败节点,以及所述中间节点所对应的失败节点为同一个节点时,则确定满足预置的条件;

或,

当所述第一节点所对应的失败节点,所述第二节点所对应的失败节点,以及所述中间节点所对应的失败节点为所述AC模式树的一条边上连续的节点时,则确定满足预置的条件。

5.一种多模匹配方法,其特征在于,包括:

按照如权利要求1所述的方法对节点进行压缩得到压缩节点;

对当前目标字符与压缩节点的字符串参数中的首字符进行匹配,若匹配成功,则根据预置的匹配目标对所述当前目标字符进行更新,并将更新后的当前目标字符与所述压缩节点的字符串参数中的后续字符进行匹配;

所述字符串参数中包含由至少两个字符组成的字符串。

6.根据权利要求5所述的方法,其特征在于,该方法还包括:

若所述压缩节点的命中标记参数指示组成所述压缩节点的各节点中包括命中节点,则根据所述压缩节点的命中位置参数确定所述命中节点的位置,并输出匹配结果。

7.根据权利要求5所述的方法,其特征在于,该方法还包括:

若更新后的当前目标字符与所述压缩节点的字符串参数中的字符匹配失败,则根据所述压缩节点的类型参数以及失败节点参数确定失败节点;

对所述失败节点进行匹配。

8.根据权利要求7所述的方法,其特征在于,所述根据压缩节点的类型参数以及失败节点参数确定失败节点包括:若所述类型参数指示组成所述压缩节点的各节点的失败节点相同,则将所述失败节点参数所指示的节点作为失败节点;

或,

若所述类型参数指示所述压缩节点中各节点的失败节点连续,则根据所述字符串参数中匹配成功的字符数目以及所述失败节点参数确定失败节点。

9.一种节点压缩装置,其特征在于,包括:

遍历单元,用于对预置的AC模式树进行深度优先遍历,根据深度优先遍历的结果在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;

节点压缩单元,对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数组成。

10.根据权利要求9所述的节点压缩装置,其特征在于,所述节点压缩装置还包括:命中节点判断单元,用于判断所述遍历单元查询到的第一节点,所述第二节点,以及所述中间节点中是否只有一个命中节点,若是,则触发所述节点压缩单元执行相应操作。

11.根据权利要求9或10所述的节点压缩装置,其特征在于,所述节点压缩装置还包括:失败节点判断单元,用于判断所述遍历单元查询到的第一节点所对应的失败节点,所述第二节点所对应的失败节点,以及所述中间节点所对应的失败节点是否满足预置的条件,若是,则触发所述节点压缩单元执行相应操作。

12.一种多模匹配装置,其特征在于,包括:

匹配单元,用于当如权利要求9所述的节点压缩装置对节点进行压缩得到压缩节点之后,对当前目标字符与压缩节点的字符串参数中的首字符进行匹配;

更新单元,用于当当前目标字符与压缩节点的字符串参数中的首字符匹配成功时,根据预置的匹配目标对所述当前目标字符进行更新,并指示所述匹配单元按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配。

13.根据权利要求12所述的多模匹配装置,其特征在于,所述多模匹配装置还包括:匹配结果输出单元,用于当所述压缩节点的命中标记参数指示组成所述压缩节点的各节点中包括命中节点时,根据所述压缩节点的命中位置参数确定所述命中节点的位置,并输出匹配结果。

14.根据权利要求12或13所述的多模匹配装置,其特征在于,所述多模匹配装置还包括:控制单元,用于当所述压缩节点的字符串参数中的字符与更新后的当前目标字符匹配失败时,根据所述压缩节点的类型参数以及失败节点参数确定失败节点。

15.根据权利要求14所述的多模匹配装置,其特征在于,所述多模匹配装置还包括:失败节点匹配单元,用于对所述控制单元确定的失败节点进行匹配。

说明书 :

技术领域

本发明涉及数据处理领域,尤其涉及一种节点压缩方法及装置、以及多模匹配方法及装置。

背景技术

在病毒扫描,协议识别,内容过滤,入侵检测等应用中,模式匹配技术都是一项基本的支撑技术。模式匹配技术,通过快速的扫描数据包,在大规模的规则库中找到对应的匹配规则,为其后的应用程序进行处理提供了依据。模式匹配算法的好坏直接影响到这些应用的性能的高低。因此发展高效的模式匹配算法,支持大规模的模式库和提供快速的查找速度,对上述应用都有非常重要的意义。
模式匹配技术的目的是在目标文本中找到所给模式出现的位置。根据待查找模式数量的不同,分为单模匹配和多模匹配。多模匹配技术研究在目标文本中找到模式库中的所有模式出现的位置。
现有技术中一种多模匹配技术为艾豪-克拉斯克(AC,Aho-Corasick)自动机匹配算法,它通过构造一个AC模式树实现快速的多模匹配。
在该AC模式树中的某一节点A的内部数据结构包括:当前节点(Cs),匹配字符(Char),下一节点(Ns),失败节点(Fs),命中标记(Hit),其各个字段的含义如下:
“当前节点”:表示节点A的父节点B;
“匹配字符”:表示若要对节点A匹配成功所需要匹配的字符;
“下一节点”:表示节点A自身;
“失败节点”:表示节点A匹配失败后下一个所需匹配的节点;
“命中标记”:表示节点A内是否存在模式匹配,即该“命中标记”具体可以为两种类型的数值,分别用于表示节点A内存在模式匹配,以及节点A内不存在模式匹配。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺点:
上述现有技术中,AC自动机匹配算法需要的存储空间主要由其模式树的节点数目决定,每两个节点之间的边代表一个字符,所以AC自动机匹配算法需要的存储空间与模式库中的单个字符的数目成正比,对于大规模的模式库,AC自动机匹配算法需要的存储空间可达几十兆比特,既不适合中央处理器(CPU,Central Processing Unit)的缓存,也不适合专用集成电路(ASIC,Application Specific Integrated Circuits)的实现。

发明内容

本发明实施例提供了一种节点压缩方法及装置、以及多模匹配方法及装置,能够减少AC自动机匹配算法需要的存储空间。
本发明实施例提供的节点压缩方法,包括:对预置的AC模式树进行深度优先遍历;根据深度优先遍历的结果在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数组成。
本发明实施例提供的多模匹配方法,包括:对当前目标字符与压缩节点的字符串参数中的首字符进行匹配,若匹配成功,则根据预置的匹配目标对所述当前目标字符进行更新,并将更新后的当前目标字符与所述压缩节点的字符串参数中的后续字符进行匹配;所述字符串参数中包含由至少两个字符组成的字符串。
本发明实施例提供的节点压缩装置,包括:遍历单元,用于对预置的AC模式树进行深度优先遍历,根据深度优先遍历的结果在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;节点压缩单元,对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数组成。
本发明实施例提供的多模匹配装置,包括:匹配单元,用于对当前目标字符与压缩节点的字符串参数中的首字符进行匹配;更新单元,用于当当前目标字符与压缩节点的字符串参数中的首字符匹配成功时,根据预置的匹配目标对所述当前目标字符进行更新,并指示所述匹配单元按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,在确定了满足条件的第一节点,第二节点,以及中间节点之后,可以对这些节点进行压缩得到一个压缩节点,该压缩节点的节点信息中包含字符串参数,且该字符串参数由第一节点的字符参数,中间节点的字符参数,以及第二节点的字符参数组成,所以本发明实施例中存储的压缩节点对应一个字符串,而并不是仅对应一个字符,因此能够有效地减少AC模式树中节点的数目,从而能够减少AC自动机匹配算法需要的存储空间;
进一步地,本发明另一实施例中,若当前目标字符与压缩节点的字符串参数中的首字符匹配成功,则会对当前目标字符进行更新,并按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配,而并不会在每匹配一个字符之后都对另外一个节点进行匹配,所以无需频繁访问AC模式树,从而提高了多模匹配查找的速度。

附图说明

图1为本发明实施例中节点压缩方法一个实施例示意图;
图2为本发明实施例中节点压缩方法另一实施例示意图;
图3为本发明实施例中压缩前的AC模式树示意图;
图4为本发明实施例中压缩后的AC模式树示意图;
图5为本发明实施例中多模匹配方法一个实施例示意图;
图6为本发明实施例中多模匹配方法另一实施例示意图;
图7为本发明实施例中节点压缩装置一个实施例示意图;
图8为本发明实施例中节点压缩装置另一实施例示意图;
图9为本发明实施例中多模匹配装置一个实施例示意图;
图10为本发明实施例中多模匹配装置另一实施例示意图。

具体实施方式

本发明实施例提供了一种节点压缩方法及装置、以及多模匹配方法及装置,用于减少AC自动机匹配算法需要的存储空间。
请参阅图1,本发明实施例中节点压缩方法一个实施例包括:
101、对预置的AC模式树进行深度优先遍历;
本实施例中,当AC模式树构建完成之后,则可以对该AC模式树进行深度优先遍历,即按照该AC模式树的每一条边,按照从根节点到叶子节点的方向进行遍历,具体的遍历方式可采用现有技术,此处不作限定。
102、根据深度优先遍历的结果查找第一节点以及第二节点;
本实施例中,深度优先遍历是针对AC模式树的每一条边,按照从根节点到叶子节点的方向进行遍历,分别查找第一节点和第二节点。例如:在对某一条边X上的节点进行遍历中,寻找该边X上的第一节点,该第一节点是只有一个子节点的节点,若找到了第一节点,则在该边X上按照朝向叶子节点的方向对各节点继续进行遍历,直至找到一个第二节点,该第二节点是具有至少两个子节点,或者为叶子节点的节点,即一种第二节点没有子节点。
需要说明的是,在执行深度优先遍历的过程中,并不一定AC模式树的所有的边上都有满足上述条件的第一节点以及第二节点,例如某一条边上可能只有根节点和叶子节点这两个节点,对于这种情况,本发明实施例中不作考虑,本发明实施例中所针对的情况是:AC模式树的某一条边X上,除根节点外至少有两个节点,这两个节点为父子节点,且父节点(即第一节点)仅有一个子节点(即第二节点)。
通过上述方式查询到的第一节点,第二节点以及第一节点与第二节点之间的中间节点是在AC模式树的边X上的连续节点,其中,中间节点是指在遍历过程中,在边X上经过的位于第一节点,第二节点之间的所有节点,所述中间节点只有一个子节点。
103、对第一节点,第二节点以及中间节点进行压缩。
当确定了第一节点,第二节点以及中间节点之后,则可以对这些节点进行压缩得到一个压缩节点,该压缩节点的节点信息中包含字符串参数,该字符串参数由第一节点的字符参数(即第一节点的“匹配字符”),中间节点的字符参数(即中间节点的“匹配字符”),以及第二节点的字符参数(即第二节点的“匹配字符”)顺序组成,该顺序是指遍历时先后经过的节点的“匹配字符”,即该字符串参数的首字符为第一节点的“匹配字符”,最后一个字符为第二节点的“匹配字符”,中间的字符为按照先后顺序排列的中间节点的“匹配字符”。
可以理解地是,该字符串参数也可以由第一节点的字符参数,中间节点的字符参数,以及第二节点的字符参数,按照倒序排列组成,或者也可以按照其它方式排列,但是,在匹配时,是按照第一节点的字符参数,中间节点的字符参数,以及第二节点的字符参数顺序匹配。该顺序是指遍历时先后经过的节点的“匹配字符”,即该字符串参数的首字符为第一节点的“匹配字符”,最后一个字符为第二节点的“匹配字符”,中间的字符为按照先后顺序排列的中间节点的“匹配字符”。
本实施例中,在确定了满足条件的第一节点,第二节点,以及中间节点之后,可以对这些节点进行压缩得到一个压缩节点,该压缩节点的节点信息中包含字符串参数,且该字符串参数由第一节点的“匹配字符”,中间节点的“匹配字符”以及第二节点的“匹配字符”顺序组成,所以本发明实施例中存储的压缩节点对应一个字符串,而并不是仅对应一个字符,因此能够有效地减少AC模式树中节点的数目,从而能够减少AC自动机匹配算法需要的存储空间。
为便于理解,下面以另一具体实例对本发明实施例中的节点压缩过程进行详细描述:
请参阅图2,本发明实施例中节点压缩方法另一实施例包括:
201、对预置的AC模式树进行深度优先遍历,查找第一节点;
本实施例中,当AC模式树构建完成之后,则可以对该AC模式树进行深度优先遍历,即按照该AC模式树的每一条边,按照从根节点到叶子节点的方向进行遍历,具体的遍历方式可以采用现有技术,此处不作限定。
202、在找到第一节点时,执行步骤203,否则执行步骤206;
203、存储第一节点的信息并继续在第一节点所在边的后续节点中寻找第二节点,并执行步骤204;
当第一节点只有一个子节点时,则对该第一节点的信息进行存储,可以包括该第一节点的“当前节点”,“匹配字符”,“下一节点”,“失败节点”以及“命中标记”,在该第一节点所在的边X上按照朝向叶子节点的方向对各节点继续进行判断,并记录各节点的信息,具体的信息同样可以包括“当前节点”,“匹配字符”,“下一节点”,“失败节点”以及“命中标记”,直至找到一个第二节点,该第二节点有至少两个子节点,或者该第二节点为叶子节点,即没有子节点。
通过上述方式查询到的第一节点,第二节点以及第一节点与第二节点之间的中间节点是在AC模式树的边X上的连续节点,并且第一节点与中间节点均只有一个子节点,第二节点可以有两个或更多的子节点,或者没有子节点。
204、在第一节点,第二节点以及中间节点中只有一个命中节点时,和/或第一节点,第二节点以及中间节点的“失败节点”满足预置的条件时,执行步骤205,否则,执行步骤206;
当步骤203中确定了第一节点,第二节点以及中间节点之后,可以继续判断第一节点,第二节点以及中间节点中是否只有一个节点的“命中标记”指示该节点内存在模式匹配(即该节点为命中节点)若第一节点,第二节点以及中间节点中只有一个命中节点,则执行步骤205,若第一节点,第二节点以及中间节点中不止有一个命中节点,则执行步骤206。
上述是对第一节点,第二节点以及中间节点的“命中标记”进行校验,在实际应用中,同样还可以对第一节点,第二节点以及中间节点的“失败节点”进行校验,以判断第一节点,第二节点以及中间节点的“失败节点”是否满足预置的条件。
具体的预置条件可以包括:
第一节点,第二节点,以及中间节点的“失败节点”为同一个节点;
或,
第一节点,第二节点,以及中间节点的“失败节点”为AC模式树的一条边上连续的三个节点。
上述两个具体的判断实例仅为本实施例中举出的具体实现方式,在实际应用中,还可以通过其他的方式判断“失败节点”是否满足预置的条件,具体条件以及判断方式此处不作限定。
需要说明的是,上述分别对第一节点,第二节点以及中间节点的“命中标记”以及“失败节点”进行了校验,这两部分的校验可以独立实施或结合实施,当结合实施时的校验过程并没有先后顺序,既可以先对第一节点,第二节点以及中间节点的“命中标记”进行校验,当校验通过之后,再对第一节点,第二节点以及中间节点的“失败节点”进行校验,也可以先对第一节点,第二节点以及中间节点的“失败节点”进行校验,当校验通过之后,在对第一节点,第二节点以及中间节点的“命中标记”进行校验。
205、对第一节点,第二节点,以及中间节点进行压缩;
当确定第一节点,第二节点,以及中间节点中只有一个命中节点,和/或第一节点,第二节点,以及中间节点的“失败节点”满足预置的条件之后,则可以对第一节点,第二节点,以及中间节点进行压缩得到压缩节点。
本实施例中的压缩节点的节点信息具体可以包括:
“类型”Typ(即类型参数),“当前节点”Cs(即当前节点参数),“字符串”Str(即字符串参数),“长度”Len(即长度参数),“下一节点”Ns(即下一节点参数),“失败节点”Fs(即失败节点参数),“命中位置”Hitpos(即命中位置参数),“命中标记”Hit(即命中标记参数),各个字段的含义如下:
“类型”Typ:表示第一节点,第二节点,以及中间节点的“失败节点”之间的关系,例如该“类型”可以为“失败节点相同”或“失败节点连续”,需要说明的是,若第一节点,第二节点,以及中间节点的“失败节点”之间已默认采用某一种关系,例如在节点压缩时,压缩前的节点的“失败节点”必须相同才可压缩,则也可以无需该字段;
“当前节点”Cs:表示该压缩节点的父节点;
“字符串”Str:表示若要对该压缩节点完全匹配,所需要匹配的字符串,该字符串由压缩成该压缩节点的第一节点,中间节点,以及第二节点的“匹配字符”按照遍历时节点的先后顺序组成;
“长度”Len:表示字符串Str的长度,该字段为可选字段,如果在实际应用中可以通过“字符串”本身体现出长度的信息,也无需专门使用该“长度”字段;
“下一节点”Ns:表示该压缩节点自身;
“失败节点”Fs:表示在对该压缩节点匹配失败后下一个所需要匹配的节点;
“命中标记”Hit:表示组成该压缩节点的节点中是否包含命中节点,即该“命中标记”具体可以为两种类型的数值,分别用于表示组成该压缩节点的节点中包含命中节点,以及组成该压缩节点的节点中不包含命中节点;
“命中位置”Hitpos:表示组成该压缩节点的命中节点在该压缩节点中的位置。
206、执行其他处理流程。
具体的其他处理流程可以包括:
若未找到第一节点,则无法从第一节点开始执行节点压缩,具体的其他处理可以为:若找到的节点有至少两个子节点,若该节点的一个子节点为第一节点,则从步骤202开始执行,若找到的节点没有子节点,则可以继续在AC模式树的另一条边中查找第一节点,并从上述的步骤202开始执行,可以理解的是,在实际应用中,还可以采用其他的处理方式,此处不作限定。
若第一节点,第二节点以及中间节点中包含不止一个的命中节点,即组成压缩节点的各节点中包含多个命中节点,则对上述压缩节点的节点信息进行表示的方式要使得节点信息中的“命中位置”可以指示多个命中节点在压缩节点中的位置,具体的表示方式可以为:“命中位置”所表示的多个位置之间用分隔符隔开,或者还可以采用其他的区分方式,此处不作限定。
若第一节点,第二节点以及中间节点的“失败节点”不满足预置的条件,则对上述压缩节点的节点信息进行表示的方式要使得节点信息中的“失败节点”可以指示组成压缩节点的每个节点各自的“失败节点”,具体的表示方式可以为:“失败节点”所表示的多个失败节点之间用分隔符隔开,或者还可以采用其他的区分方式,此处不作限定。
由上述描述的内容可知,即使第一节点,第二节点以及中间节点中包含不止一个的命中节点,或者是第一节点,第二节点以及中间节点的“失败节点”不满足预置的条件,只要是第一节点,第二节点以及中间节点是在AC模式树的某一边上连续的节点,且第一节点以及中间节点均只有一个子节点,就可以对第一节点,第二节点以及中间节点进行压缩,只是压缩后的压缩节点的节点信息会有一些不同,因此在实际应用中同样可以不执行步骤204,而在步骤202,203确定了第一节点,第二节点以及中间节点之后直接执行步骤205。
另外,需说明地是,“中间节点”可以为“空”的状态,即表示,“中间节点”可以是不存在的,即第一节点与第二节点之间没有中间节点。为了描述方便,在本实施例中,并未对不存在中间节点的情况单独说明,可以理解的是,在“中间节点”为“空”的状态时,对该“中间节点”的操作可以省略。
本实施例中,在确定了满足条件的第一节点,第二节点,以及中间节点之后,可以对这些节点进行压缩得到一个压缩节点,该压缩节点的节点信息中包含“字符串”,且该“字符串”由第一节点的“匹配字符”,中间节点的“匹配字符”以及第二节点的“匹配字符”按照遍历时节点的先后顺序组成,所以本发明实施例中存储的压缩节点对应一个字符串,而并不是仅对应一个字符,因此能够有效地减少AC模式树中节点的数目,从而能够减少AC自动机匹配算法需要的存储空间;
进一步地,本实施例中组成压缩节点的各节点中若有多个命中节点,则该压缩节点的节点信息中的“命中位置”需要表示多个命中节点在压缩节点中的位置,当组成压缩节点的各节点中只有一个命中节点时,该压缩节点的节点信息中的“命中位置”可以只用描述该命中节点的位置,所以当组成压缩节点的各节点中只有一个命中节点时可以有效地节省压缩节点的节点信息所占的空间,进一步减少AC自动机匹配算法所需的存储空间;
再进一步地,本实施例中组成压缩节点的各节点的“失败节点”若不满足预置的条件,则该压缩节点的节点信息中的“失败节点”需要表示组成该压缩节点的每个节点的“失败节点”,当组成压缩节点的各节点的“失败节点”满足预置的条件时,则该压缩节点的节点信息中的“失败节点”只需要表示一个失败节点即可,所以当组成压缩节点的各节点的“失败节点”满足预置的条件时可以有效地节省压缩节点的节点信息所占的空间,进一步减少AC自动机匹配算法所需的存储空间。
下面以另一个实例对上述节点压缩的过程进行描述,请参阅图3:
假设存在模式库P={he,she,his,hers},根据该模式库构建的AC模式树如图3所示,该AC模式树中包含10个节点,其中根节点为S0,各带箭头的实线上的字符,是该箭头所指的节点的“匹配字符”,各虚线箭头所指向的节点表示各节点的“失败节点”,节点S2,S4,S6以及S9为命中节点(即节点S2,S4,S6以及S9的“命中标记”表示存在匹配),S2匹配的模式为“he”,S4匹配的模式为“hers”,S6匹配的模式为“his”,S9匹配的模式为“she”。
在对该AC模式树进行深度优先遍历之后,可以获知,符合“同一边上第一节点以及中间节点只有一个子节点”的节点段为“S2,S3,S4”(第一节点为S2,中间节点为S3,第二节点为S4),“S5,S6”(第一节点为S5,第二节点为S6)以及“S7,S8,S9”(第一节点为S7,中间节点为S8,第二节点为S9),进一步符合“第一节点,第二节点以及中间节点中只有一个命中节点”的节点段为“S2,S3”(第一节点为S2,第二节点为S3),“S3,S4”(第一节点为S3,第二节点为S4),“S5,S6”(第一节点为S5,第二节点为S6)以及“S7,S8,S9”(第一节点为S7,中间节点为S8,第二节点为S9),更进一步符合“第一节点,第二节点以及中间节点所对应的失败节点相同”的节点段为“S2,S3”(第一节点为S2,第二节点为S3)。
其中,节点S2的节点信息为“当前节点:S1,匹配字符:e,下一节点:S2,失败节点:S0,命中标记:1”,命中标记为1表示该节点S2为命中节点。
节点S3的节点信息为“当前节点:S2,匹配字符:r,下一节点:S3,失败节点:S0,命中标记:0”,命中标记为0表示该节点S3不是命中节点。
经过节点压缩之后,得到如图4所示的压缩节点S20,该压缩节点S20的节点信息为“类型:失败节点相同,当前节点:S1,字符串:er,长度:2,下一节点:S20,失败节点:S0,命中位置:1,命中标记:1”。
命中标记为1表示组成该压缩节点S20的各节点中包括一个命中节点,命中位置为1表示该命中节点为组成压缩节点S20的第一个节点,即原节点S2。
需要说明的是,本实施例中,以同时需要满足“同一边上第一节点以及中间节点只有一个子节点”,“第一节点,第二节点以及中间节点中只有一个命中节点”以及“第一节点,第二节点以及中间节点所对应的失败节点相同”为例进行说明,在实际应用中可以不必同时满足这三个条件,具体的压缩方式类似,此处不再赘述。
上面对本发明实施例中的节点压缩方法进行了详细描述,下面对本发明实施例中的多模匹配方法进行描述,需要说明的是,下述实施例中的多模匹配方法中的压缩节点与上述节点压缩方法得到的压缩节点一致,节点信息的数据结构也类似,请参阅图5,本发明实施例中的多模匹配方法包括:
501、对当前目标字符与压缩节点的“字符串”中的首字符进行匹配;
本实施例中,执行多模匹配时,匹配目标中可以包含多个目标字符,当开始对压缩节点的“字符串”进行匹配时,则会采用当前目标字符与压缩节点的“字符串”中的首字符进行匹配。
502、当匹配成功时,则执行步骤503,当匹配不成功时,则执行步骤504;
503、根据预置的匹配目标对当前目标字符进行更新,并对更新后的当前目标字符继续对“字符串”中的后续字符进行匹配,直至将匹配目标中的目标字符匹配完毕,在匹配过程中,匹配到不能成功匹配时,则执行步骤504。
本实施例中,匹配目标中可以包含有多个目标字符,当某一个目标字符匹配成功之后,则可以使用该匹配目标中的下一目标字符作为当前目标字符进行新的匹配。
对当前目标字符进行更新之后,则可以采用更新后的当前目标字符继续对“字符串”中的后续字符进行匹配。
504、执行其他处理流程。
若当前目标字符与压缩节点的“字符串”中的首字符匹配不成功,则会按照该压缩节点的节点信息中的“当前节点”查询该压缩节点的父节点,并对该父节点进行匹配。
本实施例中,若当前目标字符与压缩节点的“字符串”中的首字符匹配成功,则会对当前目标字符进行更新,并按照更新后的当前目标字符继续对所述“字符串”中的后续字符进行匹配,而并不会在每匹配一个字符之后都对另外一个节点进行匹配,所以无需频繁访问AC模式树,从而提高了多模匹配查找的速度。
为便于理解,下面以另一实例对本发明实施例中的多模匹配过程进行详细描述:
请参阅图6,本发明实施例中多模匹配方法另一实施例包括:
601、对当前目标字符与压缩节点的“字符串”中的首字符进行匹配;
本实施例中,匹配目标中可以包含多个目标字符,执行多模匹配时,当开始对压缩节点的“字符串”进行匹配时,则会采用当前目标字符与压缩节点的“字符串”中的首字符进行匹配。
602、当匹配成功时,则执行步骤603,当匹配不成功时,则执行步骤605;
603、根据预置的匹配目标对当前目标字符进行更新,并按照“字符串”中包含的字符的先后顺序,使用更新后的当前目标字符继续对“字符串”中的后续字符进行匹配,匹配过程中,匹配到不能成功匹配时,则执行步骤605,匹配成功时,则继续匹配,直至将匹配目标中的目标字符匹配完毕,在匹配目标全部匹配成功时,执行步骤604;
本实施例中,匹配目标中可以包含有多个目标字符,当某一个目标字符匹配成功之后,则可以使用该匹配目标中的下一目标字符作为当前目标字符进行新的匹配。
本实施例中,采用更新后的当前目标字符继续对“字符串”中的后续字符进行匹配之后,判断对后续字符的匹配是否均成功,若是,则表示压缩节点完全匹配,即各个当前目标字符所组成的字符串与压缩节点的“字符串”完全相同,则执行步骤604,若否,则表示压缩节点部分匹配,即各个当前目标字符所组成的字符串与压缩节点的“字符串”有一部分相同,则执行步骤605。
604、输出匹配结果;
当压缩节点完全匹配之后,若组成该压缩节点的各节点中包括命中节点,则可以输出匹配结果,具体可以根据压缩节点的“命中位置”确定命中节点在所述压缩节点中的位置,并输出匹配结果,该匹配结果包括该命中节点所对应的模式库中的模式。
605、对失败节点进行匹配。
当压缩节点部分匹配之后,则可以按照当前匹配失败的字符确定失败节点,并开始对该失败节点进行匹配。
本实施例中,对该失败节点进行匹配是指:在多模匹配过程中,若该压缩节点部分匹配,则表示当前目标字符与该压缩节点的“字符串”中正在进行匹配的字符不相同,则需要将该当前目标字符与该压缩节点的失败节点的“匹配字符”进行匹配。
本实施例中可以根据压缩节点的“类型”以及“失败节点”确定失败节点,具体的确定过程可以为:
若“类型”指示组成该压缩节点的各节点的失败节点相同,则将“失败节点”所指示的节点作为失败节点;
或,
若“类型”指示组成该压缩节点的各节点的失败节点连续,则根据“字符串”中匹配成功的字符数目以及“失败节点”确定失败节点,具体的失败节点的标识可以为“(“失败节点”+已经匹配的匹配字符个数-1)”,该“失败节点”为压缩节点对应的失败节点的标识,例如压缩节点的“失败节点”为3,则表示该压缩节点的失败节点为节点标识为3的节点,若当前已经匹配了2个字符,则此时的失败节点的标识为(3+2-1),即为节点标识为5的节点。
本实施例中,若当前目标字符与压缩节点的“字符串”中的首字符匹配成功,则会对当前目标字符进行更新,并按照更新后的当前目标字符继续对所述“字符串”中的后续字符进行匹配,而并不会在每匹配一个字符之后都对另外一个节点进行匹配,所以无需频繁访问AC模式树,从而提高了多模匹配查找的速度。
下面以一个具体实例对上述节点压缩的过程进行描述,请参阅图4:
AC模式树中存在节点S0,S1,S4,S5,S6,S7,S8,S9以及压缩节点S20,该压缩节点S20的节点信息为“类型:失败节点相同,当前节点:S1,字符串:er,长度:2,下一节点:S20,失败节点:S0,命中位置:1,命中标记:1”。
假设匹配目标为文本text=“shers”,则从根节点S0处开始匹配,当前目标字符为s,则匹配节点S7,之后更新当前目标字符,并顺序匹配节点S8以及节点S9,由于节点S9是命中节点,当节点S9匹配成功之后,则输出匹配结果为模式“she”以及模式“he”,本实施例中,匹配节点S7,节点S8,节点S9的过程可以采用现有技术,此处不作限定。
字符r在节点S9匹配失败,在将节点S2以及节点S3压缩为压缩节点S20之前,节点S9的“失败节点”为S2,压缩之后节点S9的“失败节点”变为S0,因此当前目标字符需要从字符r进行回退,即在匹配目标“shers”中,从字符r向字符s的方向对当前目标字符进行倒退,所以当字符r在节点S9匹配失败后,需要对节点S9的失败节点(即根节点S0)进行匹配,目标字符更新为h,则匹配节点S1,匹配节点S1成功后目标字符更新为e,则对压缩节点S20进行匹配,目标字符e与压缩节点S20的字符串的首字符e匹配成功,则按照先后顺序继续对压缩节点S20的“字符串”的后续字符进行匹配,目标字符更新为r,与压缩节点S20内部对字符串的后续字符r匹配成功,则压缩节点S20完全匹配,此时若组成压缩节点S20的各节点中包括命中节点,则可输出匹配结果为模式“he”,压缩节点S20完全匹配之后,继续与该压缩节点的子节点S4的“匹配字符”s进行匹配,匹配成功后输出匹配结果为模式“hers”。
下面对本发明实施例中的节点压缩装置进行描述,请参阅图7,本发明实施例中的节点压缩装置一个实施例包括:
遍历单元701,用于对预置的AC模式树进行深度优先遍历,在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;
节点压缩单元702,对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数顺序组成。
本实施例中所描述的压缩节点的字符串参数可以为前述方法实施例中的压缩节点的“字符串”字段,第一节点的字符参数可以为第一节点的“匹配字符”,中间节点的字符参数可以为中间节点的“匹配字符”,第二节点的字符参数可以为第二节点的“匹配字符”。
请参阅图8,本发明实施例中的节点压缩装置另一实施例包括:
遍历单元801,用于对预置的AC模式树进行深度优先遍历,在AC模式树的同一条边上查找第一节点,以及第二节点,所述第一节点只有一个子节点,所述第二节点有至少两个子节点,或者所述第二节点为叶子节点;
节点压缩单元802,对所述第一节点,所述第二节点,以及所述第一节点至所述第二节点之间的中间节点进行压缩得到一个压缩节点,所述压缩节点的节点信息中包含字符串参数,所述字符串参数由所述第一节点的字符参数,所述中间节点的字符参数,以及所述第二节点的字符参数顺序组成;
本实施例中所描述的压缩节点的字符串参数可以为前述方法实施例中的压缩节点的“字符串”字段,第一节点的字符参数可以为第一节点的“匹配字符”,中间节点的字符参数可以为中间节点的“匹配字符”,第二节点的字符参数可以为第二节点的“匹配字符”。
命中节点判断单元803,用于在所述遍历单元801查询到的第一节点,所述第二节点,以及所述中间节点中只有一个命中节点时,触发所述节点压缩单元802执行相应操作;
失败节点判断单元804,用于在所述遍历单元801查询到的第一节点,所述第二节点,以及所述中间节点所对应的失败节点满足预置的条件时,触发所述节点压缩单元802执行相应操作。
需说明的是,该节点压缩装置可以包括命中节点判断单元803和失败节点判断单元804的其中之一,或者两个都包括。
为便于理解,下面以一具体应用场景对本发明实施例中的节点压缩装置进行描述:
本实施例中,当AC模式树构建完成之后,遍历单元801则可以对该AC模式树进行深度优先遍历,即按照该AC模式树的每一条边,按照从根节点到叶子节点的方向进行遍历,具体的遍历方式可以采用现有技术,此处不作限定。
遍历单元801可以针对AC模式树的每一条边,按照从根节点到叶子节点的方向进行遍历,分别查找第一节点和第二节点。例如:在对某一条边X上的节点进行遍历中,寻找该边X上的第一节点,该第一节点是只有一个子节点的节点,若找到了第一节点,则在该边X上按照朝向叶子节点的方向对各节点继续进行遍历,直至找到一个第二节点,该第二节点是具有至少两个子节点,或者为叶子节点的节点,即一种第二节点没有子节点。
需要说明的是,在执行深度优先遍历的过程中,并不一定AC模式树的所有的边上都有满足上述条件的第一节点以及第二节点,例如某一条边上可能只有根节点和叶子节点这两个节点,对于这种情况,本实施例中不作考虑,本实施例中所针对的情况是:AC模式树的某一条边X上,除根节点外至少有两个节点,这两个节点为父子节点,且父节点(即第一节点)仅有一个子节点(即第二节点)。
通过上述方式,遍历单元801查询到的第一节点,第二节点以及第一节点与第二节点之间的中间节点是在AC模式树的边X上的连续节点,其中,中间节点是指在遍历过程中,在边X上经过的位于第一节点,第二节点之间的所有节点,所述中间节点只有一个子节点。
当确定了第一节点,第二节点以及中间节点之后,命中节点判断单元803可以继续判断第一节点,第二节点以及中间节点中是否只有一个命中节点,且失败节点判断单元804可以判断第一节点,第二节点以及中间节点的失败节点是否满足预置的条件。
当命中节点判断单元803确定第一节点,第二节点,以及中间节点中只有一个命中节点,且失败节点判断单元804确定第一节点,第二节点,以及中间节点的失败节点满足预置的条件之后,则节点压缩单元802可以对第一节点,第二节点,以及中间节点进行压缩得到压缩节点。
本实施例中的压缩节点的节点信息与前述方法实施例中所描述的节点信息类似,此处不再赘述。
本实施例中,在遍历单元801确定了满足条件的第一节点,第二节点,以及中间节点之后,节点压缩单元802可以对这些节点进行压缩得到一个压缩节点,该压缩节点的节点信息中包含“字符串”,且该“字符串”由第一节点的“匹配字符”,中间节点的“匹配字符”以及第二节点的“匹配字符”顺序组成,所以本发明实施例中存储的压缩节点对应一个字符串,而并不是仅对应一个字符,因此能够有效地减少AC模式树中节点的数目,从而能够减少AC自动机匹配算法需要的存储空间;
其次,本实施例中命中节点判断单元803还可以进一步要求组成压缩节点的各节点中只有一个命中节点,组成压缩节点的各节点中若有多个命中节点,则该压缩节点的节点信息中的“命中位置”需要表示多个命中节点在压缩节点中的位置,当组成压缩节点的各节点中只有一个命中节点时,该压缩节点的节点信息中的“命中位置”可以只用描述该命中节点的位置,所以当组成压缩节点的各节点中只有一个命中节点时可以有效地节省压缩节点的节点信息所占的空间,进一步减少AC自动机匹配算法所需的存储空间;
再次,本实施例中失败节点判断单元804还可以进一步要求组成压缩节点的各节点所对应的失败节点满足预置的条件,组成压缩节点的各节点的“失败节点”若不满足预置的条件,则该压缩节点的节点信息中的“失败节点”需要表示组成该压缩节点的每个节点的“失败节点”,当组成压缩节点的各节点的“失败节点”满足预置的条件时,则该压缩节点的节点信息中的“失败节点”只需要表示一个失败节点即可,所以当组成压缩节点的各节点的“失败节点”满足预置的条件时可以有效地节省压缩节点的节点信息所占的空间,进一步减少AC自动机匹配算法所需的存储空间。
下面对本发明实施例中的节点压缩装置进行描述,请参阅图9,本发明实施例中的多模匹配装置一个实施例包括:
匹配单元901,用于对当前目标字符与压缩节点的字符串参数中的首字符进行匹配;
更新单元902,用于当当前目标字符与压缩节点的字符串参数中的首字符匹配成功时,根据预置的匹配目标对所述当前目标字符进行更新,并指示所述匹配单元901按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配。
本实施例中所描述的压缩节点的字符串参数可以为前述方法实施例中的压缩节点的“字符串”字段。
请参阅图10,本发明实施例中的多模匹配装置另一实施例包括:
匹配单元1001,用于对当前目标字符与压缩节点的字符串参数中的首字符进行匹配;
更新单元1002,用于当当前目标字符与压缩节点的字符串参数中的首字符匹配成功时,根据预置的匹配目标对所述当前目标字符进行更新,并指示所述匹配单元1001按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配,直至将匹配目标中的目标字符匹配完毕,在匹配过程中,匹配到不能成功匹配时,由控制单元1004执行;
匹配结果输出单元1003,用于当所述压缩节点的命中标记参数指示组成该压缩节点的各节点中包括命中节点时,根据所述压缩节点的命中位置参数确定所述命中节点的位置,并输出匹配结果。
进一步地,多模匹配装置进一步包括:
控制单元1004,用于当所述压缩节点的字符串参数中的字符与更新后的当前目标字符匹配失败时,根据所述压缩节点的类型参数以及失败节点参数确定失败节点;
失败节点匹配单元1005,用于对所述失败节点进行匹配。在所述失败节点为普通节点(即不是压缩节点)时,可采用现有的匹配方式进行匹配。另外,在所述失败节点为普通节点时,所述失败节点匹配单元1005可以与匹配单元1001和更新单元1002集成在一起。
在所述失败节点为压缩节点时,所述失败节点匹配单元1005可以包括匹配单元1001和更新单元1002。
本实施例中所描述的压缩节点的字符串参数可以为前述方法实施例中的压缩节点的“字符串”字段,压缩节点的命中标记参数可以为前述方法实施例中的压缩节点的“命中标记”字段,压缩节点的命中位置参数可以为前述方法实施例中的压缩节点的“命中位置”字段。
为便于理解,下面以一具体应用场景对本发明实施例中的多模匹配装置进行描述:
本实施例中,执行多模匹配时,当开始对压缩节点的字符串参数进行匹配时,匹配单元1001则会采用当前目标字符与压缩节点的字符串参数中的首字符进行匹配,判断当前目标字符与压缩节点的字符串参数中的首字符是否匹配成功,若成功,则更新单元1002根据预置的匹配目标对当前目标字符进行更新,对当前目标字符进行更新之后,匹配单元1001则可以采用更新后的当前目标字符继续对字符串参数中的后续字符进行匹配;
本实施例中,匹配单元1001采用更新后的当前目标字符继续对字符串参数中的后续字符进行匹配,如果对后续字符的匹配均成功,则表示该压缩节点完全匹配,若否,则表示该压缩节点部分匹配,当该压缩节点完全匹配之后,若组成该压缩节点的各节点中包括命中节点,即压缩节点的命中标记参数指示若组成该压缩节点的各节点中包括命中节点,则匹配结果输出单元1003可以输出匹配结果,具体可以根据压缩节点的命中位置参数确定命中节点在所述压缩节点中的位置,并输出匹配结果。
当该压缩节点部分匹配之后,无法继续进行匹配时,则控制单元1004可以按照当前匹配失败的字符确定失败节点,并对所述失败节点进行匹配。
本实施例中,若当前目标字符与压缩节点的字符串参数中的首字符匹配成功,则更新单元1002会对当前目标字符进行更新,匹配单元1001按照更新后的当前目标字符继续对所述字符串参数中的后续字符进行匹配,而并不会在每匹配一个字符之后都对另外的节点进行匹配,所以无需频繁访问AC模式树,从而提高了多模匹配查找的速度。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种节点压缩方法及装置、以及多模匹配方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。