一种基于有限状态自动机的字符串匹配方法及装置的制作方法

文档序号:6579980阅读:413来源:国知局

专利名称::一种基于有限状态自动机的字符串匹配方法及装置的制作方法
技术领域
:本发明涉及检索
技术领域
,尤指一种基于有限状态自动机(DeterministicFiniteStateAutomaton,DFA)的字符串匹配方法及装置。
背景技术
:Aho-Corasick算法于1975年由贝尔实验室的Aho和Corasick在《EfficientStringMatching:AnAidtoBibliographicSearch》中提出,其核心是一个涵盖所有查询关4建字的有卩艮4犬态自动才几(DeterministicFiniteStateAutomaton,DFA)。待搜索的数据库中的每个字符逐个输入到DFA中,当某个查询关键字命中,DFA输出报告。通过Aho-Corasick算法得到DFA的过程中,需要构造三个函数GOTO,FAILURE和OUTPUT。构造这三个函数的流程包括1.1构造GOTO函数。该过程需要输入的是要查询的关键字集合。例如输入的关键字集合是K={yl,y2,,yk}。输出的是GOTO函数和部分完成的OUTPUT函数。1.2构造FAILURE函数该过程需要输入的是上述过程1.1中得到的GOTO函数及部分完成的OUTPUT函数。输出的是FAILURE函数和完成的OUTPUT函数。1.3构造OUTPUT函数。该过程将GOTO函数和FAILURE函数进一步合并,得到DFA。所以该过程输入的是上述过程U中得到的GOTO函数及过程1.2中得到的FAILURE函凄t。输出的是构造完成的DFA。DFA中包含了在当前状态、输入字符后所对应的各种可能的下一状态。以及各个状态和命中的关键字的对应关系。当命中某一关4定字时,能够及时的输出命中结果。应用DFA进行字符匹配时,待搜索数据库中的每个字符在DFA中能够触发一次且仅能够触发一次状态转换。所以,Aho-Corasick的算法应用的优势在于其算法复杂度仅与待搜索数据库的长度有关,而与查询关键字的长度及数目都无关。因此,在字符串匹配的各种已有算法中,Aho-Corasick是迄今为止最快的算法。在实际应用过程中,DFA通常以一维数组的形式存放在系统主内存中。虽然系统在运行过程中,CPU会把在最近几个时间段内经常访问的内容存入高速緩存(Cache);高速緩存即高速緩冲存储器,位于CPU和主存储器DRAM(主内存)之间的存储容量较小但速度很高的存储器。但由于高速緩存容量有限,DFA与系统中其他频繁访问CPU的数据之间存在竟争关系,不能保证访问频度高的部分(或全部)DFA总能驻留在一级数据緩存中,当不在緩存中时则必须到内存中去获取。所以当使用DFA搜索数据库或者过滤网络数据流时,最坏情况下,可能会出现每输入一个字节,则必须访问一次主内存,才能得到下一个状态。而访问主内存来获取下一个状态会造成很大的时延,导致字符匹配过程的时延很长,严重影响了匹配的速度和效率。因此,频繁的主内存访问已经成为基于DFA搜索的系统整体性能的瓶颈。
发明内容本发明实施例提供一种基于有限状态自动机的字符串匹配方法及装置,解决现有技术中存在的字符匹配速度慢、时延长的问题。一种基于有限状态自动机的字符串匹配方法,包括确定用户输入的关4建字在设定的关键字组中时,调用所述关4建字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。本发明的上述方法,还包括根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;生成仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。根据本发明的上述方法,所述程序代码仅包含以选取的部分状态作为当前状态,输入字符后所对应的输出状态时;其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。根据本发明的上述方法,所述根据所述输出状态输出字符匹配结果,具体包括根据采用Aho-Comsick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果;当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。根据本发明的上述方法,所述设定的关键字组根据设定时间段内的关键字使用情况的统计结果定期更新;相应的,根据更新后的关键字组,生成对应的DFA程序代码。一种基于有限状态自动机的字符串匹配装置,包括生成模块,用于采用Aho-Comsick算法针对选定的关键字组确定当前状态、输入字符和输出状态的对应关系,并才艮据所述对应关系预先生成有限状态自动机DFA程序代码;调用^t块,用于确定用户输入的关键字在所述关^t字组中,调用所述生成模块生成的与所述关键字组对应的DFA程序代码;执行模块,用于执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;输出模块,用于根据所述输出状态输出字符匹配结果。本发明的上述装置,还包括选取模块,用于才艮据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;所述生成模块,具体用于生成仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。冲艮据本发明的上述装置,所述执行模块,还用于当所述生成模块所生成的程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。根据本发明的上述装置,所述输出模块,具体包括查询单元,用于根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果;输出单元,用于当确定所述字符匹配结果为某个关4建字命中时,输出字符匹配结果;否则无输出。本发明的上述装置,还包括更新模块,用于根据设定时间段内的关键字使用情况的统计结果定期更新所述设定的关键字组;相应的,所述生成模块,还用于根据更新后的关键字组,生成对应的DFA程序代码。一种内容过滤设备,在该内容过滤设备中设置上述的基于有限状态自动机的字符串匹配装置。确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。将采用Aho-Corasick算法针对所述关键字组得到的DFA采用程序代码的形式存放,在需要进行字符匹配时,能够确保待执行的程序存在于一级指令緩存中,而不必再去访问系统内存,减少了系统处理时延,提高了字符匹配的速度和效率图1为本发明实施例中基于有限状态自动机的字符串匹配方法的流程图;图2为本发明实施例中字符串匹配装置的结构示意图。具体实施例方式由于目前所有主流处理器大都具有一级緩存和二级緩存,少数高端处理器还集成了三级緩存。其中,一级緩存是封闭在CPU芯片内部的高速緩存,其存取速度与CPU主频一致。一级緩存中可以暂时存储CPU运算时的即将使用的各类运算操作指令和运算所需的数据,以便向CPU递送。即一级緩存包括一级指令緩存和一级数据緩存。二级緩存是一级緩存的緩冲器,在CPU外部,其作用就是存储CPU处理时需要用到的、一级緩存又无法存储的数据。同理,三级緩存和内存可以看作是二级緩存的緩冲器。二级緩存、三级緩存和内存都不能存储CPU操作指令。而一次一级緩存访问的时延开销是一次主内存访问的十分之一,甚至几十分之一。所以,一级緩存越大,可以暂存的数据越多,CPU的运算速度也可以越快。基于上述情况,本申请实施例提供一种基于有限状态自动机的字符串匹配方法,将采用Aho-Corasick算法得到DFA编译为程序代码存放,当需要时可以直接调用。由于待执行的程序代码可以被预读到一级緩存中(具体为预读到一级指令緩存中),从而实现有效减少时延的目的。该方法流程如图1所示,执行步骤如下步骤S101:根据确定出的关键字组,采用Aho-Corasick算法确定当前状态、输入字符和输出状态的对应关系,以及输出状态与命中结果的对应关系。根据设定时间段内的关键字使用情况的统计结果确定关键字组,关键字组中一般可以包括该短时间内搜索频率比较高的关键字。采用Aho-Corasick算法对设定的关键字组进行运算,得到针对该关键字组的对应关系表,其中包括在当前状态下输入各个字符,所分别对应的输出状态。以及各输出状态所对应的字符匹配结果(即输出结果)。例如确定出的关键字组包括HE,SHE,HIS和HERS四个关键字。则在
背景技术
中所述的过程1.1中输入K-(HE,SHE,HIS,HERS},经过步骤1.1、1.2、1.3的构建过程,得到输入前状态(即当前状态)、输入字符与对应输出的输出状态的对应关系如表1所示。表1<table>tableseeoriginaldocumentpage10</column></row><table><table>tableseeoriginaldocumentpage11</column></row><table>各输出状态所对应的字符匹配结果如表2所示'<table>tableseeoriginaldocumentpage11</column></row><table>2HE命中5SHE,HE命中7HIS命中9HERS命中其他状态无命中也就是说,当对待搜索数据库中的每个字符逐一输入该DFA时,按照上述表l中包含的对应关系,得到输入字符和当前状态所对应的下一状态(输出状态)。当输入某个字符后,得到的下一状态对应的是命中某一关键字时,则如表2所示,输出字符匹配结果,其他状态则无输出。以上述表l为例。如果以一维数组形式存放在系统主内存,可以按各当前状态的状态序号的大小顺序存放。当DFA的状态总数不超过256时,状态序号也就不会大于255(即DFA中任一状态的状态序号均可使用一个字节来存放);同时每个状态对应的下一状态(即每个当前状态所对应的输出状态)不会超过255个,所以每个状态占用256(ASCII字符表的字符总数)个字节即可,其中该状态的序号存放在该状态所占用的第0个字节中,所对应的下一状态依次存放在所占用的第0-255字节中。则在每个状态(当前状态)下,当输入字符N(十进制值)时所对应的下一状态(输出状态)存储在从起始位置之后的第N(0=<N<=255)个字节中。假设当前状态X所占用的第M、N个字节的值分别为A和B,而其他字节的值为0;表示当DFA的当前状态为X时;输入M,跳转到状态A;输入N,跳转到状态B,输入其他字节跳转到初始状态0。以状态0为例,在其占用的256个字节中,第72字节的值为1,表示输入H(H字符的十进制值是72),DFA从状态"0",进入状态"1";第83字节的值为3,表示输入S(S字符的十进制值是83),DFA从状态"0",进入状态"3";其余字节的值均为0,表示输入其他字符,DFA维持"0"状态不变。如果有限状态自动机的状态总数不超过256,那么如上所述每个状态在内存肿占用的存《诸空间就是256个字节;当状态总数超过256,假设是300,那么存储一个状态的序号就需要两个字节,这种情况下,每个状态占用的字节数则为256x2。f支^L系统内存中用于存储有限状态自动机的起始地址是ADD,当在状态Z下llT入字符M(对应数值77)时,对应的跳转目的状态就可以从ADD[Zx(256*2)十77]这个地址处获取。有限状态自动机在系统初始化在内存后,在系统运行过程中是不变的。把构造出来的有限状态自动机应用于网络报文过滤,每个网络报文流当前在有限状态自动机中所处的状态是分别记录的,每输入一个字符,从ADD[当前状态x(256*2)+输入字符数值]地址处即可以获得跳转目的状态。假设DFA当前状态为X,输入字符的十进制值为N,该DFA—维数组在系统主内存的存》t^始地址为DFA一ADDR,则在当前状态X下输入字符N后的下一状态为》也iitDFA—ADDR[X*256+N]处的值。步骤S102-.冲艮^^居上述确定出的当前状态、输入字符和输出状态的对应关系,预先生成对应的DFA程序代码。由于采用一维数组的形式存放DFA在实际应用过程中会严重影响字符匹配的速度和效率,所以本申请中将采用Aho-Corasick算法确定出的、针对选定的关键字组的当前状态、输入字符和输出状态的对应关系进行编译,得到对应的DFA程序代石马,并以程序代码的形式存放。得到DFA考呈序代码具体可以包括下列两种情况(1)根据上述确定出的针对选定关键字组的所有当前状态、输入字符和输出状态的对应关系,生成包含所有对应关系的DFA程序代码,并存放。(2)根据禾呈序代码的允许大小,选取上述步骤S101中确定出的DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈d直;即只生成包含部分状态对应关系的DFA程序代码。生成的DFA程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态。此时,其余未^皮选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。由于以程序代码形式存放DFA的前提条件是程序代码所占用的存储空间不能超过系统指令空间的大小,因此由于系统指令空间的限制,则可以只选取出现频度较高的几个关联状态编译进程序代码,其他状态仍然从系统主内存读取,即如情况(2)所述的做法,以避免所生成的DFA程序代码过大。沿用上述例子,仍以表l所示的DFA为例,在实际字符匹配应用过程中,包括进行文本检索或网络数据流过滤等。该DFA在大部分情况下处于初始状态"0",只有当出现'H,或'S,字符,才触发DFA进入状态"1"或"3"。其出现频度最最高的是状态"0",状态'T,和状态"3";其次,状态"2"和状态"6"再次;所以可只选取状态"0"、状态"1"和状态"3"(状态"7"、"9"与状态"3"重合)生成对应的DFA程序代码并存放。假设采用的美国信息交换标准代码(AmericanStandardCodeforInformationInterchange,ASCII)字符总数为256。如表1所示的,DFA初始状态为0。在进行字符匹配输入的过程中,除了H和S外,其他ASCII字符输入都不会触发DFA改变状态;也就是说,在整个处理过程中,状态"0"的存在概率为(256-2)/256;出现状态T且后续状态为"0"、T、"3"三个状态之一(即以状态"1"为当前状态时,输入字符后出现状态"0"、T、"3"的概率)的概率为1/256*(256-2)/256;出现状态"3"且后续状态为"0"、T、"3"状态之一(即以状态"3"为当前状态时,输入字符后出现状态"0"、"1"、"3"的概率)的概率为1/256*(256-1)/256。也就是说,只选取输入状态为"0"、"1"、"3",生成程序代码并存放以供调用,就足以保证99.7%以上的字符输入处理不必访问系统主内存。只有剩余不到0.3%的系统主内存访问概率,而且也不一定要访问,因此对系统整体能的影响也是微乎其微的。例如生成的DFA的程序代码(例如类C代/马)可以如下:switch(当前状态){case0:switch(输入字符){caseH:下一状态=1;goto—done;caseS:下一状态=3;goto—done;default:下一状态=0;goto—done;case1:switch(输入字符){caseE):下一状态caseI:H:caseS:default:goto—done;下一状态=goto—done;下一状态=goto—done;下一状态=goto—done;下一状态=goto—donej2;6;1;0;case3cas6了case9switch(输入字符){caseH:下一状态=goto—done;4;caseS:下一状态=3;goto—done;default:下一状态=0;goto—done;Default:下一状态=DFA—ADDR[当前状态*256+输入字符的十进制值];Goto_done;done:上述以程序代码的形式存放DFA的实现方式,在统计出的关键字组发生更改(包括增加、减少、替换等)时,都需要重新生成新的DFA程序代码,其灵活性相对降低,但能够大大提高了系统性能。由于长期的统计规律中,常用关键字组成的关键字组一般比较恒定,因此,使用该方式能够满足极高的过滤速度的需求。也就是说,上述步骤SIOI、S102为预处理步骤,生成程序代码的过程并不需要每次进行字符匹配时都执行一次,只需要定期更新即可,即在更新关键字组后更新。而关^l建字组一艮据统计结果确定。当需要进行字符匹配时,执行下面的步骤步骤S103:确定用户输入的关键字在设定的关键字组中时,调用该关键字组对应的DFA程序代码。当用户需要进行搜索时,会输入其要搜索的关键字。若用户输入的关键字属于设定的关键字组中的关键字,则会调用对应的DFA程序代码。沿用上边的例子,调用上述给出的类C程序代码。由于在系统程序运行过程中,一般程序代码的执行会将当前执行的程序代码的临近代码,即将执行的后续程序代码预读到一级指令緩存中。本发明实施例中存放的包含访问概率较高的部分状态的DFA程序代码或包含全部状态的程序代码,在调用和执行程序时,其即将执行的部分可以被预读取到一级指令緩存中;因此,有效的保证了每次字符输入时所需要执行的程序均存在于一级緩存中,从而避免了访问主内存,消除了访问主内存的时延。步骤S104:执行调用的程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态。其中,输出状态即为下次输入字符时的当前状态。调用程序代码后,在执行程序的过程中,会将待搜索数据库中的所以字符逐一遍历,并在每次输入一个字符后,跳转到相应的l命出状态,并以该状态为继续执行该状态对应的的程序语句。当某此输出结果对应某个关4定字命中时,输出字符匹配结果,否则可以不输出任何信息。沿用上边的例子,调用上述存储的程序代码后,DFA初始状态(即当前状态)为状态"0";若输入'H,字符,则DFA改变为状态"1";若输入为'S,字符,则改变为状态"3";若输入其他字符,则仍保持状态"0"不变。当DFA改变为状态"1"(即当前状态为状态"1")后,若继续输入的字符为E,则DFA改变为状态"2"。例如当待搜索的数据库中包含有字符串"SHISHE,,时,则这六个字符将按顺序逐个输入DFA中。DFA的初始状态为状态"0",输入字符'S,后,DFA的状态改变为状态"3";输入字符'H,后,DFA的状态改变为状态"4";输入字符T后,DFA的状态改变为状态"6";输入字符'S'后,DFA的状态改变为状态"7",并输出"fflS命中,,;接着输入字符'H,,使DFA的状态改变为状态"4";再输入字符'E,,使DFA的状态改变为状态"5",并输出"SHE,HE命中"。步骤S105:根据输出状态输出字符匹配结果。沿用上边的例子,当输出状态为状态"2",将输出状态"2"所对应的输出结果"HE命中"输出。同理,当输出状态为状态"7",将输出状态"7"所对应的输出结果"HIS命中"输出;当输出状态为状态"5",将输出状态"5"所对应的输出结果"SHE,HE命中"输出。较佳的,在实际应用过程中,可以定期的设定时间段内的关键字使用情况的统计结果更新设定的关键字组,相应的,在更新关键字组后,重新生成当前状态、输入字符与输出状态的对应关系,以及输出状态与字符匹配结果的对应关系,并对应更新DFA程序代码。使得DFA能够更有效地搜索到最常用的关键字。以构建一种基于有限状态自动机的字符串匹配装置。如图2所示,包括生成模块IO、调用模块20、执行模块30和输出模块40。生成模块10,用于采用Aho-Corasick算法针对选定的关键字组确定当前状态、输入字符和输出状态的对应关系,并根据确定出的对应关系预先生成有限状态自动机DFA程序代码。调用模块20,用于确定用户输入的关键字在上述选定的关4走字组中,调用生成模块10生成的与该关4定字组对应的DFA程序代码。执行模块30,用于执行调用模块20调用的程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;其中,输出状态即为下次输入字符时的当前状态。输出模块40,用于根据执行模块30确定出的输出状态输出字符匹配结果。较佳的,上述输出模块40,进一步还可以包括查询单元401和输出单元402。查询单元401,用于根据根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询执行单元30确定出的输出状态所对应的字符匹配结果。输出单元402,用于当确定查询单元401查询到的字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。上述基于有限状态自动机的字符串匹配装置,还包括选取^t块50,用于根据程序代码的允许大小,选取生成的DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;。相应的,生成模块10,具体用于根据确定模块50选取的部分状态生成DFA程序代码,其中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态。上述执行模块30,还用于当生成模块IO所生成的程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。上述基于有限状态自动机的字符串匹配装置,还包括更新模块60,用于根据设定时间段内的关键字使用情况的统计结果定期更新设定的关键字组。相应的,生成模块10,还用于根据更新后的关键字组,生成对应的DFA程序代码。本发明实施例还提供了一种内容过滤设备,所述内容过滤设备中设置有上述基于有限状态自动机的字符串匹配装置,该内容过滤设备可以是具有内容过滤功能的路由器、交换机、网关或防火墙等等。通过将采用Aho-Corasick算法针对所述关键字组得到的DFA采用程序代码的形式存放,在需要进行字符匹配时,能够确保待执行的程序存在于一级指令緩存中,即CPU总是能够在一级指令緩存中获取到将要执行的部分或全部的DFA,而不必再去访问系统内存,消除了以一维数组形式在系统主内存中存放DFA时,由于频繁访问主内存的时延很大所带来的系统性能瓶颈,减少了系统处理时延,提高了字符匹配的速度和效率。本申请的上述技术方案将Aho-Corasick算法在文本检索、字符串匹配和网络数据流过滤等领域实际应用时的处理能力,尤其是处理速度,提高了一个数量级。由于当前的主流处理器都釆用系统主存辅以多级緩存的架构,因此,本申请的技术方案具有普遍适用性。以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到的变化、替换或应用到其他类似的装置,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。权利要求1、一种基于有限状态自动机的字符串匹配方法,其特征在于,包括确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。2、如权利要求1所述的方法,其特征在于,还包括根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;生成仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。3、如权利要求2所述的方法,其特征在于,所述程序代码仅包含以选取的部分状态作为当前状态,输入字符后所对应的输出状态时;其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。4、如权利要求1所述的方法,其特征在于,所述根据所述输出状态输出字符匹配结果,具体包括根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述^T出状态所对应的字符匹配结果;当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。5、如权利要求1-4任一所述的方法,其特征在于,所述设定的关4建字组根据设定时间段内的关键字使用情况的统计结果定期更新;相应的,根据更新后的关键字组,生成对应的DFA程序代码。6、一种基于有限状态自动机的字符串匹配装置,其特征在于,包括生成才莫块,用于采用Aho-Corasick算法针对选定的关4定字组确定当前状态、输入字符和输出状态的对应关系,并才艮据所述对应关系预先生成有限状态自动机DFA程序^码;调用模块,用于确定用户输入的关键字在所述关键字组中,调用所述生成才莫块生成的与所述关4建字组对应的DFA程序代码;执行模块,用于执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;输出模块,用于根据所述输出状态输出字符匹配结果。7、如权利要求6所述的装置,其特征在于,还包括选取模块,用于根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;所述生成模块,具体用于生成仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。8、如权利要求7所述的装置,其特征在于,所述执行才莫块,还用于当所述生成模块所生成的程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。9、如权利要求6所述的装置,其特征在于,所述输出模块,具体包括查询单元,用于根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果;输出单元,用于当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无iTlr出。10、如权利要求6-9任一所述的装置,其特征在于,还包括更新模块,用于根据设定时间段内的关键字使用情况的统计结果定期更新所述设定的关键字组;相应的,所述生成模块,还用于根据更新后的关键字组,生成对应的DFA程序代码。11、一种内容过滤设备,其特征在于,在该内容过滤设备中设置如权利要求6-10任一所述的基于有限状态自动机的字符串匹配装置。全文摘要本发明公开了一种基于有限状态自动机的字符串匹配方法及装置,该方法包括确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。上述方法,采用程序代码的形式存放DFA,减少了系统处理时延,提高了字符匹配的速度和效率。文档编号G06F17/30GK101639861SQ20091016729公开日2010年2月3日申请日期2009年9月2日优先权日2009年9月2日发明者黄凯明申请人:福建星网锐捷网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1