一种节点压缩方法以及多模匹配方法

文档序号:10612842阅读:186来源:国知局
一种节点压缩方法以及多模匹配方法
【专利摘要】本发明实施例公开了一种节点压缩方法,用于节约存储空间。本发明实施例方法包括:查找位于同一分支且从根节点顺序编号的第一节点及第二节点;对从第一节点至第二节点的各节点进行压缩,得到压缩节点;所述第一节点只有一个分支且是离根节点最近的节点;所述第二节点为叶子节点或有两条以上分支;所述压缩节点的字符串参数由从第一节点至第二节点的各节点的字符参数顺序组成;标记所述压缩节点。有效地节约了存储空间。
【专利说明】
一种节点压缩方法以及多模匹配方法
技术领域
[0001]本发明涉及通信技术领域,尤其涉及一种节点压缩方法以及多模匹配方法。
【背景技术】
[0002]在病毒扫描,协议识别,内容过滤,入侵检测等应用中,模式匹配技术都是一项基本的支撑技术。模式匹配技术,通过快速的扫描数据报,在大规模的规则库中找到对应的匹配规则,为其后的应用程序进行处理提供了依据。模式匹配算法的好坏直接影响到这些应用的性能的尚低。
[0003]模式匹配技术的目的是在目标文本中找到所给模式出现的位置。根据待查找模式数量的不同,分为单模式匹配和多模式匹配。多模式匹配技术研究在目标文本中找到模式库中的所有模式出现的位置。这里的模式都是以字符串的形式描述。
[0004]AC自动机匹配算法是多模匹配的经典算法,它通过构造一个AC模式树实现快速的多模匹配。其处理过程分为两步:预处理过程和查找过程。
[0005]预处理的目的是基于模式库中的所有模式构造一个AC模式树。其过程如下:
[0006]每条模式以模式树的根节点为起点,将模式库中的模式逐个插入到模式树中。
[0007]从根节点开始,如果存在与模式字符相同的边,进入对应的节点。
[0008]如果已经走到叶子节点,将增加新的节点和边,并用模式字符对边进行标记。
[0009]在增加模式的最后一个字符的节点时,标记为匹配节点;
[0010]然后为每个节点增加一个失败函数fai1和匹配函数outputO。
[0011]该模式树的特点是:
[0012]该树的每一条边都有一个字符标记;
[0013]同一个节点下的各条边的标记字符都是不同的;
[0014]对于模式库P中的每个模式p,都存在一个节点V,使得L(v)=p,其中L(V)表示从根节点到节点V的路径上所有边的字符标记的拼接;
[0015]每个叶子节点V都对应一个属于模式库P中的模式p,使得L(v)=p。
[0016]每个节点V的失败函数指向一个失败节点V’,v’=fail(v),使得L(v’)为L(V)的最长的后缀字符串。
[0017]每个节点V的匹配函数输出一组匹配模式,0UtpUt(v)=P’,其中P’里的每个模式都是L(V)的后缀字符串。
[0018]例如模式库P= {he,she,his,hers},则其对应的模式树如图1所示:
[0019]101 至 110 为节点;
[0020]实线箭头表示状态转移;
[0021]虚线箭头表示该节点的失败函数,称为失败转移;
[0022]具有虚线标记的节点表示有模式匹配。
[0023]在该AC模式树中的节点的内部数据结构包括:当前节点(Cs),输入字符(Char),下一节点(Ns),失败节点(Fs),命中标记(Hit)。其各个字段的含义如下:
[0024]当前节点:表示该节点的父节点;
[0025]输入字符:表示从父节点到该节点需要匹配的字符;
[0026]下一节点:表示该节点的编号;如果当前状态为Cs,且输入字符与Char匹配后,当前状态转移到该节点Ns;
[0027]失败节点:在当前状态为Ns时,如果输入字符没有找到匹配的下一节点,则进行失败转移,当前状态转移到该失败节点Fs;
[0028]命中标记:表示该节点内存在模式匹配。
[0029]基于AC模式树进行查找的过程如下:
[0030]以根节点为起点,沿着以text中的字符为标记的边进行状态转移;
[0031]如果当前状态为Cs,输入字符匹配对应节点的Char,则当前状态转移到Ns;
[0032]如果在当前节点没有找到输入字符匹配的下一节点,则进行失败转移,当前状态转移到Fs;
[0033]根据上述步骤的条件不断进行状态转移,直到text中的所有字符查找完;
[0034]在状态转移过程中经过的每个节点,如果其字段Hit标记为存在命中,则输出对应的节点号(代表了命中的模式编号)和对应的text位置。
[0035]例如,存在模式库P= {he,she ,his ,hers},要查找目标文本text= “ushers”,则进行多模匹配后得到的结果就是:位置2命中she,位置3命中he,位置3命中hers。
[0036]AC自动机匹配算法需要的存储空间主要由其模式树的节点数目决定,其占用的存储空间与模式库中的字符个数成正比,若模式库内的字符个数很多时,AC模式树占用的存储空间很大。如果使用片内存储器存储原始的AC模式树,支持的模式库将很小,如果使用外部存储器来存储模式树,将大大增加状态转移的延迟时间。
[0037]另一方面,AC自动机匹配算法每处理一个字符都需要进行状态转移,而通过查找模式树进行状态转移的延迟相对较大。因此频繁的访问存储器中的AC模式树,将大大降低多模匹配查找的速度。
[0038]综上所述,AC自动机匹配算法导致查找速度很难提高。

