專利名稱::一種基于有限狀態自動機的字符串匹配方法及裝置的制作方法
技術領域:
:本發明涉及檢索
技術領域:
,尤指一種基于有限狀態自動機(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日發明者黃凱明申請人:福建星網銳捷網絡有限公司