CN101639861B - 一种基于有限状态自动机的字符串匹配方法及装置 - Google Patents

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

Info

Publication number
CN101639861B
CN101639861B CN2009101672927A CN200910167292A CN101639861B CN 101639861 B CN101639861 B CN 101639861B CN 2009101672927 A CN2009101672927 A CN 2009101672927A CN 200910167292 A CN200910167292 A CN 200910167292A CN 101639861 B CN101639861 B CN 101639861B
Authority
CN
China
Prior art keywords
state
character
output
program code
dfa
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.)
Active
Application number
CN2009101672927A
Other languages
English (en)
Other versions
CN101639861A (zh
Inventor
黄凯明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Zhigu Tech Co Ltd
Original Assignee
Fujian Star Net Communication Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujian Star Net Communication Co Ltd filed Critical Fujian Star Net Communication Co Ltd
Priority to CN2009101672927A priority Critical patent/CN101639861B/zh
Publication of CN101639861A publication Critical patent/CN101639861A/zh
Application granted granted Critical
Publication of CN101639861B publication Critical patent/CN101639861B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于有限状态自动机的字符串匹配方法及装置,该方法包括:确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的;执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;根据所述输出状态输出字符匹配结果。上述方法,采用程序代码的形式存放DFA,减少了系统处理时延,提高了字符匹配的速度和效率。

Description

一种基于有限状态自动机的字符串匹配方法及装置
技术领域
本发明涉及检索技术领域,尤指一种基于有限状态自动机(DeterministicFinite State Automaton,DFA)的字符串匹配方法及装置。 
背景技术
Aho-Corasick算法于1975年由贝尔实验室的Aho和Corasick在《EfficientString Matching:An Aid to Bibliographic Search》中提出,其核心是一个涵盖所有查询关键字的有限状态自动机(Deterministic Finite State Automaton,DFA)。待搜索的数据库中的每个字符逐个输入到DFA中,当某个查询关键字命中,DFA输出报告。 
通过Aho-Corasick算法得到DFA的过程中,需要构造三个函数:GOTO,FAILURE和OUTPUT。构造这三个函数的流程包括: 
1.1构造GOTO函数。 
该过程需要输入的是:要查询的关键字集合。例如:输入的关键字集合是K={y1,y2,…,yk}。 
输出的是:GOTO函数和部分完成的OUTPUT函数。 
1.2构造FAILURE函数 
该过程需要输入的是:上述过程1.1中得到的GOTO函数及部分完成的OUTPUT函数。 
输出的是:FAILURE函数和完成的OUTPUT函数。 
1.3构造OUTPUT函数。 
该过程将GOTO函数和FAILURE函数进一步合并,得到DFA。 
所以该过程输入的是:上述过程1.1中得到的GOTO函数及过程1.2中得 到的FAILURE函数。 
输出的是:构造完成的DFA。 
DFA中包含了在当前状态、输入字符后所对应的各种可能的下一状态。以及各个状态和命中的关键字的对应关系。当命中某一关键字时,能够及时的输出命中结果。 
应用DFA进行字符匹配时,待搜索数据库中的每个字符在DFA中能够触发一次且仅能够触发一次状态转换。所以,Aho-Corasick的算法应用的优势在于其算法复杂度仅与待搜索数据库的长度有关,而与查询关键字的长度及数目都无关。因此,在字符串匹配的各种已有算法中,Aho-Corasick是迄今为止最快的算法。 
在实际应用过程中,DFA通常以一维数组的形式存放在系统主内存中。虽然系统在运行过程中,CPU会把在最近几个时间段内经常访问的内容存入高速缓存(Cache);高速缓存即高速缓冲存储器,位于CPU和主存储器DRAM(主内存)之间的存储容量较小但速度很高的存储器。但由于高速缓存容量有限,DFA与系统中其他频繁访问CPU的数据之间存在竞争关系,不能保证访问频度高的部分(或全部)DFA总能驻留在一级数据缓存中,当不在缓存中时则必须到内存中去获取。 
所以当使用DFA搜索数据库或者过滤网络数据流时,最坏情况下,可能会出现每输入一个字节,则必须访问一次主内存,才能得到下一个状态。而访问主内存来获取下一个状态会造成很大的时延,导致字符匹配过程的时延很长,严重影响了匹配的速度和效率。因此,频繁的主内存访问已经成为基于DFA搜索的系统整体性能的瓶颈。 
发明内容
本发明实施例提供一种基于有限状态自动机的字符串匹配方法及装置,解决现有技术中存在的字符匹配速度慢、时延长的问题。 
一种用于内容过滤设备的基于有限状态自动机的字符串匹配方法,包括: 
确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码;所述程序代码为根据采用Aho-Corasick算法针对所述关键字组确定的当前状态、输入字符和输出状态的对应关系预先生成的; 
执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态; 
根据所述输出状态输出字符匹配结果。 
本发明的上述方法,还包括:根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值; 
生成仅包含已选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。 
根据本发明的上述方法,所述程序代码仅包含已选取的部分状态作为当前状态,输入字符后所对应的输出状态时;其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。 
根据本发明的上述方法,所述根据所述输出状态输出字符匹配结果,具体包括: 
根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果; 
当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。 
根据本发明的上述方法,所述设定的关键字组根据设定时间段内的关键字使用情况的统计结果定期更新; 
相应的,根据更新后的关键字组,生成对应的DFA程序代码。 
一种用于内容过滤设备的基于有限状态自动机的字符串匹配装置,包括: 
生成模块,用于采用Aho-Corasick算法针对选定的关键字组确定当前状态、输入字符和输出状态的对应关系,并根据所述对应关系预先生成有限状态自动机DFA程序代码; 
调用模块,用于确定用户输入的关键字在所述关键字组中,调用所述生成模块生成的与所述关键字组对应的DFA程序代码; 
执行模块,用于执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态; 
输出模块,用于根据所述输出状态输出字符匹配结果。 
本发明的上述装置,还包括:选取模块,用于根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值; 
所述生成模块,具体用于生成仅包含已选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码。 
根据本发明的上述装置,所述执行模块,还用于: 
当所述生成模块所生成的程序代码中仅包含已选取的部分状态作为当前状态,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。 
根据本发明的上述装置,所述输出模块,具体包括: 
查询单元,用于根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果; 
输出单元,用于当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。 
本发明的上述装置,还包括: 
更新模块,用于根据设定时间段内的关键字使用情况的统计结果定期更新所述设定的关键字组; 
相应的,所述生成模块,还用于根据更新后的关键字组,生成对应的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 
  当前状态   输入字符   输出状态
  0   H   1
  0   S   3
  0   其他字符   0
  1   E   2
  1   I   6
  1   H   1
  1   S   3
  1   其他字符   0
  3,7,9   H   4
  3,7,9   S   3
  3,7,9   其他字符   0
  2,5   R   8
  2,5   H   1
  2,5   S   3
  2,5   其他字符   0
  6   S   7
  6   H   1
  6   其他字符   0
  4   E   5
  4   I   6
  4   H   1
  4   S   3
  4   其他字符   0
  8   S   9
  8   H   1
  8   其他字符   0
各输出状态所对应的字符匹配结果如表2所示。 
            表2 
  输出状态   字符匹配结果
  2   HE命中
  5   SHE,HE命中
  7   HIS命中
  9   HERS命中
  其他状态   无命中
也就是说,当对待搜索数据库中的每个字符逐一输入该DFA时,按照上述表1中包含的对应关系,得到输入字符和当前状态所对应的下一状态(输出状态)。当输入某个字符后,得到的下一状态对应的是命中某一关键字时,则如表2所示,输出字符匹配结果,其他状态则无输出。 
以上述表1为例。如果以一维数组形式存放在系统主内存,可以按各当前状态的状态序号的大小顺序存放。 
当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,那么存储一个状态的序号就需要两个字节,这种情况下,每个状态占用的字节数则为256×2。假设系统内存中用于存储有限状态自动机的起始地址是ADD,当在状态Z下输入字符M(对应数值77)时,对应的跳转目的状态就可以从ADD[Z×(256*2)+77]这个地址处获取。 
有限状态自动机在系统初始化在内存后,在系统运行过程中是不变的。把构造出来的有限状态自动机应用于网络报文过滤,每个网络报文流当前在有限状态自动机中所处的状态是分别记录的,每输入一个字符,从ADD[当前状态×(256*2)+输入字符数值]地址处即可以获得跳转目的状态。 
假设DFA当前状态为X,输入字符的十进制值为N,该DFA一维数组在系统主内存的存放起始地址为DFA_ADDR,则在当前状态X下输入字符N后的下一状态为地址DFA_ADDR[X*256+N]处的值。 
步骤S102:根据上述确定出的当前状态、输入字符和输出状态的对应关系,预先生成对应的DFA程序代码。 
由于采用一维数组的形式存放DFA在实际应用过程中会严重影响字符匹配的速度和效率,所以本申请中将采用Aho-Corasick算法确定出的、针对选定的关键字组的当前状态、输入字符和输出状态的对应关系进行编译,得到对应的DFA程序代码,并以程序代码的形式存放。 
得到DFA程序代码具体可以包括下列两种情况: 
(1)根据上述确定出的针对选定关键字组的所有当前状态、输入字符和输出状态的对应关系,生成包含所有对应关系的DFA程序代码,并存放。 
(2)根据程序代码的允许大小,选取上述步骤S101中确定出的DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;即只生成包含部分状态对应关系的DFA程序代码。 
生成的DFA程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态。此时,其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。 
由于以程序代码形式存放DFA的前提条件是程序代码所占用的存储空间不能超过系统指令空间的大小,因此由于系统指令空间的限制,则可以只选取出现频度较高的几个关联状态编译进程序代码,其他状态仍然从系统主内存读取,即如情况(2)所述的做法,以避免所生成的DFA程序代码过大。 
沿用上述例子,仍以表1所示的DFA为例,在实际字符匹配应用过程中,包括进行文本检索或网络数据流过滤等。该DFA在大部分情况下处于初始状态“0”,只有当出现‘H’或‘S’字符,才触发DFA进入状态“1”或“3”。其出现频度最最高的是状态“0”,状态“1”和状态“3”;其次,状态“2”和状态“6”再次;所以可只选取状态“0”、状态“1”和状态“3”(状态“7”、“9”与状态“3”重合)生成对应的DFA程序代码并存放。 
假设采用的美国信息交换标准代码(American Standard Code forInformation Interchange,ASCII)字符总数为256。如表1所示的,DFA初始状态为0。在进行字符匹配输入的过程中,除了H和S外,其他ASCII字符输入都不会触发DFA改变状态;也就是说,在整个处理过程中,状态“0”的存在概率为(256-2)/256;出现状态“1”且后续状态为“0”、“1”、“3”三个状态之一(即以状态“1”为当前状态时,输入字符后出现状态“0”、“1”、“3”的概率)的概率为:1/256*(256-2)/256;出现状态“3”且后续状态为“0”、“1”、“3”状态之一(即以状态“3”为当前状态时,输入字符后出现状态“0”、“1”、“3”的概率)的概率为:1/256*(256-1)/256。 
也就是说,只选取输入状态为“0”、“1”、“3”,生成程序代码并存放以供调用,就足以保证99.7%以上的字符输入处理不必访问系统主内存。只有剩余不到0.3%的系统主内存访问概率,而且也不一定要访问,因此对系统整体性能的影响也是微乎其微的。 例如:生成的DFA的程序代码(例如:类C代码)可以如下: 
switch(当前状态){ 
    case 0:switch(输入字符){ 
                 case  H:下一状态=1; 
                         goto_done; 
                 case  S:下一状态=3; 
                         goto_done; 
                 default:下一状态=0; 
                         goto_done; 
    case 1:sWitch(输入字符){ 
                 case  E:下一状态=2; 
                         goto_done; 
                 case  I:下一状态=6; 
                         goto_done; 
                 case  H:下一状态=1; 
                         goto_done; 
                 case  S:下一状态=3; 
                         goto_done; 
                 default:下一状态=0; 
                         goto_done; 
    case 3: 
    case 7: 
    case 9: 
             switch(输入字符){ 
                 case  H:下一状态=4; 
                         goto_done; 
                 case  S:下一状态=3; 
                         goto_done; 
                 default:下一状态=0; 
                          goto_done; 
Default:下一状态=DFA_ADDR[当前状态*256+输入字符的十进制值]; 
                 Goto_done; 
_done: 
…… 
上述以程序代码的形式存放DFA的实现方式,在统计出的关键字组发生更改(包括增加、减少、替换等)时,都需要重新生成新的DFA程序代码,其灵活性相对降低,但能够大大提高了系统性能。由于长期的统计规律中,常用关键字组成的关键字组一般比较恒定,因此,使用该方式能够满足极高的过滤速度的需求。 
也就是说,上述步骤S101、S102为预处理步骤,生成程序代码的过程并不需要每次进行字符匹配时都执行一次,只需要定期更新即可,即在更新关键字组后更新。而关键字组根据统计结果确定。 
当需要进行字符匹配时,执行下面的步骤: 
步骤S103:确定用户输入的关键字在设定的关键字组中时,调用该关键字组对应的DFA程序代码。 
当用户需要进行搜索时,会输入其要搜索的关键字。若用户输入的关键字属于设定的关键字组中的关键字,则会调用对应的DFA程序代码。 
沿用上边的例子,调用上述给出的类C程序代码。 
由于在系统程序运行过程中,一般程序代码的执行会将当前执行的程序代 码的临近代码,即将执行的后续程序代码预读到一级指令缓存中。本发明实施例中存放的包含访问概率较高的部分状态的DFA程序代码或包含全部状态的程序代码,在调用和执行程序时,其即将执行的部分可以被预读取到一级指令缓存中;因此,有效的保证了每次字符输入时所需要执行的程序均存在于一级缓存中,从而避免了访问主内存,消除了访问主内存的时延。 
步骤S104:执行调用的程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态。其中,输出状态即为下次输入字符时的当前状态。 
调用程序代码后,在执行程序的过程中,会将待搜索数据库中的所以字符逐一遍历,并在每次输入一个字符后,跳转到相应的输出状态,并以该状态为继续执行该状态对应的的程序语句。当某此输出结果对应某个关键字命中时,输出字符匹配结果,否则可以不输出任何信息。 
沿用上边的例子,调用上述存储的程序代码后,DFA初始状态(即当前状态)为状态“0”;若输入‘H’字符,则DFA改变为状态“1”;若输入为‘S’字符,则改变为状态“3”;若输入其他字符,则仍保持状态“0”不变。当DFA改变为状态“1”(即当前状态为状态“1”)后,若继续输入的字符为E,则DFA改变为状态“2”。 
例如:当待搜索的数据库中包含有字符串“SHISHE”时,则这六个字符将按顺序逐个输入DFA中。DFA的初始状态为状态“0”,输入字符‘S’后,DFA的状态改变为状态“3”;输入字符‘H’后,DFA的状态改变为状态“4”;输入字符‘I’后,DFA的状态改变为状态“6”;输入字符‘S’后,DFA的状态改变为状态“7”,并输出“HIS命中”;接着输入字符‘H’,使DFA的状态改变为状态“4”;再输入字符‘E’,使DFA的状态改变为状态“5”,并输出“SHE,HE命中”。 
步骤S105:根据输出状态输出字符匹配结果。 
沿用上边的例子,当输出状态为状态“2”,将输出状态“2”所对应的输 出结果“HE命中”输出。 
同理,当输出状态为状态“7”,将输出状态“7”所对应的输出结果“HIS命中”输出;当输出状态为状态“5”,将输出状态“5”所对应的输出结果“SHE,HE命中”输出。 
较佳的,在实际应用过程中,可以定期的设定时间段内的关键字使用情况的统计结果更新设定的关键字组,相应的,在更新关键字组后,重新生成当前状态、输入字符与输出状态的对应关系,以及输出状态与字符匹配结果的对应关系,并对应更新DFA程序代码。使得DFA能够更有效地搜索到最常用的关键字。 
根据本发明实施例提供的上述基于有限状态自动机的字符串匹配方法,可以构建一种基于有限状态自动机的字符串匹配装置。如图2所示,包括:生成模块10、调用模块20、执行模块30和输出模块40。 
生成模块10,用于采用Aho-Corasick算法针对选定的关键字组确定当前状态、输入字符和输出状态的对应关系,并根据确定出的对应关系预先生成有限状态自动机DFA程序代码。 
调用模块20,用于确定用户输入的关键字在上述选定的关键字组中,调用生成模块10生成的与该关键字组对应的DFA程序代码。 
执行模块30,用于执行调用模块20调用的程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;其中,输出状态即为下次输入字符时的当前状态。 
输出模块40,用于根据执行模块30确定出的输出状态输出字符匹配结果。 
较佳的,上述输出模块40,进一步还可以包括:查询单元401和输出单元402。 
查询单元401,用于根据根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询执行单元30确定出的输出状态所对应的字符匹配结果。 
输出单元402,用于当确定查询单元401查询到的字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。 
上述基于有限状态自动机的字符串匹配装置,还包括:选取模块50,用于根据程序代码的允许大小,选取生成的DFA中包含的与初始状态具有衍生关系的部分状态,所选取的部分状态的出现频率之和大于设定的阈值;。 
相应的,生成模块10,具体用于根据确定模块50选取的部分状态生成DFA程序代码,其中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态。 
上述执行模块30,还用于:当生成模块10所生成的程序代码中仅包含以选取的部分状态作为当前状态时,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。 
上述基于有限状态自动机的字符串匹配装置,还包括:更新模块60,用于根据设定时间段内的关键字使用情况的统计结果定期更新设定的关键字组。 
相应的,生成模块10,还用于根据更新后的关键字组,生成对应的DFA程序代码。 
本发明实施例还提供了一种内容过滤设备,所述内容过滤设备中设置有上述基于有限状态自动机的字符串匹配装置,该内容过滤设备可以是具有内容过滤功能的路由器、交换机、网关或防火墙等等。 
本发明实施例提供的上述基于有限状态自动机的字符串匹配方法及装置,通过将采用Aho-Corasick算法针对所述关键字组得到的DFA采用程序代码的形式存放,在需要进行字符匹配时,能够确保待执行的程序存在于一级指令缓存中,即CPU总是能够在一级指令缓存中获取到将要执行的部分或全部的DFA,而不必再去访问系统内存,消除了以一维数组形式在系统主内存中存放DFA时,由于频繁访问主内存的时延很大所带来的系统性能瓶颈,减少了系统处理时延,提高了字符匹配的速度和效率。 
本申请的上述技术方案将Aho-Corasick算法在文本检索、字符串匹配和网 络数据流过滤等领域实际应用时的处理能力,尤其是处理速度,提高了一个数量级。 
由于当前的主流处理器都采用系统主存辅以多级缓存的架构,因此,本申请的技术方案具有普遍适用性。 
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化、替换或应用到其他类似的装置,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。 

Claims (9)

1.一种用于内容过滤设备的基于有限状态自动机的字符串匹配方法,其特征在于,包括:
确定用户输入的关键字在设定的关键字组中时,调用所述关键字组对应的有限状态自动机DFA程序代码,所述DFA程序代码为根据程序代码的允许大小,选取所述DFA中包含的与初始状态具有衍生关系的部分状态,生成的仅包含已选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码,其中所选取的部分状态的出现频率之和大于设定的阈值;
执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;
根据所述输出状态输出字符匹配结果。
2.如权利要求1所述的方法,其特征在于,所述程序代码仅包含已选取的部分状态作为当前状态,输入字符后所对应的输出状态时;其余未被选取的状态作为当前状态时,输入字符后所对应的输出状态仍从系统主内存中获取。
3.如权利要求1所述的方法,其特征在于,所述根据所述输出状态输出字符匹配结果,具体包括:
根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果;
当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。
4.如权利要求1-3任一所述的方法,其特征在于,所述设定的关键字组根据设定时间段内的关键字使用情况的统计结果定期更新;
相应的,根据更新后的关键字组,生成对应的DFA程序代码。
5.一种用于内容过滤设备的基于有限状态自动机的字符串匹配装置,其特征在于,包括:
生成模块,用于根据程序代码的允许大小,选取有限状态自动机DFA中包含的与初始状态具有衍生关系的部分状态,生成仅包含已选取的部分状态作为当前状态时,输入字符后所对应的输出状态的程序代码,其中所选取的部分状态的出现频率之和大于设定的阈值;
调用模块,用于确定用户输入的关键字在所述关键字组中,调用所述生成模块生成的与所述关键字组对应的DFA程序代码;
执行模块,用于执行所述程序代码,依次输入待搜索数据库中包含的字符,并根据当前状态和输入字符,确定输出状态;所述输出状态即为下次输入字符时的当前状态;
输出模块,用于根据所述输出状态输出字符匹配结果。
6.如权利要求5所述的装置,其特征在于,所述执行模块,还用于:
当所述生成模块所生成的程序代码中仅包含已选取的部分状态作为当前状态,输入字符后所对应的输出状态时,从系统主内存中获取未被选取的状态作为当前状态时,输入字符后所对应的输出状态。
7.如权利要求5所述的装置,其特征在于,所述输出模块,具体包括:
查询单元,用于根据采用Aho-Corasick算法得到的各输出状态所对应的字符匹配结果的对应关系,查询所述输出状态所对应的字符匹配结果;
输出单元,用于当确定所述字符匹配结果为某个关键字命中时,输出字符匹配结果;否则无输出。
8.如权利要求5-7任一所述的装置,其特征在于,还包括:
更新模块,用于根据设定时间段内的关键字使用情况的统计结果定期更新所述设定的关键字组;
相应的,所述生成模块,还用于根据更新后的关键字组,生成对应的DFA程序代码。
9.一种内容过滤设备,其特征在于,在该内容过滤设备中设置如权利要求5-8任一所述的基于有限状态自动机的字符串匹配装置。
CN2009101672927A 2009-09-02 2009-09-02 一种基于有限状态自动机的字符串匹配方法及装置 Active CN101639861B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009101672927A CN101639861B (zh) 2009-09-02 2009-09-02 一种基于有限状态自动机的字符串匹配方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009101672927A CN101639861B (zh) 2009-09-02 2009-09-02 一种基于有限状态自动机的字符串匹配方法及装置

Publications (2)

Publication Number Publication Date
CN101639861A CN101639861A (zh) 2010-02-03
CN101639861B true CN101639861B (zh) 2012-06-27

Family

ID=41614843

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009101672927A Active CN101639861B (zh) 2009-09-02 2009-09-02 一种基于有限状态自动机的字符串匹配方法及装置

Country Status (1)

Country Link
CN (1) CN101639861B (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102148805B (zh) * 2010-02-09 2015-04-08 华为技术有限公司 特征匹配方法和装置
CN101853301A (zh) 2010-05-25 2010-10-06 华为技术有限公司 正则表达式匹配的方法和系统
US8972930B2 (en) * 2010-06-04 2015-03-03 Microsoft Corporation Generating text manipulation programs using input-output examples
US9613115B2 (en) 2010-07-12 2017-04-04 Microsoft Technology Licensing, Llc Generating programs based on input-output examples using converter modules
CN101944121B (zh) * 2010-09-20 2012-05-30 北京星网锐捷网络技术有限公司 有限状态自动机生成方法、关键字匹配方法及装置和设备
CN102207979A (zh) * 2011-06-30 2011-10-05 北京新媒传信科技有限公司 一种敏感词匹配方法和系统
US9552335B2 (en) 2012-06-04 2017-01-24 Microsoft Technology Licensing, Llc Expedited techniques for generating string manipulation programs
US9507563B2 (en) 2013-08-30 2016-11-29 Cavium, Inc. System and method to traverse a non-deterministic finite automata (NFA) graph generated for regular expression patterns with advanced features
CN104714995B (zh) * 2013-08-30 2019-04-23 凯为有限责任公司 用于遍历正则表达式图样生成的nfa的系统和方法
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
CN107153469B (zh) * 2016-03-03 2021-03-30 北京奇简云科技有限公司 为输入数据搜索匹配候选项的方法、数据库创建方法、装置及计算机程序产品
US11620304B2 (en) 2016-10-20 2023-04-04 Microsoft Technology Licensing, Llc Example management for string transformation
US11256710B2 (en) 2016-10-20 2022-02-22 Microsoft Technology Licensing, Llc String transformation sub-program suggestion
US10846298B2 (en) 2016-10-28 2020-11-24 Microsoft Technology Licensing, Llc Record profiling for dataset sampling
US10671353B2 (en) 2018-01-31 2020-06-02 Microsoft Technology Licensing, Llc Programming-by-example using disjunctive programs
CN112685625B (zh) * 2020-12-31 2022-10-28 中国人民解放军战略支援部队信息工程大学 一种实现浮动关键字匹配的深度可编程转发系统、方法及装置
CN117556790B (zh) * 2024-01-02 2024-04-16 四川大学华西医院 医疗信息处理方法、装置、设备和存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
周涛.基于有限状态自动机的复合事件检测的程序实现.《计算机工程》.2005,第31卷(第23期),85-86. *
宋华、戴一奇.一种用于内容过滤和检测的快速多关键词识别算法.《计算机研究与发展》.2004,第41卷(第6期),940-945. *

Also Published As

Publication number Publication date
CN101639861A (zh) 2010-02-03

Similar Documents

Publication Publication Date Title
CN101639861B (zh) 一种基于有限状态自动机的字符串匹配方法及装置
Borodin et al. Online computation and competitive analysis
CN102857493B (zh) 内容过滤方法和装置
CN101160923B (zh) 模式检测的装置与方法
Urhan et al. Xjoin: A reactively-scheduled pipelined join operatorý
CN101876986B (zh) 基于有限状态自动机的字符串匹配方法及内容过滤设备
CN105989129B (zh) 实时数据统计方法和装置
US10496642B2 (en) Querying input data
CN106355094A (zh) 一种基于语法变换的sql注入攻击防御系统及防御方法
CN107016027A (zh) 实现业务信息快速搜索的方法和装置
CN109951541A (zh) 一种流水号生成方法及服务器
CN103138981A (zh) 一种社交网络分析方法和装置
CN105706092A (zh) 四值模拟的方法和系统
Kucukyilmaz et al. A machine learning approach for result caching in web search engines
CN105447021A (zh) 用于数据库查询的方法和系统
Williams et al. Enabling fine-grained HTTP caching of SPARQL query results
Zhou et al. DMaC: Distributed monitoring and checking
CN101944121B (zh) 有限状态自动机生成方法、关键字匹配方法及装置和设备
CN109885588B (zh) 一种复杂事件检测方法及系统
CN101079890B (zh) 一种生成特征码确定状态机的方法和装置
Wang et al. ABACUS: Address-partitioned bloom filter on address checking for uniqueness in IoT blockchain
JP2014502756A (ja) ツリー構造に基づくマスデータストレージの装置および方法
Bouyer et al. Almost-sure model-checking of reactive timed automata
Bornea et al. Double index nested-loop reactive join for result rate optimization
CN105653367A (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
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: BEIJING Z-GOOD TECHNOLOGY SERVICE CO., LTD.

Free format text: FORMER OWNER: FUJIAN XINGWANGRUIJIE NETWORK CO., LTD.

Effective date: 20141201

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 350015 FUZHOU, FUJIAN PROVINCE TO: 100085 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20141201

Address after: 100085 Beijing city Haidian District No. 33 Xiaoying Road 1 1F06 room

Patentee after: BEIJING ZHIGU TECHNOLOGY SERVICES CO., LTD.

Address before: 350015 M9511 Industrial Park, fast road, Mawei District, Fujian, Fuzhou

Patentee before: Fujian Xingwangruijie Network Co., Ltd.

EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20100203

Assignee: Fujian Xingwangruijie Network Co., Ltd.

Assignor: BEIJING ZHIGU TECHNOLOGY SERVICES CO., LTD.

Contract record no.: 2015990000030

Denomination of invention: String matching method and device based on definite state automaton

Granted publication date: 20120627

License type: Common License

Record date: 20150116

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model