【发明内容】

[0039]本发明实施例提供了一种多模匹配方法、装置及系统,可以有效地节约存储空间,降低状态转移的频率,一次状态转移可以处理多个字符,提高了多模查找的速度。
[0040]本发明实施例提供的一种节点压缩方法,包括:
[0041 ]查找位于同一分支且从根节点顺序编号的第一节点及第二节点;
[0042]对从第一节点至第二节点的各节点进行压缩,得到压缩节点;
[0043]所述第一节点只有一个分支且是离根节点最近的节点;
[0044]所述第二节点为叶子节点或有两条以上分支;
[0045]所述压缩节点的字符串参数由从第一节点至第二节点的各节点的字符参数顺序组成;
[0046]标记所述压缩节点。
[0047]从以上技术方案可以看出,本发明实施例具有以下优点:
[0048]由于将满足条件的多个节点压缩成一个特殊的压缩节点,减少了节点的数量,从而有效地节约了存储空间,另一方面,节点数的减少降低了状态转移的频率,一次状态转移可以处理多个字符,提高了多模查找的速度。
【附图说明】
[0049]图1为现有技术方法AC自动机算法的模式树图;
[0050]图2是本发明实施例的多模匹配方法一个实施例示意图;
[0051 ]图3是本发明实施例的多模匹配方法另一个实施例示意图;
[0052]图4是本发明实施例的多模匹配方法另一个实施例示意图;
[0053]图5是本发明实施例的多模匹配方法另一个实施例示意图;
[0054]图6是本发明实施例的节点压缩过程示意图;
[0055]图7是本发明实施例的多模匹配过程示意图。
【具体实施方式】
[0056]本发明实施例提供了一种多模匹配方法,用于节约存储空间和提高多模查找的速度。
[0057]请参阅图2,本发明实施例中的多模匹配方法一个具体例子包括:
[0058]201、压缩第一节点、中间节点及第二节点;
[0059]其中,第一节点、中间节点及第二节点位于同一分支且按顺序编号,第一节点没有分支且为分支节点,中间节点为连续节点,第二节点为叶子节点或有两条以上分支。
[0060]202、标记压缩后的节点;
[0061]其中,对压缩节点进行标记,用于该压缩节点的内部数据结构可以保证该模式树在查找时能同样的进行状态转移。
[0062]本实施例中的压缩节点的节点信息具体可以包括:
[0063]“类型” Typ(即类型参数),“当前节点” Cs(即当前节点参数),“字符串” Str(即字符串参数),“长度” Len(即长度参数),“下一节点” Ns(即下一节点参数),“失败节点” Fs(即失败节点参数),“命中位置”Hitpos(即命中位置参数),“命中标记”Hit(即命中标记参数),各个字段的含义如下:
[0064]“类型” Typ:表示第一节点,第二节点,以及中间节点的“失败节点”之间的关系,例如该“类型”可以为“失败节点相同”或“失败节点连续”,需要说明的是,若第一节点,第二节点,以及中间节点的“失败节点”之间已默认采用某一种关系,例如在节点压缩时,压缩前的节点的“失败节点”必须相同才可压缩,则也可以无需该字段;
[0065]“当前节点” Cs:表示该压缩节点的父节点;
[0066]“字符串”Str:表示若要对该压缩节点完全匹配,所需要匹配的字符串,该字符串由压缩成该压缩节点的第一节点,中间节点,以及第二节点的“匹配字符”按照遍历时节点的先后顺序组成;
[0067]“长度” Len:表示字符串Str的长度,该字段为可选字段,如果在实际应用中可以通过“字符串”本身体现出长度的信息,也无需专门使用该“长度”字段;
[0068]“下一节点”Ns:表示该压缩节点自身;
[0069]“失败节点” Fs:表示在对该压缩节点匹配失败后下一个所需要匹配的节点;
[0070]“命中标记” Hit:表示组成该压缩节点的节点中是否包含命中节点,即该“命中标记”具体可以为两种类型的数值,分别用于表示组成该压缩节点的节点中包含命中节点,以及组成该压缩节点的节点中不包含命中节点;
[0071]“命中位置” Hitpos:表示组成该压缩节点的命中节点在该压缩节点中的位置。
[0072]本实施例中,由于对第一节点、中间节点及第二节点进行了压缩,减少了节点数量,从而节约了存储空间。
[0073]为了便于理解,下面以一具体实例对本发明实施例中的多模匹配方法进行描述,请参阅图3,本发明方法另一个实施例包括:
[0074]使用路径长度压缩方法压缩第一节点3011、中间节点3012及第二节点3013为压缩节点3018;
[0075]其中,第一节点3011、中间节点3012及第二节点3013位于同一分支且按顺序编号,第一节点3011没有分支且为节点3014的分支节点,中间节点3012为连续节点,第二节点3013有两条以上分支,3015、3016、3017均为节点,3018为虚线框内的节点压缩之后的节点。
[0076]中间节点的个数可以是一个或多个,此处不作限定;第二节点也可以是叶子节点,此处不作限定。
[0077]标记压缩后的节点;
[0078]其中,以第二节点的编号对压缩节点进行标记,用于该压缩节点的内部数据结构可以保证该模式树在查找时能同样的进行状态转移。
[0079]也可以采用第一节点的编号对压缩节点进行标记,此处不作限定。
[0080]本实施例中,采用路径长度压缩方法将第一节点、中间节点及第二节点压缩为一个节点,减少了节点数量,从而节约了存储空间。
[0081]上面从压缩节点侧对本发明多模匹配方法进行了描述,下面从匹配节点侧对本发明多模匹配方法进行描述,请参阅图4,本发明实施例的另一个具体例子包括:
[0082]401、当状态转移到压缩节点时,若匹配该压缩节点的字符串,则进入该压缩节点。
[0083]402、当状态转移到压缩节点时,若匹配该字符串的头几个字符,则部分进入该压缩节点。
[0084]403、当匹配不能继续进行时,转移到该压缩节点对应的失败节点;
[0085]其中,失败节点由压缩节点的类型和失败节点的字段决定,此处不作限定。
[0086]本实施例中,对压缩节点的字符串或字符串的头几个字符进行匹配,降低了状态转移的频率,一次状态转移可以处理多个字符,提高了多模查找的速度。
[0087]为了便于理解,下面以一具体实例对本发明实施例中的多模匹配方法进行描述,请参阅图5,本发明方法另一个实施例包括:
[0088]501、以根节点为起点,沿着以目标文本中的字符为标记的分支进行状态转移。
[0089]502、当状态转移到普通节点,判断输入字符是否匹配对应该普通节点的字符,若是,则进入步骤503,若不是,则进入步骤504。
[0090]503、转移当前状态到下一节点。
[0091]504、进行失败转移,转移当前状态到失败节点。
[0092]505、当状态转移到压缩节点时,若匹配该压缩节点的字符串,则进入该压缩节点。
[0093]506、当状态转移到压缩节点时,若匹配该字符串的头几个字符,则部分进入该压缩节点。
[0094]507、当匹配不能继续进行时,转移到该压缩节点对应的失败节点;
[0095]其中,失败节点由压缩节点的类型和失败节点的字段决定,此处不作限定。
[0096]508、如果命中标记值标记为命中,则输出该压缩节点的标号和该压缩节点对应的位置。
[0097]509、根据该压缩节点的标号输出匹配的模式编号。
[0098]510、当目标文本中的所有字符被查找完时,结束匹配。
[0099]本实施例中,对压缩节点的字符串或字符串的头几个字符进行匹配,并输出了匹配的模式编号,降低了状态转移的频率,一次状态转移可以处理多个字符,提高了多模查找的速度。
[0100]下面以另一个实例对上述节点压缩的过程进行描述,请参阅图6:
[0101 ]假设存在模式库P = {he,she,his,hers},根据该模式库构建的AC模式树如图6所示,该AC模式树中包含10个节点,其中根节点为S0,各带箭头的实线上的字符,是该箭头所指的节点的“匹配字符”,各虚线箭头所指向的节点表示各节点的“失败节点”,节点S2,S4,S6以及S9为命中节点(即节点S2,S4,S6以及S9的“命中标记”表示存在匹配),S2匹配的模式为“he”,S4匹配的模式为“hers”,S6匹配的模式为“his”,S9匹配的模式为“she”。
[0102]在对该AC模式树进行深度优先遍历之后,可以获知,符合“同一边上第一节点以及中间节点只有一个子节点”的节点段为“S2,S3,S4”(第一节点为S2,中间节点为S3,第二节点为54),“55,56”(第一节点为55,第二节点为56)以及“57,58,59”(第一节点为57,中间节点为S8,第二节点为S9),进一步符合“第一节点,第二节点以及中间节点中只有一个命中节点”的节点段为“S2,S3”(第一节点为S2,第二节点为S3),“S3,S4”(第一节点为S3,第二节点为34),“55,56”(第一节点为55,第二节点为56)以及“57,58,59”(第一节点为57,中间节点为S8,第二节点为S9),更进一步符合“第一节点,第二节点以及中间节点所对应的失败节点相同”的节点段为“S2,S3”(第一节点为S2,第二节点为S3)。
[0103]其中,节点S2的节点信息为“当前节点:SI,匹配字符:e,下一节点:S2,失败节点:S0,命中标记:1”,命中标记为I表示该节点S2为命中节点。
[0104]节点S3的节点信息为“当前节点:S2,匹配字符:r,下一节点:S3,失败节点:SO,命中标记:O”,命中标记为O表示该节点S3不是命中节点。
[0105]经过节点压缩之后,得到如图7所示的压缩节点S20,该压缩节点S20的节点信息为“类型:失败节点相同,当前节点:SI,字符串:er,长度:2,下一节点:S20,失败节点:S0,命中位置:1,命中标记:1”。
[0106]命中标记为I表示组成该压缩节点S20的各节点中包括一个命中节点,命中位置为I表示该命中节点为组成压缩节点S20的第一个节点,即原节点S2。
[0107]需要说明的是,本实施例中,以同时需要满足“同一边上第一节点以及中间节点只有一个子节点”,“第一节点,第二节点以及中间节点中只有一个命中节点”以及“第一节点,第二节点以及中间节点所对应的失败节点相同”为例进行说明,在实际应用中可以不必同时满足这三个条件,具体的压缩方式类似,此处不再赘述。
[0108]下面以一个具体实例对上述多模匹配的过程进行描述,请参阅图7:
[0109]六(:模式树中存在节点30,31,34,35,36,37,38,39以及压缩节点320,该压缩节点S20的节点信息为“类型:失败节点相同,当前节点:SI,字符串:er,长度:2,下一节点:S20,失败节点:SO,命中位置:1,命中标记:1”。
[0110]假设匹配目标为文本text= “shers”,则从根节点SO处开始匹配,当前目标字符为s,则匹配节点S7,之后更新当前目标字符,并顺序匹配节点S8以及节点S9,由于节点S9是命中节点,当节点S9匹配成功之后,则输出匹配结果为模式“she”以及模式“he”,本实施例中,匹配节点S7,节点S8,节点S9的过程可以采用现有技术,此处不作限定。
[0111]字符r在节点S9匹配失败,在将节点S2以及节点S3压缩为压缩节点S20之前,节点S9的“失败节点”为S2,压缩之后节点S9的“失败节点”变为SO,因此当前目标字符需要从字符r进行回退,即在匹配目标“shers”中,从字符r向字符s的方向对当前目标字符进行倒退,所以当字符r在节点S9匹配失败后,需要对节点S9的失败节点(即根节点S0)进行匹配,目标字符更新为h,则匹配节点SI,匹配节点SI成功后目标字符更新为e,则对压缩节点S20进行匹配,目标字符e与压缩节点S20的字符串的首字符e匹配成功,则按照先后顺序继续对压缩节点S20的“字符串”的后续字符进行匹配,目标字符更新为r,与压缩节点S20内部对字符串的后续字符r匹配成功,则压缩节点S20完全匹配,此时若组成压缩节点S20的各节点中包括命中节点,则可输出匹配结果为模式“he”,压缩节点S20完全匹配之后,继续与该压缩节点的子节点S4的“匹配字符” s进行匹配,匹配成功后输出匹配结果为模式“hers”。
[0112]以上对本发明所提供的一种节点压缩方法及装置、以及多模匹配方法及装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【主权项】
1.一种节点压缩方法,其特征在于,包括: 查找位于同一分支且从根节点顺序编号的第一节点及第二节点; 对从第一节点至第二节点的各节点进行压缩,得到压缩节点; 所述第一节点只有一个分支且是离根节点最近的节点; 所述第二节点为叶子节点或有两条以上分支; 所述压缩节点的字符串参数由从第一节点至第二节点的各节点的字符参数顺序组成; 标记所述压缩节点。2.根据权利要求1所述的节点压缩方法,其特征在于,所述标记以所述第二节点的编号 ο3.根据权利要求1所述的节点压缩方法,其特征在于,所述压缩使用路径长度压缩方法; 所述压缩节点还包括:所述压缩节点的类型,当前节点,长度,下一节点,失败节点,命中位置,命中标记。4.根据权利要求1所述的节点压缩方法,其特征在于,所述失败节点表示在遇到不匹配时,进行失败转移到对应的节点; 所述压缩节点中各节点对应的失败节点是相同的或连续的。5.一种多模匹配方法,其特征在于,包括: 以根节点为起点,沿着以目标文本中的字符为标记的分支进行状态转移; 当状态转移到压缩节点时,判断目标文本中的当前字符与所述压缩节点的字符串中的第一个字符是否匹配,若是,则更新所述目标文本中的当前字符并使用更新后的字符与所述压缩节点的字符串中的后续字符进行匹配,若否,则转移到失败节点。6.根据权利要求5所述的多模匹配方法,其特征在于,所述匹配之后进一步包括步骤:如果命中标记值标记为命中,则输出所述压缩节点的标号和所述压缩节点对应的位置。7.根据权利要求6所述的多模匹配方法,其特征在于,根据所述标号输出匹配的模式编号。8.根据权利要求5所述的多模匹配方法,其特征在于,所述多模匹配方法进一步包括步骤: 当状态转移到普通节点时,判断目标文本中的当前字符是否匹配所述普通节点的字符,若是,则转移当前状态到下一节点,若不是,则进行失败转移,转移当前状态到失败节点。9.根据权利要求8所述的多模匹配方法,其特征在于,当所述目标文本中的所有字符被查找完时,结束所述匹配。10.根据其权利要求5所述的多模匹配方法,其特征在于,所述压缩节点中各节点对应的失败节点是相同的或连续的。
【文档编号】G06F17/30GK105975515SQ201610277456
【公开日】2016年9月28日
【申请日】2016年4月28日
【发明人】向敏明
【申请人】东莞市华睿电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1