專(zhuān)利名稱(chēng):一種分段模式匹配方法及其裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,特別涉及字符串模式匹配領(lǐng)域,具體來(lái)講是一 種分段模式匹配方法及其裝置。
背景技術(shù):
現(xiàn)在,通過(guò)互聯(lián)網(wǎng),每一個(gè)人都能非常容易地發(fā)布自己的信息,這同時(shí) 也意味著在互聯(lián)網(wǎng)上充斥著海量的信息,而且這些信息是各種各樣的。在這 些信息當(dāng)中,有許多有價(jià)值的信息,但是同時(shí),更多的是一些垃圾信息,比 如垃:t及郵件等等。在實(shí)際生活中,人們通常只是想閱讀自己感興趣的東西,而不想去閱讀 自己不感興趣的東西。不幸的是,互聯(lián)網(wǎng)本身并沒(méi)有提供這種機(jī)制,所以, 互聯(lián)網(wǎng)的用戶(hù)直接面臨著在網(wǎng)上無(wú)限制傳播的大量信息,會(huì)很容易地被信息 流所淹沒(méi)。面對(duì)這海量的信息,過(guò)濾是幫助人們獲得有價(jià)值信息的有用工具,通過(guò)過(guò)濾,互聯(lián)網(wǎng)的用戶(hù)只需要花很少的時(shí)間就能獲得自己感興趣的信息;網(wǎng)絡(luò)設(shè)備可以過(guò)濾掉有害信息,或者識(shí)別出特別的重要信息。模式匹配的算 法解決了這個(gè)問(wèn)題,在模式匹配中找到匹配集中最合適的關(guān)鍵字是十分重要的。多模式的匹配即是有K個(gè)模式P[l] ...P[K]和一個(gè)文本T,尋找K個(gè)模 式中的任何一個(gè)模式在T中是否出現(xiàn)以及出現(xiàn)的位置,1975年由A.V.Aho 和M. J. Corasick^^開(kāi)了一種有限子動(dòng)^L的多^t式匹配算法(AC算法),能 夠有效的對(duì)文本進(jìn)行匹配和過(guò)濾,以使文獻(xiàn)檢索變得更加迅速。圖1為現(xiàn)有AC算法的模式匹配集和示意圖。圖中虛線方框內(nèi)的就是匹 配的模式。規(guī)定模式的集合為PI: */movie/*P2: */music/*P3: */root/public/ *P4: */movie/comedy/*其中通配符"*"在兩端的意思為,以這些模式為關(guān)鍵字,可能出現(xiàn)在一
個(gè)字符串或者文本的任意部分。對(duì)于AC算法來(lái)說(shuō),它的處理方法是基于一 個(gè)關(guān)鍵字樹(shù),這個(gè)關(guān)鍵字樹(shù)由匹配集合中的所有關(guān)鍵字構(gòu)成,每個(gè)節(jié)點(diǎn)分支 的判斷條件都是一個(gè)字符。當(dāng)對(duì)一字符串進(jìn)行分析時(shí),該字符串逐字符穿過(guò) 關(guān)鍵字樹(shù)直到整個(gè)字符串都被分析完成為止。由一個(gè)狀態(tài)機(jī)對(duì)關(guān)鍵字樹(shù)進(jìn)行 匹配操作,關(guān)鍵字樹(shù)的每一個(gè)節(jié)點(diǎn)都為有限狀態(tài)機(jī)的一個(gè)可能狀態(tài)。其中, 節(jié)點(diǎn)為靜態(tài)的,是可能的狀態(tài)的描述,而狀態(tài)是狀態(tài)機(jī)在某一特定時(shí)刻的描 述。中國(guó)專(zhuān)利200410023142, —種基于特征值的多才莫式匹配算法及硬件實(shí)現(xiàn) 專(zhuān)利,公開(kāi)了一種對(duì)信息進(jìn)行兩次匹配的方法,先濾除一些不重要的信息, 對(duì)感興趣的信息進(jìn)行第二次濾除,但是該方法需的存儲(chǔ)器容量也很大,并且 該方法的匹配速度不夠理想。發(fā)明內(nèi)容為了解決以上問(wèn)題,本發(fā)明提供一種分段模式匹配方法,將格式化的字 符串進(jìn)行分^R并進(jìn)行模式匹配,以達(dá)到更快速的效杲。為了解決以上問(wèn)題,本發(fā)明提供一種分段模式匹配裝置,將字符串分段, 并進(jìn)行模式匹配以達(dá)到對(duì)硬件要求4氐的效果。一種分段模式匹配方法,包括,步驟1,根據(jù)模式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將模式字符串 劃分成至少一個(gè)關(guān)鍵字字符串片段,由編譯器利用現(xiàn)有匹配算法規(guī)則將所述 關(guān)鍵字字符串片段生成關(guān)鍵字樹(shù),所述關(guān)鍵字樹(shù)的每個(gè)節(jié)點(diǎn)都包含至少一個(gè) 關(guān)鍵字字符串片段,該節(jié)點(diǎn)的分支條件是另 一個(gè)關(guān)鍵字字符串片段;步驟2, 4艮據(jù)才莫式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將用戶(hù)輸入的 待處理字符串劃分成至少一個(gè)待處理字符串片段,作為狀態(tài)機(jī)的輸入;步驟3,由所述狀態(tài)機(jī)根據(jù)所述現(xiàn)有匹配算法將所述待處理字符串片段 在所述關(guān)鍵字樹(shù)節(jié)點(diǎn)中進(jìn)行匹配操作;步驟4,如果在匹配的所述關(guān)鍵字樹(shù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中具有模式匹配成 功的標(biāo)志,則記錄或者輸出該匹配的模式ID;步驟5,如果所有所述待處理的字符串片段處理完畢,則結(jié)束,否則在 所述狀態(tài)機(jī)中處理下一個(gè)所述待處理字符串片段,重復(fù)步驟3-5。所述步驟3中,使用哈希算法或者二分法將待處理字符串片段與節(jié)點(diǎn)分
支條件進(jìn)行字符串之間的匹配。 還包括一排序步驟,在步驟1中,將待處理字符串分革更后,由一排序單元將所述關(guān)鍵字字符串片^殳4安照預(yù)定的順序排序,并輸入所述編譯器,由所述編譯器生成關(guān)4建字 樹(shù);在步驟2中,將待處理字符串分割成至少一個(gè)待處理字符串片段后,由 所述排序單元將所述待處理字符串片段按照所述預(yù)定順序輸入所述狀態(tài)機(jī), 以進(jìn)行步驟3至步驟5。還包括一合并步驟在步驟l中,將模式字符串分段后,按照下述合并規(guī)則由一合并單元將 所述關(guān)鍵字字符串片段合并成新的關(guān)鍵字字符串片段將所述關(guān)鍵字樹(shù)同一 支路中相鄰的只具有一個(gè)分支的節(jié)點(diǎn)合并;或者將上述合并的節(jié)點(diǎn)與其最后 一個(gè)節(jié)點(diǎn)相鄰的,并且具有至少兩個(gè)分支的節(jié)點(diǎn)合并;合并后輸入所述編譯 器,由編譯器重新生成關(guān)鍵字樹(shù);在步驟2中,將待處理字符串分段后,按照上述合并規(guī)則,由所述合并 單元將所述待處理字符串片段合并成由至少一個(gè)待處理字符串片段組成的 新的待處理字符串片段,作為所述狀態(tài)機(jī)的輸入。還包括一合并步驟在步驟l中,將所述關(guān)鍵字字符串片段排序后,按照下述合并規(guī)則由一 合并單元將所述關(guān)鍵字字符串片段合并成新的關(guān)鍵字字符串片段將所述關(guān) 鍵字樹(shù)同一支路中相鄰的只具有一個(gè)分支的節(jié)點(diǎn)合并;或者將上述合并的節(jié) 點(diǎn)與其最后一個(gè)節(jié)點(diǎn)相鄰的,并且具有至少兩個(gè)分支的節(jié)點(diǎn)合并;合并后輸 入所述編譯器,由編譯器重新生成關(guān)鍵字樹(shù);在步驟2中,將所述待處理字符串片段排序后,按照上述合并規(guī)則由所 述合并單元將所述待處理字符串片段合并成由至少一個(gè)待處理字符串片段 組成的新的待處理字符串片段,作為所述狀態(tài)機(jī)的輸入。所述預(yù)定順序包括,按照所述關(guān)鍵字字符串片段和所述待處理字符串片 段讀入的先后順序,或者片段的語(yǔ)法結(jié)構(gòu)進(jìn)行排序,排序后所述鍵字字符串 片段和所述待處理字符串片段的順序相同。一種分段模式匹配裝置,包括,分段器,用于根據(jù)根據(jù)模式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將模
式字字符串和待處理字符串分段;編譯器,與狀態(tài)才M目連接,用于將所述關(guān)鍵字字符串片段生成關(guān)鍵字樹(shù);所述狀態(tài)機(jī),接收所述分段器傳送的待處理字符串片段,利用現(xiàn)有匹配 算法將所述待處理字符串片段在所述關(guān)鍵字樹(shù)節(jié)點(diǎn)中進(jìn)行匹配操作;輸出單元與所述狀態(tài)機(jī)相連接,用于輸出與所述待處理字符串的匹配模 式編號(hào)。還包括一排序單元,用于將由所述分段器輸出的至少2個(gè)待處理字符串 片段和所述關(guān)鍵字字符串片段按照預(yù)定順序分別進(jìn)行排序,將排序后的所述 待處理字符串片段輸入所述狀態(tài)機(jī),將排序后的所述關(guān)鍵字字符串片段輸入 所述編譯器。還包括一合并單元,用于合并所述待處理字符串片段并傳送給所述狀態(tài) 機(jī),合并所述關(guān)鍵字字符串片段并傳送給所述編譯器。還包括一合并單元,用于合并所述經(jīng)過(guò)排序單元的待處理字符串片段, 并傳送給所述狀態(tài)機(jī),合并所述經(jīng)過(guò)排序單元的關(guān)鍵字字符串片段,并傳送 給所述編譯器。本發(fā)明的有益效果在于,能夠更快速的模式匹配,并且節(jié)省存儲(chǔ)器,更 快速的模式匹配收斂速度。
圖1為現(xiàn)有AC算法的模式匹配集合示意圖;圖2為本發(fā)明模式匹配第一實(shí)施例示意圖;圖3為本發(fā)明分^殳才莫式匹配裝置示意圖;圖4為本發(fā)明模式匹配第二實(shí)施例示意圖;圖5為本發(fā)明模式匹配第三實(shí)施例示意圖;圖6為本發(fā)明加入排序單元和合并單元的裝置示意圖。
具體實(shí)施方式
下面,結(jié)合附圖對(duì)于本發(fā)明進(jìn)行如下詳細(xì)說(shuō)明。在通常的模式匹配問(wèn)題中,通配符可以代表許多任意的字符。根據(jù)請(qǐng)求 注解文檔RFC2396 (Request for Comments Document 2396)中說(shuō)明的URL, 我們能夠基于片段的形式看到URL字符串,該字符串可以看作是以"."和"/"
區(qū)分的,由分隔符"."或者"/"分開(kāi)的子字符串成為一個(gè)片段。對(duì)于HTTP的 URL (或其他一些類(lèi)似的協(xié)議)過(guò)濾應(yīng)用中,模式可能只是定義在基本片段 中的過(guò)濾條件。還例如IP地址,或者介質(zhì)訪問(wèn)控制MAC地址之類(lèi)的數(shù)據(jù), 同樣也可以認(rèn)為是格式化的字符串,IP地址101.102.103.104,根據(jù)"."將它們 的模式分段。換句話(huà)說(shuō),通配符在模式中可以代表許多任意的片段,而不僅 僅是字符。本發(fā)明所利用的現(xiàn)有匹配算法不限制于現(xiàn)有的AC匹配算法,也可以使 用其他的匹配方法,例如確定性有限狀態(tài)機(jī)DFA(deterministic Finite Automaton)匹酉己算法。如圖2所示為本發(fā)明模式匹配第一實(shí)施例示意圖。虛線方框內(nèi)的是匹配 的模式。規(guī)定一組模式PI: Vmovie/*P2: Vmusic/*P3: "root/public/*P4: */movie/comedy/*葉節(jié)點(diǎn)上為關(guān)鍵字片段或關(guān)鍵字片段的組合,例如/root/和/public/都為關(guān) 鍵字片段,節(jié)點(diǎn)/root/的分支條件為關(guān)鍵字片段/public/,而在/root/下一級(jí)的 子節(jié)點(diǎn)為關(guān)鍵字片段的組合/root/public/,該節(jié)點(diǎn)代表一個(gè)路徑。例如,一 個(gè)待處理URL字符串為"/root/movie/comedy/laura.mpeg",圖2所示的關(guān)鍵字 集合為{/movie/, /music/, /movie/comedy/, /root/public/},其中各個(gè)節(jié)點(diǎn)都代 表一個(gè)或者數(shù)個(gè)模式的前綴。通過(guò)將輸入字符串片段與當(dāng)前節(jié)點(diǎn)狀態(tài)的分支 進(jìn)行比較而得到下一個(gè)節(jié)點(diǎn),并修改著狀態(tài)機(jī)的狀態(tài)。首先,由編譯器根據(jù) 關(guān)鍵字集合生成關(guān)鍵字樹(shù)。狀態(tài)機(jī)處于"idle"空閑狀態(tài),當(dāng)輸入U(xiǎn)RL字符串, 第一個(gè)待處理字符串片段為"/root/",這個(gè)片段將會(huì)被提取出來(lái),與"/music/", "/movie/"和"/root/"三個(gè)分支相比較,狀態(tài)機(jī)比較的結(jié)果將狀態(tài)機(jī)的狀態(tài)修 改為"/root/"。第二個(gè)待處理字符串片段為"/movie/",從"/root/"狀態(tài)所對(duì)應(yīng)節(jié) 點(diǎn)的分支條件中并不包括"/movie/"片段, 一個(gè)失敗函數(shù)在這里被用來(lái)將當(dāng)前 狀態(tài)位改變?yōu)?idle,,狀態(tài),而這種回滾的操作是現(xiàn)有匹配算法中就已經(jīng)存在, 例如AC匹配算法,根據(jù)整個(gè)關(guān)鍵字樹(shù)的特征計(jì)算出來(lái)。在本例中回滾到關(guān) 鍵字樹(shù)根節(jié)點(diǎn)重新開(kāi)始比較,結(jié)果將狀態(tài)機(jī)的狀態(tài)改為匹配關(guān)鍵字 "/movie/",生成關(guān)鍵字樹(shù)時(shí)在/movie/節(jié)點(diǎn)中的數(shù)據(jù)結(jié)構(gòu)中定義一標(biāo)志位,代 表該節(jié)點(diǎn)為 一模式P1 ,當(dāng)匹配到"/movie/"時(shí)輸出這個(gè)模式P1 。再處理第三 個(gè)待處理字符串片段"/comedy/",由于在"/movie/"狀態(tài)對(duì)應(yīng)節(jié)點(diǎn)的分支中存 在這樣的匹配片段/ comedy /,對(duì)應(yīng)的節(jié)點(diǎn)關(guān)鍵字片段為"/movie/comedy/", 所以^M犬態(tài)才幾的^)犬態(tài)》爹改為匹配關(guān)4定字片段"/movie/comedy/",即路徑為 "/movie/comedy/",生成關(guān)鍵字樹(shù)時(shí)在/ movie/comedy /關(guān)鍵字片段節(jié)點(diǎn)中定 義一標(biāo)志位,代表該節(jié)點(diǎn)為模式P4,并輸出該模式P4。第四個(gè)待處理字符 串片段為"/laura",由于沒(méi)有相應(yīng)的分支對(duì)應(yīng)該片段,則由失敗函數(shù)將狀態(tài)機(jī) 的狀態(tài)修改為"idle"。對(duì)第五個(gè)待處理字符串片段".mpeg"的處理結(jié)果狀態(tài)機(jī) 的狀態(tài)依然是"idle"。最后,輸入的整個(gè)URL字符串只有兩個(gè)匹配關(guān)鍵字, "/movie/"和"/movie/隱edy/"。輸出的模式ID為Pl和P4。其中,待處理 字符串片段與關(guān)鍵字字符串片段進(jìn)行比較時(shí),先將字符串片段利用某一種哈 希算法計(jì)算成數(shù)值,再將待處理字符串片段的數(shù)值與關(guān)鍵字字符串片段數(shù)值 進(jìn)行比較,這樣避免了片段之間逐字符的比較,加快了匹配速度。同樣也可 以使用現(xiàn)有技術(shù)中其他的字符串比較方法,例如二分法等。本發(fā)明方法不僅可以適用于拼音類(lèi)文字分段模式匹配,還可以適用于雙 字節(jié)字符,例如中文編碼,由于發(fā)明并不是基于字節(jié),無(wú)論是單字節(jié)的英文 單詞,還是雙字節(jié)的中文字,所有的分段都可以被識(shí)別為串行位。用例如"/"、 "."或者空格等作為分隔符,將字符串分段。如圖3所示為本發(fā)明第一實(shí)施例信號(hào)流圖。在處理過(guò)程中,將要#:處理的字符串,例如URL等字符串,處理結(jié)束后輸出的是輸入字符串的最佳匹 配模式ID。首先將模式集合(P1,P2,P3…)傳送至分段器,根據(jù)分隔符對(duì)模式 集中的每一個(gè)模式分段,將上述關(guān)鍵字片段傳送給編譯器,由該編譯器根據(jù) 現(xiàn)有的匹配算法(例如標(biāo)準(zhǔn)AC匹配算法)生成關(guān)鍵字樹(shù),其中關(guān)鍵字樹(shù)的 每一個(gè)節(jié)點(diǎn)的分支條件為所述分段后的字符串片段,該節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中包 含表示跳轉(zhuǎn)、分支信息、模式匹配命中標(biāo)識(shí)符等信息的數(shù)據(jù)結(jié)構(gòu)。然后將待 處理的字符串輸入分段器,根據(jù)字符串中的特殊字符將待處理字符串分割成 幾段輸入狀態(tài)機(jī),在狀態(tài)機(jī)的操作下將分段后的字符串與關(guān)鍵字樹(shù)節(jié)點(diǎn)的分 支條件進(jìn)行匹配,與哪個(gè)關(guān)鍵字樹(shù)節(jié)點(diǎn)分支條件相匹配則跳轉(zhuǎn)到相應(yīng)的下一 個(gè)節(jié)點(diǎn),如果沒(méi)有匹配的分支條件則根據(jù)現(xiàn)有匹配算法的失敗函數(shù)跳轉(zhuǎn)到其 他節(jié)點(diǎn),直到待處理字符串匹配處理完畢,得到最合適的匹配模式,并且將 該模式的ID輸出,外界的功能實(shí)體以進(jìn)行進(jìn)一步對(duì)用戶(hù)輸入的字符串進(jìn)行
處理,例如,將該模式與預(yù)定的規(guī)則比較,如果相同則禁止執(zhí)行該該字符串 所代表的任務(wù)。作為進(jìn)一步的實(shí)施例,本發(fā)明將至少兩個(gè)待處理字符串片段和關(guān)鍵字片 段進(jìn)行順序排列以加速匹配。通常分段后的待處理字符串的各段有一定的特定意義,根據(jù)實(shí)際處理目的,可以對(duì)各段進(jìn)行優(yōu)先順序排序。比如 一個(gè)提 問(wèn)"你叫什么名字?,,,回答一般都是"我叫XX",這個(gè)回答的模式匹配可以 利用語(yǔ)言的結(jié)構(gòu)特點(diǎn)(例如通過(guò)區(qū)分謂語(yǔ)"叫"的前后),分為"我","叫" 和"XX";通常我們可以認(rèn)為在這幾個(gè)片段中,其優(yōu)先順序是"XX"、"我"、 "叫"。對(duì)于"What is your name ",回答一般為,VMy name/is/XX/",這個(gè)回答 可以使用"/"作為通配符進(jìn)行分段,同樣也可以利用結(jié)構(gòu)特點(diǎn)(is)區(qū)分,分 解出"Myname", "is", "XX",同樣我們可以設(shè)定其優(yōu)先順序?yàn)?XX"、 "Myname"、和"is"。下面的例子詳細(xì)描述了本發(fā)明按照優(yōu)先順序?qū)⒋幚碜?符串進(jìn)行匹配的處理過(guò)程。如圖4為本發(fā)明第二實(shí)施例根據(jù)關(guān)鍵字片段重要性排序后的關(guān)鍵字樹(shù)示 意圖。針對(duì)于"What is your name ,,對(duì)話(huà)答復(fù)有四個(gè)可能模式匹配PI: /My name /is/ Jack/;P2: /My name /is/ Mary/;P3: /My name /was/ Martin/;P4: /My name /is/ Martin/;在關(guān)鍵字樹(shù)生成階段,首先通過(guò)分段器對(duì)以上可能模式根據(jù)實(shí)際結(jié)構(gòu)進(jìn) 行分段(例如主/謂/賓),然后通過(guò)排序單元根據(jù)實(shí)際各段意義的重要性進(jìn) 行排序,可以通過(guò)在每個(gè)關(guān)鍵字片段讀入的先后順序,或者各片段的語(yǔ)法結(jié) 構(gòu)進(jìn)行排序,語(yǔ)法結(jié)構(gòu)可以是自然語(yǔ)言的,也可以是針對(duì)于某種標(biāo)準(zhǔn)的(例 如,URL語(yǔ)法標(biāo)準(zhǔn)),判斷每個(gè)片段的語(yǔ)法位置,在本例中可以認(rèn)為各段的 重要性順序?yàn)橘e/主/謂,生成新的等效的^t式匹配為PI: / Jack/My name /is/;P2: / Mary/My name /is/;P3: / Martin/My name /was/;P4: / Martin/My name /is/;根據(jù)以上模式匹配中關(guān)鍵字的順序,由編譯器以段為單位,按現(xiàn)有模式 匹配算法(例如標(biāo)準(zhǔn)AC匹配算法)將關(guān)鍵字片段生成關(guān)鍵字樹(shù),結(jié)果如圖4所示。假設(shè)待處理字符串為'7Myname/is/Martin/"。首先根據(jù)生成模式Pl-P4 時(shí)的約定進(jìn)行分IS:,在本例中根據(jù)"/"分段,分成/Myname/、 /is/和/Martin/ 三段。然后根據(jù)各片段的語(yǔ)法結(jié)構(gòu)進(jìn)行排序,或者根據(jù)輸入的順序進(jìn)行排序, 排序的結(jié)果與關(guān)鍵字字符串片段的順序一致,得到新的待處理字符串/ Martin/、 /is/和/my name/。然后以段為單位,從idle狀態(tài)開(kāi)始利用現(xiàn)有匹配 算法(例如標(biāo)準(zhǔn)AC匹配算法)搜索關(guān)鍵字樹(shù)。在本例中,將會(huì)在節(jié)點(diǎn)的分 支條件中先后找到/Martin/ 、 /My name/和/is/三個(gè)字符串片段,預(yù)先在最 后一個(gè)節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中的標(biāo)志位標(biāo)明相應(yīng)的模式ID,輸出其標(biāo)號(hào)P4。作為可選的,如圖5所示為本發(fā)明第三實(shí)施例合并關(guān)鍵字片段后的關(guān)鍵 字樹(shù)示意圖。在合并單元進(jìn)行判斷關(guān)鍵字樹(shù)的"/Jack/"節(jié)點(diǎn)后到樹(shù)葉節(jié)點(diǎn)的分 支,如果只有一個(gè)分支,則將后續(xù)分段合并,并在該節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中提供 額外的描述,表明該后續(xù)節(jié)點(diǎn)是由后面2個(gè)或者多個(gè)節(jié)點(diǎn)合并而成。本例中 "/Jack/"節(jié)點(diǎn)后的'7My name/"和"/is/"合并,形成"/Jack/"節(jié)點(diǎn)新的分支條件 "/Myname/is/"; '7Mary/"節(jié)點(diǎn)后的"/Myname/"和"/is/"合并,形成"/Mary/"節(jié) 點(diǎn)新的分支條件"/My name/ is/",同時(shí)在/Jack/和/Mary/節(jié)點(diǎn)標(biāo)明該后續(xù)節(jié)點(diǎn) 由2個(gè)分段組成;其他節(jié)點(diǎn)不變,由編譯器接收上述合并單元的處理結(jié)果生 成新的關(guān)鍵字樹(shù)如圖5所示。假設(shè)實(shí)際待處理字符串為'7My name/is/Mary/",根據(jù)前面的分段、排序 規(guī)則,待處理字符串片段為/Mary八/Myname八/is/。在狀態(tài)機(jī)查關(guān)鍵字樹(shù)時(shí),在每一個(gè)節(jié)點(diǎn),首先需要判斷該后續(xù)節(jié)點(diǎn)是由 幾個(gè)段構(gòu)成,然后從待處理字符串片段中取出相應(yīng)個(gè)數(shù)的片段,傳送給合并 單元進(jìn)行合并處理,重新組成狀態(tài)機(jī)的輸入,進(jìn)行精確匹配。在本例中,idle 狀態(tài)后續(xù)輸入只有1個(gè)關(guān)鍵字片段組成的分支條件,因此取'7Mary/"作為輸 入,然后比較,得到一個(gè)節(jié)點(diǎn)'7Mary/",轉(zhuǎn)移狀態(tài)機(jī)的狀態(tài)為"/Mary/",并且 下 一個(gè)匹配操作是將輸入字符串片段與"/Mary/"節(jié)點(diǎn)后面的分支條件進(jìn)行比 較,在"/Mary/"節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中發(fā)現(xiàn)該后續(xù)節(jié)點(diǎn)由2個(gè)片段組成,因此再 讀入后續(xù)的兩個(gè)待處理字符串片段組成新的片段"/My name/is/",進(jìn)行比較, 發(fā)現(xiàn)匹配,而且命中匹配模式P2.返回匹配的結(jié)果P2。作為另 一種實(shí)施例,在關(guān)鍵字樹(shù)中合并的關(guān)鍵字片段不限于以上描述, 可以是在整個(gè)關(guān)鍵字樹(shù)的同一支路中任意幾個(gè)連續(xù)的只具有一個(gè)分支的節(jié) 點(diǎn)相合并,該合并還可以包括緊接著合并末尾節(jié)點(diǎn)的具有多個(gè)分支的節(jié)點(diǎn)。 根據(jù)合并的規(guī)則重新由編譯器生成關(guān)鍵字樹(shù)。如圖6所示為本發(fā)明加入重新排序單元和合并單元的裝置示意圖。與圖 3相比,增加一個(gè)排序單元,連接于狀態(tài)機(jī)與分段器之間,不僅將待處理字 符串分段后的片段進(jìn)行排序,而且將關(guān)鍵字片段進(jìn)行相應(yīng)排序,將某些重要 的字符串片段在待處理字符串片段中優(yōu)先處理,以便進(jìn)行模式匹配時(shí)加快處 理速度。本圖中,還包括一合并單元,連接于排序單元與狀態(tài)機(jī)之間,用于 將關(guān)鍵字樹(shù)中的某些節(jié)點(diǎn)合并,其處理結(jié)果輸入編譯器以生成新的關(guān)鍵字 樹(shù),并且根據(jù)關(guān)鍵字樹(shù)節(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中關(guān)于后繼節(jié)點(diǎn)合并的信息,將待處理 字符串片段中后繼的幾個(gè)片段合并作為狀態(tài)機(jī)的輸入。所述排序單元和合并 單元并不是必須同時(shí)存在的,可以單獨(dú)使用其中一個(gè)或者一起使用,用于加 快模式匹配的速度和優(yōu)化系統(tǒng)性能。通過(guò)本發(fā)明的方法能夠縮短搜索速度,并且不需要大量的存儲(chǔ)空間。對(duì)于AC算法的關(guān)鍵字樹(shù)來(lái)說(shuō),如果要避免回滾函數(shù)的操作,則需要針 對(duì)每一個(gè)可能分支都存儲(chǔ)下一節(jié)點(diǎn)的信息,就形成了 DFA算法。于是對(duì)于 整個(gè)狀態(tài)機(jī)的轉(zhuǎn)換表要求的存儲(chǔ)空間為(flog2 ■$■"]+「log2 w"j)xc , C 為在DFA算法中輸入的字符數(shù),n為模式的個(gè) 數(shù),s為狀態(tài)的個(gè)數(shù);以上公式在M. Aldwairi, T. conte和P. Franzon在"用于加速侵入竊密檢測(cè) 的可配置字符串匹配硬件"中描述。其中"tz,, /,為模式Z的長(zhǎng)度。假設(shè)有fi)00個(gè)模式,每個(gè)模式有128 byte長(zhǎng),因此,p128尺。每個(gè)狀 態(tài)都將有一個(gè)哈希表,用于查詢(xún)過(guò)渡狀態(tài),該表中包括其子節(jié)點(diǎn)信息。在每 個(gè)合法的URL地址中,有將近c(diǎn)=80個(gè)字符,那么每個(gè)狀態(tài)的表都將會(huì)有80 個(gè)字符,最后AC算法所需要的存儲(chǔ)空間為M^61M5。對(duì)于本發(fā)明方法來(lái)說(shuō),假設(shè)模式的長(zhǎng)度有IO個(gè)片段。因此,"10尺, 每一個(gè)片段的長(zhǎng)度為12.8 byte,每個(gè)狀態(tài)的哈希表或者內(nèi)容尋址存儲(chǔ)器 (CAM)被用于查詢(xún)轉(zhuǎn)變條件。每一種轉(zhuǎn)變條件,需要的存儲(chǔ)單元包括6byte 的下個(gè)狀態(tài)信息,和用于比較的整個(gè)片段的12.8byte。所以,如果應(yīng)用了 CAM 整個(gè)需要的存儲(chǔ)空間為M S 18.8xlOK = 。使用哈希表必須事先制定表的大 小,如果需要比較小的沖突概率的話(huà),表格的大小要大于所含有的元素的個(gè)
數(shù),為了便于估計(jì)所需要的整個(gè)內(nèi)存空間的大小,假設(shè)哈希表的大小是所含 有的表項(xiàng)數(shù)目的兩倍,那么存儲(chǔ)空間為M《18.8xl0《x2-376/:5。這兩個(gè)數(shù)據(jù) 與現(xiàn)有的DFA算法相比較都是非常小的,所以本發(fā)明方法在存儲(chǔ)空間上來(lái) 說(shuō)是很有優(yōu)勢(shì)的。本發(fā)明方法大大提高了搜索速度,搜索速度的提高在于在每一步時(shí)都需 要很短的時(shí)間里得到下一狀態(tài),和需要幾步才能完成。 一般的方式,是通過(guò) 為狀態(tài)機(jī)提供哈希表,每一步的時(shí)間就是存儲(chǔ)單元的訪問(wèn)時(shí)間,對(duì)于DFA 算法來(lái)說(shuō),由于需要使用很大的存儲(chǔ)器,所以目前只有類(lèi)似DDRRAM的存 儲(chǔ)器才能滿(mǎn)足速度和容量上的要求,如果訪問(wèn)速度在40納秒左右,搜索URL 字符串的速度可以達(dá)到200Mbps。當(dāng)應(yīng)用本發(fā)明方法,只需要很少的存儲(chǔ)空 間,可以使用內(nèi)容尋址存儲(chǔ)器(CAM),如杲訪問(wèn)速度在10納秒左右,那么 搜索速度可以達(dá)到8 Gbps。如果在SRAM中應(yīng)用哈希表進(jìn)行轉(zhuǎn)變計(jì)算,10 個(gè)訪問(wèn)都查詢(xún)哈希表,每一個(gè)訪問(wèn)時(shí)間為5納秒左右,那么搜索速度可以達(dá) 到4Gbps。由此可見(jiàn),采用本發(fā)明方法的搜索速度比傳統(tǒng)的DFA算法快很多。本發(fā)明的有益效果在于,能夠更快速的模式匹配,并且節(jié)省存儲(chǔ)器,更 快速的濾除收斂速度,應(yīng)用于防火墻等應(yīng)用中能夠大幅度的提高其性能。以上具體實(shí)施方式
僅用于說(shuō)明本發(fā)明,而非用于限定本發(fā)明。
權(quán)利要求
1.一種分段模式匹配方法,其特征在于,步驟1,根據(jù)模式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將模式字符串劃分成至少一個(gè)關(guān)鍵字字符串片段,由編譯器利用現(xiàn)有匹配算法規(guī)則將所述關(guān)鍵字字符串片段生成關(guān)鍵字樹(shù),所述關(guān)鍵字樹(shù)的每個(gè)節(jié)點(diǎn)都包含至少一個(gè)關(guān)鍵字字符串片段,該節(jié)點(diǎn)的分支條件是另一個(gè)關(guān)鍵字字符串片段;步驟2,根據(jù)模式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將用戶(hù)輸入的待處理字符串劃分成至少一個(gè)待處理字符串片段,作為狀態(tài)機(jī)的輸入;步驟3,由所述狀態(tài)機(jī)根據(jù)所述現(xiàn)有匹配算法將所述待處理字符串片段在所述關(guān)鍵字樹(shù)節(jié)點(diǎn)中進(jìn)行匹配操作;步驟4,如果在匹配的所述關(guān)鍵字樹(shù)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中具有模式匹配成功的標(biāo)志,則記錄或者輸出該匹配的模式ID;步驟5,如果所有所述待處理的字符串片段處理完畢,則結(jié)束,否則在所述狀態(tài)機(jī)中處理下一個(gè)所述待處理字符串片段,重復(fù)步驟3-5。
2. 根據(jù)權(quán)利要求1所述的一種分段模式匹配方法,其特征在于所述步 驟3中,使用哈希算法或者二分法將待處理字符串片段與節(jié)點(diǎn)分支條件進(jìn)行 字符串之間的匹配。
3. 根據(jù)權(quán)利要求1所述的一種分段模式匹配方法,其特征在于還包括 一排序步驟,在步驟1中,將待處理字符串分段后,由一排序單元將所述關(guān)鍵字字符 串片段按照預(yù)定的順序排序,并輸入所述編譯器,由所述編譯器生成關(guān)鍵字 樹(shù);在步驟2中,將待處理字符串分割成至少一個(gè)待處理字符串片段后,由以進(jìn)行步驟3至步驟5。
4. 根據(jù)權(quán)利要求1所述的一種分段模式匹配方法,其特征在于還包括 一合并步驟在步驟l中,將模式字符串分段后,按照下述合并規(guī)則由一合并單元將 所述關(guān)鍵字字符串片段合并成新的關(guān)鍵字字符串片段將所述關(guān)鍵字樹(shù)同一 支路中相鄰的只具有一個(gè)分支的節(jié)點(diǎn)合并;或者將上述合并的節(jié)點(diǎn)與其最后 一個(gè)節(jié)點(diǎn)相鄰的,并且具有至少兩個(gè)分支的節(jié)點(diǎn)合并;合并后輸入所述編譯 器,由編譯器重新生成關(guān)鍵字樹(shù);在步驟2中,將待處理字符串分段后,按照上述合并規(guī)則,由所述合并 單元將所述待處理字符串片段合并成由至少一個(gè)待處理字符串片段組成的 新的待處理字符串片段,作為所述狀態(tài)機(jī)的輸入。
5. 根據(jù)權(quán)利要求3所述的一種分段模式匹配方法,其特征在于還包括 一合并步驟在步驟l中,將所述關(guān)鍵字字符串片段排序后,按照下述合并規(guī)則由一 合并單元將所述關(guān)鍵字字符串片段合并成新的關(guān)鍵字字符串片段將所述關(guān) 鍵字樹(shù)同一支路中相鄰的只具有一個(gè)分支的節(jié)點(diǎn)合并;或者將上述合并的節(jié) 點(diǎn)與其最后一個(gè)節(jié)點(diǎn)相鄰的,并且具有至少兩個(gè)分支的節(jié)點(diǎn)合并;合并后輸 入所述編譯器,由編譯器重新生成關(guān)鍵字樹(shù);在步驟2中,將所述待處理字符串片段排序后,按照上述合并規(guī)則由所 述合并單元將所述待處理字符串片段合并成由至少 一個(gè)待處理字符串片段 組成的新的待處理字符串片段,作為所述狀態(tài)機(jī)的輸入。
6. 根據(jù)權(quán)利要求3所述的一種分段模式匹配方法,其特征在于所述預(yù) 定順序包括,按照所述關(guān)鍵字字符串片段和所述待處理字符串片段讀入的先 后順序,或者片段的語(yǔ)法結(jié)構(gòu)進(jìn)行排序,排序后所述鍵字字符串片段和所述 待處理字符串片段的順序相同。
7. —種分段模式匹配裝置,其特征在于包括,分段器,用于根據(jù)模式字符串中的特殊符號(hào)或者根據(jù)語(yǔ)言結(jié)構(gòu)將模式字 字符串和待處理字符串分段;編譯器,與狀態(tài)才;i4目連接,用于將所述關(guān)鍵字字符串片段生成關(guān)鍵字樹(shù);所述狀態(tài)機(jī),接收所述分段器傳送的待處理字符串片段,利用現(xiàn)有匹配 算法將所述待處理字符串片段在所述關(guān)鍵字樹(shù)節(jié)點(diǎn)中進(jìn)行匹配操作;輸出單元與所述狀態(tài)機(jī)相連接,用于輸出與所述待處理字符串的匹配模 式編號(hào)。
8. 根據(jù)權(quán)利要求7所述的一種分段模式匹配裝置,其特征在于還包括 一排序單元,用于將由所述分段器輸出的至少2個(gè)待處理字符串片段和所述 關(guān)鍵字字符串片段按照預(yù)定順序分別進(jìn)行排序,將排序后的所述待處理字符 串片段輸入所述狀態(tài)機(jī),將排序后的所述關(guān)鍵字字符串片段輸入所述編譯 器。
9. 根據(jù)權(quán)利要求7所述的一種分段模式匹配裝置,其特征在于還包括 一合并單元,用于合并所述待處理字符串片段并傳送給所述狀態(tài)機(jī),合并所 迷關(guān)鍵字字符串片段并傳送給所述編譯器。
10. 根據(jù)權(quán)利要求7所述的一種分段模式匹配裝置,其特征在于還包括 一合并單元,用于合并所述經(jīng)過(guò)排序單元的待處理字符串片段,并傳送給所 述狀態(tài)機(jī),合并所述經(jīng)過(guò)排序單元的關(guān)鍵字字符串片段,并傳送給所述編譯 器。
全文摘要
本發(fā)明涉及字符串模式匹配,具體的講是一種分段模式匹配方法及其裝置。為了解決現(xiàn)有模式匹配的資源消耗大,硬件要求高的缺點(diǎn),本發(fā)明方法為,根據(jù)預(yù)定規(guī)則將關(guān)鍵字字符串分割成至少一個(gè)關(guān)鍵字字符串片段,將所述關(guān)鍵字字符串片段生成關(guān)鍵字樹(shù);根據(jù)所述預(yù)定規(guī)則將用戶(hù)輸入的待處理字符串分割成至少一個(gè)待處理字符串片段,作為狀態(tài)機(jī)的輸入;由所述狀態(tài)機(jī)根據(jù)AC匹配算法將所述待處理字符串片段在所述關(guān)鍵字樹(shù)節(jié)點(diǎn)中進(jìn)行匹配操作,每個(gè)節(jié)點(diǎn)分支的判斷條件都是所述關(guān)鍵字字符串片段;如果所述待處理字符串片段匹配成功,則返回該匹配的模式ID。本發(fā)明的有益效果在于,能夠提高字符串模式匹配的效率,并且降低了對(duì)硬件資源的要求。
文檔編號(hào)G06F17/30GK101154228SQ200610159310
公開(kāi)日2008年4月2日 申請(qǐng)日期2006年9月27日 優(yōu)先權(quán)日2006年9月27日
發(fā)明者張若淵, 闕開(kāi)良 申請(qǐng)人:西門(mén)子公司