CN102646115A - Ac状态机的构建方法及装置 - Google Patents
Ac状态机的构建方法及装置 Download PDFInfo
- Publication number
- CN102646115A CN102646115A CN2012100380618A CN201210038061A CN102646115A CN 102646115 A CN102646115 A CN 102646115A CN 2012100380618 A CN2012100380618 A CN 2012100380618A CN 201210038061 A CN201210038061 A CN 201210038061A CN 102646115 A CN102646115 A CN 102646115A
- Authority
- CN
- China
- Prior art keywords
- state node
- goto
- goto function
- state
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种AC状态机的构建方法及装置,方法包括:将各搜寻模式中的各通配符设置为特定字符;根据各搜寻模式构建关键字树;将通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至兄弟状态节点的输入字符为待排除字符;当识别到存在不确定goto函数时,对不确定goto函数进行处理以消除不确定goto函数,直至未识别到不确定goto函数为止;从通配符中排除兄弟状态节点对应的所有待排除字符。根据本发明的AC状态机的构建方法及装置,使AC状态机能够处理通配符。
Description
技术领域
本发明涉及模式匹配技术,尤其涉及一种AC状态机的构建方法及装置。
背景技术
多模式匹配问题是计算机科学的基本问题之一,多模式匹配问题可以简单描述为:当存在一个搜寻文本和一个搜寻模式集合时,搜寻模式集合包括两个以上的搜寻模式,每个搜寻模式通常是一字符串。在搜寻文本中查找搜寻模式集合中的各搜寻模式。比如:搜寻文本A为:abcdefg123456,搜寻模式集合C为{abc、ef、tian、123、67、890}。那么,进行多模式匹配后,输出的结果就是搜寻文本A中包含搜寻模式abc、ef和123。
多模式匹配只要扫描一遍搜寻文本,就能够找出该搜寻文本匹配的所有搜寻模式,具有很高的匹配效率,广泛用于入侵检测、病毒检测、搜索引擎和数据挖掘等领域。
AC(Aho-Corasick)算法是一种经典的多模式匹配算法,能够在任意的搜寻文本中定位任一个搜寻模式的所有位置。该算法利用有限自动机巧妙地将字符比较转化为状态转移。其原理是:首先根据搜寻模式集合定义一个有限状态模式匹配机,然后把搜寻文本作为模式匹配状态机的输入,只要匹配到搜寻模式,就会通报此搜寻模式成功。在标准的AC算法中,搜寻文本的每次输入是一个字节。
以搜寻模式集合{he、she、his、hers}为例,由此搜寻模式集合构建的AC状态机如图1A~1C所示。图1A~图1C为现有技术AC状态机的示意图。图1A的关键字树中,每一个圆圈表示一个状态节点,每个状态节点都包含三个重要数据:转移(goto)函数(图1A)、失效(failure)函数(图1B)、输出(output)函数(图1C)。
其中,goto函数用于把一个由状态和输入字符组成的二元组映射成另一个状态或是失效;
failure函数用于把一个状态映射到另一个状态。当goto函数报告失效时,failure函数就会被询问;
output函数,用于表示某个搜寻模式已经被匹配。
在基本AC状态机的状态迁移中,在当前状态S和输入字符c下,下一个状态为:
操作1:如果goto(S,c)存在,那么下一个状态为goto(S,c),算法结束,否则,执行操作2;
操作2:将failure(S)赋值给S,执行操作1。
由于在基本AC状态机中,如果goto函数的结果不存在,就会导致一次或是多次的访问failure函数,为了提高AC状态机的效率,现有技术提出一种去failure的AC状态机。在去failure的AC状态机中,每一个状态节点没有failure函数,而是把goto函数和failure函数统一为:下一个状态(nextstate)函数。
去failure的AC状态机的示意图和标准AC状态机的示意图是一样的,只是每个状态节点下,不再有goto函数和failure函数,而是用nextstate函数替代。nextstate函数用于把一个由状态和输入字符组成的二元组映射成另一个状态。即通过nextstate函数,可获知一个确定的下一个状态。
有了nextstate函数后,AC状态机的迁移就简单多了,在当前状态S和当前输入字符c下,那么下一个状态就是:nextstate(S,c)。
为了方便获取nextstate函数,每一个状态节点需保存下一个状态表,每一个状态节点的下一个状态表记录:在当前状态下,在不同的输入字符时的下一个状态值,即在当前状态下,输入某个字符,那么将迁移到哪一个状态。由于字符是一个字节,能够表示美国信息互换标准代码(American Standard Code for InformationInterchange,以下简称:ASCII)码中的0~255。其中,ASCII码值表记录的是用户所看到的字符与计算机内部的真正数值之间的映射,由于一个字节的取值范围是0~255,因而ASCII码值表有256个单元。比如:用户看到的字母a,计算机内部的保存数值是97;用户看到的数字1,计算机内部的保存数值是31,等等。因而下一个状态表是一个具有256个成员的数组。以图1A中的状态节点1为例,状态节点1在256个不同ASCII码值输入时的下一个状态表,可以如表1所示。
表1
表1中列出的是图1A中状态节点1的下一个状态表,描述状态节点1在256个不同的ASCII码值输入时,状态节点1的下一个状态;下一个状态表是一个数组(array),其中数组的下标值用index表示:在输入的字符的ASCII码值为数组下标值时,状态节点1的下一个状态节点的值为nextstate(1,index)=array[index]。
为了更好地理解,下面举一个例子:以数组的下标值为101为例,通过表1可以看出,当数组下标值为101时,数组的值为2,即nextstate(1,101)=2,表示在状态节点1,当输入的字符的ASCII码值为101时,下一个状态节点为状态节点2,而ASCII码值101正好对应小写字母e,即在状态节点1时,输入字母e,那么下一个状态节点为状态节点2,这正如图1A中所示。
在使用去failure的AC状态机进行多模式匹配时,以搜寻模式集合{he、his、hers、she}和搜寻文本“his book not hers”为例,从去failure的AC状态机的初始状态开始,将搜寻文本的字符逐个输入,重复下述的操作:在当前状态节点下,从下一个状态表中,访问对应于当前输入字符的下一个状态;然后,迁移到此下一个状态。
当搜寻文本输入结束,就能识别出搜寻模式:his和hers。
在实际操作中,往往会出现包含通配符的搜寻模式,用“?”来表示,每一个“?”代表一个字符。例如a?c表示搜寻模式具有这样的特征:三个字符,其中第一个字符为a,最后一个字符为c,第二个字符为任意字符。再比如:a??c表示搜寻模式具有这样的特征:第一个字符为a,最后一个字符为c,第二个字符为任意字符,第三个字符为任意字符。
但是现有的AC状态机只能处理确定的搜索模式,对于含有通配符“?”的搜寻模式,AC状态机无法处理,这大大减少了AC状态机的使用范围。
发明内容
本发明提供一种AC状态机的构建方法及装置,以使AC状态机能够处理含有通配符的搜寻模式。
本发明的第一个方面是提供一种AC状态机的构建方法,包括:
将各搜寻模式中的各通配符设置为特定字符;
根据所述各搜寻模式构建关键字树,所述关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于所述特定字符所转移至的状态节点视为通配符节点;
将所述通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至所述兄弟状态节点的输入字符为待排除字符,其中,所述兄弟状态节点为与所述通配符节点具有同一上层状态节点的状态节点;
当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数;
将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止;
将所述特定字符转换为所述通配符,并从所述通配符中排除所述兄弟状态节点对应的所有待排除字符。
本发明的另一方面提供一种AC状态机的构建装置,包括:
设定模块,用于将各搜寻模式中的通配符设置为特定字符;
构建模块,用于根据所述各搜寻模式构建关键字树,所述关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于所述特定字符所转移至的状态节点视为通配符节点;
复制模块,用于将所述通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至所述兄弟状态节点的输入字符为待排除字符,其中,所述兄弟状态节点为与所述通配符节点具有同一上层状态节点的状态节点;
识别模块,用于当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数,并将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止;
排除模块,用于将所述特定字符转换为所述通配符,并从所述通配符中排除所述兄弟状态节点对应的所有待排除字符。
根据本发明的AC状态机的构建方法及装置,以使AC状态机能够处理含有通配符的搜寻模式。
附图说明
图1A~图1C为现有技术中AC状态机的构建方法;
图2A为本发明一实施例的AC状态机的构建方法的流程示意图;图2B~图2D为本发明一实施例的AC状态机的构建方法中的关键字树的构建图;
图3A~3F为本发明另一实施例的AC状态机的构建方法中的关键字树的构建图;
图4为本发明另一实施例的AC状态机的构建装置的结构示意图;
图5为本发明另一实施例的AC状态机的构建装置的结构示意图。
具体实施方式
实施例一
本实施例提供一种AC状态机的构建方法。该方法适用于AC状态机的构建装置,该AC状态机的构建装置通过将通配符看做是特定字符构造标准的goto函数表和output函数表,并对含有基于通配符所转移至的状态节点进行拆分和合并,以消除不确定的goto函数,同时修改output函数表,最终构造出能够处理通配符的AC状态机。
如图2A所示,为本实施例的AC状态机的构建方法的流程示意图。该AC状态机的构建方法包括:
步骤201,将各搜寻模式中的各通配符设置为特定字符。
本步骤的特定字符可以由非ASCII码值的数值表示,例如数值257、258,可以根据实际需要进行确定。实际上通配符本身就代表256个ASCII码值,这里仅是为了区分其与ASCII码值而将通配符设定为非ASCII码值的特定字符。这里的搜寻模式中的通配符的个数可以为1个或多个。而各搜寻模式中的除各通配符之外的确定字符可以由ASCII码值的数值表示。
步骤202,根据各搜寻模式构建关键字树,关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于特定字符所转移至的状态节点视为通配符节点。
步骤203,将通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至兄弟状态节点的输入字符为待排除字符,其中,兄弟状态节点为与通配符节点具有同一上层状态节点的状态节点。
这里的goto函数表为每个状态节点所对应的goto函数的集合。
步骤204,当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数。
步骤205,将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止。
步骤206,将特定字符转换为通配符,并从通配符中排除兄弟状态节点对应的所有待排除字符。
在步骤206之后,可以按照现有技术中的去failure算法构建最终的AC状态机,即在步骤206之后,还包括:根据关键字树和去failure算法构建AC状态机。
根据本实施例的AC状态机的构建方法,通过将通配符设定为特定函数,并通过拆分和复制goto函数表,构造出了能够处理通配符的AC状态机,增加了AC状态机的适用范围。
实施例二
本实施例对上述实施例的AC状态机的构建方法做进一步补充说明。
本实施例的AC状态机的构建方法在步骤203后且在步骤204之前,还包括:识别复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数。该识别复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数包括:
识别复制goto函数表与兄弟状态节点的原有goto函数表的各转移函数表达式和转移函数输出值;
将转移函数表达式相同,且转移函数输出值不同的转移函数作为不确定goto函数。
本实施例的AC状态机的构建方法,通过识别goto状态表中的不确定goto函数,进而对该不确定goto函数进行处理,能够最大程度保证所构造的AC状态机的准确性。
实施例三
本实施例对上述实施例的AC状态机的构建方法做进一步限定。
本实施例中,在将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数之后,且在返回执行上述识别步骤,直至未识别到不确定goto函数为止之前,还包括:
判断新goto函数输出值所对应的状态节点是否为终状态节点,当判断结果为是时,将新goto函数输出值所对应的状态节点的output函数表复制到旧goto函数输出值所对应的状态节点的output函数表中,终状态节点为各搜寻模式中最后一个输入字符对应的状态节点。
本实施例的其它步骤均与实施例一中一致,在此不再赘述。
本实施例中,通过将终状态节点的output函数表进行复制,能够保证最终构建的AC状态机在进行搜索时的完整性,不会因为某些状态节点的output函数不完整而漏掉某些内容。
实施例四
下面以具体实例来描述AC状态机的构建方法,本实施例中的搜寻模式集合为{ab、abb、a?b、a?bg、acbc}。
首先,将搜寻模式中的通配符“?”设置为特定字符,例如,可以将其看做是数值256,正常的ASCII码值的范围为0~255。可选地,还可以是各搜寻模式中的字符由ASCII码值表示,特定字符由非ASCII码值的数值表示。特定字符的设定可以根据实际需要自行设定。
对于搜寻模式集合{ab、abb、a?b、a?bg、acbc},其构造出来的第一临时关键字树如图2B所示。该第一临时关键字树中的每个终状态节点对应的输出值如表2所示,即该第一临时关键字树中每个状态节点所对应的output函数表如表2所示。这里的终状态节点指的是基于各搜寻模式最后一个字符所转移至的状态节点。本实施例中,图2B中的状态节点2、状态节点3、状态节点5、状态节点10和状态节点11即为终状态节点。另外,状态节点4视为通配符节点。
表2
状态节点 | 输出函数 |
2 | {ab} |
3 | {abb} |
5 | {a?b} |
10 | {acbc} |
11 | {a?bg} |
但是对于特定字符,其会造成不确定的下一跳状态节点,即在同一个状态节点,对于同一个输入,会存在两个以及两个以上的下一个状态节点,即产生了不确定goto函数。例如,对于图2B中的状态节点1,goto(1,b)=2,goto(1,?)=4,但是由于通配符“?”本身包含字符b,那么状态节点1的goto函数表会存在不确定goto函数,即在状态节点1,输入字符b,可以跳向状态节点2,也可以跳向状态节点4。同样,对于状态节点1,goto(1,c)=8,goto(1,?)=4,由于通配符“?”本身包含字符c,那么状态节点1的goto函数表就存在不确定goto函数,即会造成不确定的下一跳状态节点。从图1B中可以看出,状态节点2和状态节点8是与状态节点4具有同一上层状态节点0的兄弟状态节点。此时,记录b和c为待排除字符。
接下来,将状态节点4的goto函数表复制到兄弟状态节点中,即复制到状态节点2和状态节点8中。如图2B所示,状态节点4的goto函数表为:goto(4,b)=5,将状态节点4的goto函数表复制到状态节点2和状态节点8中后如图2C所示。其中,带箭头的虚线表示将状态节点4的goto函数表复制到状态节点2和状态节点8之后,对于状态节点2和状态节点8新产生的goto函数。以下均以该带箭头的虚线表示状态节点新增加的goto函数。
如图2C所示,为将状态节点4的goto函数表复制到状态节点2和状态节点8之后的第二临时关键字树示意图。但是,将状态节点4的goto函数表复制到状态节点2和状态节点8中会导致状态节点2和状态节点8存在不确定goto函数。例如,对于状态节点2,原有的goto函数表中的goto(2,b)=3,但是现在又有goto(2,b)=5,这就导致状态节点2的goto函数表存在不确定goto函数。此时,将原有的goto函数表中goto(2,b)=3视为旧goto函数,将复制后出现的goto函数表中的goto(2,b)=5视为新goto函数。同样,对于状态节点8,原有的goto函数表中的goto(8,b)=9,但是现在又有goto(8,b)=5,这样状态节点8的goto函数表就存在不确定goto函数。此时,将原有的goto函数表中goto(8,b)=9视为旧goto函数,将复制后出现的goto函数表中的goto(8,b)=5视为新goto函数。
接下来,如图2D所示,为第三临时关键字树。该第三临时关键字树中的每个终状态节点对应的输出值如表3所示。将基于新goto函数goto(2,b)=5,即状态节点5所对应的goto函数表复制到状态节点3中,即,状态节点3新增goto(3,g)=11,并去除新goto函数goto(2,b)=5。由于状态节点5是终状态节点,此时可以将状态节点5的output函数也复制到状态节点3中。此外,状态节点9新增goto(9,g)=11。如果该新增的goto(3,g)=11导致状态节点3的goto函数表存在不确定goto函数,或者新增的goto(9,g)=11导致状态节点9的goto函数表存在不确定goto函数,则按照上述方法再进行处理,直至整个goto函数表不存在不确定goto函数为止。
表3
状态节点 | 输出函数 |
2 | {ab} |
3 | {a?b,abb} |
5 | {a?b} |
9 | {a?b} |
10 | {acbc} |
11 | {a?bg} |
这样,对于每一个状态节点都存在确定的下一跳状态节点,即构造完确定的goto函数表和output函数。接着,将特定字符转换为通配符?,该通配符代表256个ASCII码值。然后,再根据去failure算法,最终构造出完成的AC状态机。
根据本实施例的AC状态机的构建方法所构成的AC状态机,能够处理两个确定字符间仅含有一个“?”的搜寻模式。
实施例五
本实施例对AC状态机的构建方法做进一步说明。
下面,以搜寻模式集合中含有通配符“??”为例进行说明。
对于搜寻模式集合为{ab、abb、a?b、a?bg、a??b、acbc},其构造出来的第四临时关键字树如图3A所示。该第四临时关键字树中的每个终状态节点对应的输出值如表4所示,表4即为与第四临时关键字树对应的output函数表。图3A中的状态节点2、状态节点3、状态节点5、状态节点7、状态节点11和状态节点10即为终状态节点。将状态节点4和状态节点6视为通配符节点。
表4
状态节点 | 输出函数 |
2 | {ab} |
3 | {abb} |
5 | {a?b} |
7 | {a??b} |
10 | {acbc} |
11 | {a?bg} |
接下来,将状态节点4的goto函数表复制到兄弟状态节点中,即复制到状态节点2和状态节点8中。如图3A所示,状态节点4的goto函数表为:goto(4,b)=5和goto(4,?)=6,将状态节点4的goto函数表复制到状态节点2和状态节点8中。
如图3B所示,为将状态节点4的goto函数表复制到状态节点2和状态节点8之后的第五临时关键字树示意图。该第五临时关键字树中的每个终状态节点对应的输出值如表5所示,表5即与第五临时关键字树对应的output函数表。由此可见,将状态节点4的goto函数表复制到状态节点2和状态节点8中会导致状态节点2和状态节点8存在不确定的goto函数。例如,对于状态节点2,原有的goto函数表中的goto(2,b)=3,但是现在又有goto(2,b)=5,这状态节点2的goto函数表就存在不确定goto函数了。同样,对于状态节点8,原有的goto函数表中goto(8,b)=9,但是现在又有goto(8,b)=5,这状态节点8的goto函数表也存在不确定goto函数了。此时,将原有的goto函数表中的goto(2,b)=3视为旧goto函数,将复制后出现的goto(2,b)=5视为新goto函数,将原有状态表中goto(8,b)=9视为旧goto函数,将复制后出现的goto(8,b)=5视为新goto函数。
表5
状态节点 | 输出函数 |
2 | {ab} |
3 | {abb} |
5 | {a?b} |
7 | {a??b} |
10 | {acbc} |
11 | {a?bg} |
接下来,如图3C所示,为第六临时关键字树。该第六临时关键字树中的每个终状态节点对应的输出值如表6所示,即表6为与第六临时关键字树对应的output函数表。将基于新goto函数goto(2,b)=5,即状态节点5所对应的goto函数表复制到状态节点3中,即,状态节点3新增goto(3,g)=11,并去除新goto函数goto(2,b)=5。由于状态节点5是终状态节点,此时可以将状态节点5的output函数也复制到状态节点3中。如果该新增的goto(3,g)=11与状态节点3原有goto函数表发生冲突,则按照上述方法再进行处理。同样,对于状态节点8也是如此处理。
表6
状态节点 | 输出函数 |
2 | {ab} |
3 | {abb,a?b} |
5 | {a?b} |
7 | {a??b} |
9 | {a?b} |
10 | {acbc} |
11 | {a?bg} |
接下来,按照上述方法处理状态节点2,如图3D所示,为状态节点2不存在不确定的下一跳状态节点的第七临时关键字树。该第七临时关键字树中的每个终状态节点对应的输出值如表6所示。
接下来,按照上述方法处理状态节点4,如图3E所示,为状态节点4不存在不确定的下一跳状态节点的第八临时关键字树。该第八临时关键字树中的每个终状态节点对应的输出值如表6所示。
然后,按照上述方法处理状态节点8,如图3F所示,为状态节点8不存在不确定的下一跳状态节点的第九临时关键字树。该第九临时关键字树中的每个终状态节点对应的输出值如表6所示。
对于本实施例而言,当处理完状态节点8之后,整个goto函数表中就不存在不确定的下一跳状态节点。这样,图3F即为最终的关键字树,其所对应的output函数表,即表6,为最终的output函数表。
接着,将特定字符转换为通配符?,该通配符代表256个ASCII码值。然后,再根据去failure算法,最终构造出完成的AC状态机。
根据本实施例的AC状态机的构建方法所形成的AC状态机,能够处理含有两个连续通配符“?”的搜寻模式。
实施例六
本实施例提供一种AC状态机的构建装置。
如图4所示,为根据本实施例的AC状态机的构建装置的结构示意图。该AC状态机的构建装置400包括设定模块401、构建模块402、复制模块403、识别模块404和排除模块405。
其中,设定模块401用于将各搜寻模式中的通配符设置为特定字符;构建模块402与设定模块401连接,用于根据各搜寻模式构建关键字树,关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于特定字符所转移至的状态节点视为通配符节点;复制模块403与构建模块402连接,用于将通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至兄弟状态节点的输入字符为待排除字符,其中,兄弟状态节点为与通配符节点具有同一上层状态节点的状态节点;识别模块404与复制模块403连接,用于当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数,并将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止;排除模块405与识别模块404连接,用于将特定字符转换为通配符,并从通配符中排除兄弟状态节点对应的所有待排除字符。
可选地,各搜寻模式中的字符由ASCII码值表示,特定字符由非ASCII码值的数值表示,例如在ASCII码值范围外的数值。本实施例中的通配符可以为通配符“?”,其个数可以为1个或多个。
本实施例的AC状态机的构建装置400的操作方法如实施例一中的所示,在此不再赘述。
根据本实施例的AC状态机的构建装置400,使AC状态机能够处理含有通配符“?”的搜寻模式,大大增加了AC状态机的应用范围。
实施例七
本实施例对上述实施例的AC状态机的构建装置做进一步说明。
如图5所示,本实施例中的AC状态机的构建装置400还包括识别不确定函数模块501,该识别不确定函数模块501分别与复制模块403和识别模块404连接,用于识别复制goto函数与兄弟状态节点的原有goto函数的各转移函数表达式和转移函数输出值,将转移函数表达式相同,且转移函数输出值不同的转移函数作为不确定goto函数,并将识别结果发送至识别模块404。
可选地,本实施例还包括识别终状态节点模块502,与识别模块404连接,用于判断新goto函数输出值所对应的状态节点是否为终状态节点,当判断结果为是时,将新goto函数输出值所对应的状态节点的output函数表复制到旧goto函数输出值所对应的状态节点的output函数表中,终状态节点为各搜寻模式中最后一个输入字符对应的状态节点。
可选地,本实施例还包括构建AC状态机模块503,该构建AC状态机模块与排除模块405连接,用于根据关键字树和去failure算法构建AC状态机。
本实施例的AC状态机的构建装置400的具体执行方法如上各实施例的AC状态节点的构建方法所述,在此不再赘述。
根据本实施例的AC状态机的构建装置400,通过将通配符设定为特定字符,并通过拆分和复制状态函数表,构造出了能够处理通配符的AC状态机,增加了AC状态机的适用范围。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (14)
1.一种AC状态机的构建方法,其特征在于,包括:
将各搜寻模式中的各通配符设置为特定字符;
根据所述各搜寻模式构建关键字树,所述关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于所述特定字符所转移至的状态节点视为通配符节点;
将所述通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至所述兄弟状态节点的输入字符为待排除字符,其中,所述兄弟状态节点为与所述通配符节点具有同一上层状态节点的状态节点;
当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数;
将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止;
将所述特定字符转换为所述通配符,并从所述通配符中排除所述兄弟状态节点对应的所有待排除字符。
2.根据权利要求1所述的AC状态机的构建方法,其特征在于,各搜寻模式中的确定字符由ASCII码值表示,所述特定字符由非ASCII码值的数值表示。
3.根据权利要求1或2所述的AC状态机的构建方法,其特征在于,识别复制goto函数与兄弟状态节点的原有goto函数存在不确定goto函数包括:
识别复制goto函数与兄弟状态节点的原有goto函数的各转移函数表达式和转移函数输出值;
将转移函数表达式相同,且转移函数输出值不同的转移函数作为不确定goto函数。
4.根据权利要求1所述的AC状态机的构建方法,其特征在于,所述通配符为?。
5.根据权利要求4所述的AC状态机的构建方法,其特征在于,所述搜寻模式中所述通配符的个数为1个或多个。
6.根据权利要求1所述的AC状态机的构建方法,其特征在于,所述将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数之后,且在返回执行上述识别步骤,直至未识别到不确定goto函数为止之前,还包括:
判断所述新goto函数输出值所对应的状态节点是否为终状态节点,当判断结果为是时,将所述新goto函数输出值所对应的状态节点的output函数表复制到旧goto函数输出值所对应的状态节点的output函数表中,所述终状态节点为所述各搜寻模式中最后一个输入字符对应的状态节点。
7.根据权利要求1所述的AC状态机的构建方法,其特征在于,在所述排除所述兄弟状态节点对应的所有待排除字符之后,还包括:
根据所述关键字树和去failure算法构建AC状态机。
8.一种AC状态机的构建装置,其特征在于,包括:
设定模块,用于将各搜寻模式中的通配符设置为特定字符;
构建模块,用于根据所述各搜寻模式构建关键字树,所述关键字树包括各状态节点、各状态节点的goto函数表和output函数表,其中,将基于所述特定字符所转移至的状态节点视为通配符节点;
复制模块,用于将所述通配符节点的goto函数表复制到兄弟状态节点中,并记录转移至所述兄弟状态节点的输入字符为待排除字符,其中,所述兄弟状态节点为与所述通配符节点具有同一上层状态节点的状态节点;
识别模块,用于当识别到复制goto函数表与兄弟状态节点的原有goto函数表存在不确定goto函数时,将复制goto函数表中的不确定goto函数视为新goto函数,原有goto函数表中的不确定goto函数视为旧goto函数,并将新goto函数输出值所对应的状态节点的goto函数表复制到旧goto函数输出值所对应的状态节点的goto函数表中,去除新goto函数,并返回执行上述识别步骤,直至未识别到不确定goto函数为止;
排除模块,用于将所述特定字符转换为所述通配符,并从所述通配符中排除所述兄弟状态节点对应的所有待排除字符。
9.根据权利要求8所述的AC状态机的构建装置,其特征在于,各搜寻模式中的确定字符由ASCII码值表示,所述特定字符由非ASCII码值的数值表示。
10.根据权利要求8或9所述的AC状态机的构建装置,其特征在于,还包括:
识别不确定函数模块,用于识别复制goto函数与兄弟状态节点的原有goto函数的各转移函数表达式和转移函数输出值,将转移函数表达式相同,且转移函数输出值不同的转移函数作为不确定goto函数,并将识别结果发送至所述识别模块。
11.根据权利要求8所述的AC状态机的构建装置,其特征在于,所述通配符为?。
12.根据权利要求11所述的AC状态机的构建装置,其特征在于,所述搜寻模式中所述通配符的个数为1个或多个。
13.根据权利要求8所述的AC状态机的构建装置,其特征在于,还包括:
识别终状态节点模块,用于判断所述新goto函数输出值所对应的状态节点是否为终状态节点,当判断结果为是时,将所述新goto函数输出值所对应的状态节点的output函数表复制到旧goto函数输出值所对应的状态节点的output函数表中,所述终状态节点为所述各搜寻模式中最后一个输入字符对应的状态节点。
14.根据权利要求8所述的AC状态机的构建装置,其特征在于,还包括:
构建AC状态机模块,用于根据所述关键字树和去failure算法构建AC状态机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100380618A CN102646115A (zh) | 2012-02-17 | 2012-02-17 | Ac状态机的构建方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012100380618A CN102646115A (zh) | 2012-02-17 | 2012-02-17 | Ac状态机的构建方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102646115A true CN102646115A (zh) | 2012-08-22 |
Family
ID=46658934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012100380618A Pending CN102646115A (zh) | 2012-02-17 | 2012-02-17 | Ac状态机的构建方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102646115A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714951A (zh) * | 2013-12-13 | 2015-06-17 | 世纪禾光科技发展(北京)有限公司 | 一种并行多模式匹配的方法及系统 |
CN105740400A (zh) * | 2016-01-27 | 2016-07-06 | 北京航空航天大学 | 动态调整多模匹配自动机的方法和装置 |
WO2017161749A1 (zh) * | 2016-03-21 | 2017-09-28 | 乐视控股(北京)有限公司 | 一种信息匹配方法及装置 |
CN107545071A (zh) * | 2017-09-21 | 2018-01-05 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN108133052A (zh) * | 2018-01-18 | 2018-06-08 | 广州汇智通信技术有限公司 | 一种多关键字的搜索方法、系统、介质及设备 |
CN108287887A (zh) * | 2018-01-16 | 2018-07-17 | 北京奇艺世纪科技有限公司 | 一种多模匹配方法和装置 |
CN108304467A (zh) * | 2017-12-27 | 2018-07-20 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN108628966A (zh) * | 2018-04-20 | 2018-10-09 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110007597A (zh) * | 2019-04-01 | 2019-07-12 | 上海电气泰雷兹交通自动化系统有限公司 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
CN110222143A (zh) * | 2019-05-31 | 2019-09-10 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN112650899A (zh) * | 2020-12-30 | 2021-04-13 | 中国平安人寿保险股份有限公司 | 数据可视化渲染方法、装置、计算机设备及存储介质 |
-
2012
- 2012-02-17 CN CN2012100380618A patent/CN102646115A/zh active Pending
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714951A (zh) * | 2013-12-13 | 2015-06-17 | 世纪禾光科技发展(北京)有限公司 | 一种并行多模式匹配的方法及系统 |
CN105740400A (zh) * | 2016-01-27 | 2016-07-06 | 北京航空航天大学 | 动态调整多模匹配自动机的方法和装置 |
CN105740400B (zh) * | 2016-01-27 | 2019-08-06 | 北京航空航天大学 | 动态调整多模匹配自动机的方法和装置 |
WO2017161749A1 (zh) * | 2016-03-21 | 2017-09-28 | 乐视控股(北京)有限公司 | 一种信息匹配方法及装置 |
CN107545071A (zh) * | 2017-09-21 | 2018-01-05 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN107545071B (zh) * | 2017-09-21 | 2020-02-07 | 北京神州泰岳智能数据技术有限公司 | 一种字符串匹配的方法和装置 |
CN108304467A (zh) * | 2017-12-27 | 2018-07-20 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN108304467B (zh) * | 2017-12-27 | 2021-08-10 | 中国银联股份有限公司 | 用于文本间匹配的方法 |
CN108287887A (zh) * | 2018-01-16 | 2018-07-17 | 北京奇艺世纪科技有限公司 | 一种多模匹配方法和装置 |
CN108133052A (zh) * | 2018-01-18 | 2018-06-08 | 广州汇智通信技术有限公司 | 一种多关键字的搜索方法、系统、介质及设备 |
CN110096628A (zh) * | 2018-04-20 | 2019-08-06 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN108628966A (zh) * | 2018-04-20 | 2018-10-09 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110083746A (zh) * | 2018-04-20 | 2019-08-02 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110008385A (zh) * | 2018-04-20 | 2019-07-12 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110083746B (zh) * | 2018-04-20 | 2021-01-22 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN108628966B (zh) * | 2018-04-20 | 2019-06-14 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110008385B (zh) * | 2018-04-20 | 2020-12-22 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110096628B (zh) * | 2018-04-20 | 2021-01-22 | 武汉绿色网络信息服务有限责任公司 | 一种基于字符串的快速匹配识别方法和装置 |
CN110007597A (zh) * | 2019-04-01 | 2019-07-12 | 上海电气泰雷兹交通自动化系统有限公司 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
CN110007597B (zh) * | 2019-04-01 | 2022-04-05 | 上海电气泰雷兹交通自动化系统有限公司 | 状态轮询和事件驱动软件状态机设计模式的优化方法 |
CN110222143A (zh) * | 2019-05-31 | 2019-09-10 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN110222143B (zh) * | 2019-05-31 | 2022-11-04 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN112650899A (zh) * | 2020-12-30 | 2021-04-13 | 中国平安人寿保险股份有限公司 | 数据可视化渲染方法、装置、计算机设备及存储介质 |
CN112650899B (zh) * | 2020-12-30 | 2023-10-03 | 中国平安人寿保险股份有限公司 | 数据可视化渲染方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102646115A (zh) | Ac状态机的构建方法及装置 | |
CN102844759B (zh) | 用于将输入串与正则表达式匹配的设备和方法 | |
CN109885479B (zh) | 基于路径记录截断的软件模糊测试方法及装置 | |
CN102541995B (zh) | 对散列序列矩阵的索引和查询 | |
CN112241481A (zh) | 基于图神经网络的跨模态新闻事件分类方法及系统 | |
CN107066262A (zh) | 源代码文件克隆邻接表合并检测方法 | |
CN108345468B (zh) | 基于树和序列相似度的编程语言代码查重方法 | |
CN107148616A (zh) | 用于分布式版本控制的高效注释系统 | |
CN105824801B (zh) | 一种基于自动机的实体关系快速抽取方法 | |
CN104866471A (zh) | 一种基于局部敏感哈希策略的实例匹配方法 | |
KR20150091521A (ko) | 데이터 정규표현식의 마이닝 방법 및 장치 | |
CN102646123A (zh) | 多模式匹配方法、装置和设备 | |
US20150170040A1 (en) | Method and device for automatically recommending complex objects | |
CN105045808B (zh) | 一种复合规则集匹配方法和系统 | |
Nguyen et al. | BiasedWalk: Biased sampling for representation learning on graphs | |
CN107851003A (zh) | 用于改进程序性能的字段专业化系统和方法 | |
Achichi et al. | Automatic key selection for data linking | |
Upadhyay et al. | Semantic knowledge extraction from research documents | |
CN109800337B (zh) | 一种适用于大字母表的多模式正则匹配算法 | |
CN106021371A (zh) | 一种事件识别方法及系统 | |
Ramesh et al. | Automata-driven indexing of Prolog clauses | |
Chen et al. | Automatic composite wrapper generation for semi-structured biological data based on table structure identification | |
JPH0869476A (ja) | 検索システム | |
CN103294735B (zh) | 基于tcam的确定性有穷状态自动机dfa的匹配方法和装置 | |
CN102725754A (zh) | 一种索引数据处理方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120822 |