專利名稱:一種多關(guān)鍵詞匹配方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,尤其涉及一種多關(guān)鍵詞匹配方法和裝置。
背景技術(shù):
隨著網(wǎng)絡(luò)應(yīng)用的快速發(fā)展,網(wǎng)絡(luò)環(huán)境日益復(fù)雜,越來越多的來自于應(yīng) 用層的安全威脅(如病毒、垃圾郵件、流氓軟件等)對網(wǎng)絡(luò)安全造成了巨
大的威脅。這些威脅手段封裝在 TCP/IP ( Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)間協(xié)議)協(xié)議的凈荷部分。傳 統(tǒng)防火墻由于僅檢查TCP/IP協(xié)議包頭部分,而不對數(shù)據(jù)包內(nèi)容進行檢查, 因而無法攔截此類安全威脅。
在這種形勢下,如圖l所示,基于報文內(nèi)容特征檢測,關(guān)注報文第四 層以上(特別是應(yīng)用層)的安全網(wǎng)關(guān)設(shè)備如內(nèi)容安全防火墻、入侵檢測系 統(tǒng)、病毒網(wǎng)關(guān)、起J及郵件網(wǎng)關(guān)、UTM ( United Threat Management,統(tǒng)一威 脅管理)等日益凸顯其重要性。而模式匹配算法作為特征檢測的重要手段, 安全網(wǎng)關(guān)中主要性能瓶頸之一 ,對其功能和性能的要求越來越高。
多模式匹配又稱為多關(guān)鍵詞匹配,是計算機科學(xué)領(lǐng)域中的基本問題之 一。跟普通單模式匹配算法相對的,掃描的時候針對的是所有預(yù)置的特征 進行掃描,通過對待掃描內(nèi)容的一次掃描,獲得所有預(yù)置的特征是否在待 掃描內(nèi)容中出現(xiàn)的信息。而對普通的單模式匹配算法,若有多條預(yù)置特征, 則需對待掃描內(nèi)容進行多次掃描。
多模式匹配算法解決的問題就是快速而準確地判斷待測文本或者網(wǎng)絡(luò) 內(nèi)容中所有出現(xiàn)任意模式的位置。多模式匹配技術(shù)的應(yīng)用領(lǐng)域非常廣泛, 除了已經(jīng)得到廣泛應(yīng)用的防火墻、入侵檢測與防御、病毒檢測和網(wǎng)絡(luò)內(nèi)容 過濾等網(wǎng)絡(luò)安全領(lǐng)域,還擴展到其它學(xué)科和領(lǐng)域,例如信息管理、網(wǎng)絡(luò)搜
索引擎和生物信息學(xué)當中的基因序列檢測等。因此,研究和發(fā)展多關(guān)鍵詞 匹配技術(shù)具有很強的學(xué)術(shù)和實際意義,被相關(guān)的學(xué)術(shù)和業(yè)界所關(guān)注。
此外,隨著網(wǎng)絡(luò)規(guī)模的擴大,病毒、攻擊、等手段不斷涌現(xiàn),包含不
合法內(nèi)容的站點日益增加,造成的結(jié)果是進行病毒、攻擊、URL (Uniform Resource Locator,統(tǒng)一資源定位器)過濾等安全應(yīng)用時,其特征庫的規(guī)模 爆炸性增加,現(xiàn)有算法的匹配性能隨著規(guī)則庫的增長逐漸下降,造成相應(yīng) 網(wǎng)關(guān)設(shè)備吞吐量的下降,這跟日益增長的網(wǎng)絡(luò)應(yīng)用以及用戶對網(wǎng)絡(luò)吞吐量 的需求形成了巨大的反差。在通過更換硬件,采用更高頻率更高性能的硬 件產(chǎn)品解決上述反差的同時,對現(xiàn)有模式匹配算法進行優(yōu)化,找到一種更 好的適用于超大規(guī)模特征集下的模式匹配算法是當務(wù)之急。
現(xiàn)有技術(shù)中解決多關(guān)鍵詞匹配的基本思路是釆用B個字節(jié)的數(shù)據(jù)塊(B 一般是采用2~4個字節(jié))通過哈希函數(shù)產(chǎn)生跳躍表,與待測文本作匹配時 根據(jù)這個已經(jīng)產(chǎn)生的跳躍表值移動文本,當不能移動時對可能存在匹配的 關(guān)鍵詞作進一步的驗證。現(xiàn)有技術(shù)是通過啟發(fā)式的規(guī)則來確定數(shù)據(jù)塊的跳 躍值,避開了一些不必要的驗證過程,因而加快了匹配速度?,F(xiàn)有技術(shù)的 優(yōu)點在于具有平均性能好、匹配速度快、占用的內(nèi)存空間小的特點。 在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題 現(xiàn)有技術(shù)中,關(guān)鍵詞數(shù)量增加后,跳躍表中跳躍值為零的項數(shù)會增多, 平均跳躍值會隨之減小,從而無法有效地避免匹配過程中大量不必要的字 符比較;導(dǎo)致文本或網(wǎng)絡(luò)內(nèi)容的匹配速度下降;隨著關(guān)鍵詞數(shù)量的增加, 前綴相同的關(guān)鍵詞也會大量增加,精確匹配過程中不斷重復(fù)匹配相同的前 綴也會導(dǎo)致文本或網(wǎng)絡(luò)內(nèi)容的匹配速度下降。
發(fā)明內(nèi)容
本發(fā)明實施例提供一種多關(guān)鍵詞匹配方法和裝置,用于實現(xiàn)提升匹配算 法的效率。
本發(fā)明實施例提供一種多關(guān)鍵詞匹配方法,包括
對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)中包括
跳躍表、前綴表、子跳躍表和相同前綴長度表; 根據(jù)待匹配內(nèi)所述跳躍表;
當所述跳躍表的跳躍值為零時,根據(jù)前綴表表項,調(diào)用子跳躍表和/或相 同前綴長度表對所述待匹配內(nèi)容進行匹配。
本發(fā)明還提供一種多關(guān)鍵詞匹配裝置,包括
預(yù)處理單元,用于對關(guān)4建詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所 述數(shù)據(jù)結(jié)構(gòu)中包括跳躍表、前綴表、子跳躍表和相同前綴長度表;
跳躍表檢索單元,用于根據(jù)待匹配內(nèi)容檢索所述跳i^;
第一內(nèi)容匹配單元,用于當所述跳躍表檢索單元檢索所述跳躍表的跳躍 值為零時,根據(jù)所述前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對所述 待匹配內(nèi)容進行匹配。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例具有以下優(yōu)點
本發(fā)明實施例通過建立子跳躍表和相同前綴長度表,有效提升了現(xiàn)有 技術(shù)的跳躍能力,加快了精確匹配中出現(xiàn)大量具有相同前綴的關(guān)鍵詞的匹 配速度,極大提升了模式匹配算法的效率。
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實 施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一筒單地介紹,顯而易見地,下 面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講, 在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。 圖1為現(xiàn)有技術(shù)中安全網(wǎng)關(guān)基本組網(wǎng)圖; 圖2為本發(fā)明實施例中關(guān)鍵詞匹配的數(shù)據(jù)結(jié)構(gòu)圖; 圖3為本發(fā)明實施例中一種多關(guān)鍵詞匹配方法的流程圖; 圖4為本發(fā)明實施例中一種多關(guān)鍵詞匹配方法預(yù)處理階段流程圖; 圖5為本發(fā)明實施例中一種多關(guān)鍵詞匹配方法子跳躍表產(chǎn)生過程示例
圖6為本發(fā)明實施例中一種多關(guān)鍵詞匹配方法子跳躍表建立的流程
圖7為本發(fā)明實施例中一種多關(guān)鍵詞匹配方法的內(nèi)容匹配階段流程
圖8為本發(fā)明實施例中單個關(guān)鍵詞與待分析文本或網(wǎng)絡(luò)內(nèi)容中的內(nèi)容
進行字符比較成功的示例圖9為本發(fā)明實施例中單個關(guān)鍵詞與待分析文本或網(wǎng)絡(luò)內(nèi)容進行字符
比4交,匹配不成功的示例圖10為本發(fā)明實施例中多個相同前綴關(guān)鍵詞組與待分析文本或網(wǎng)絡(luò)
內(nèi)容比較過程圖11為本發(fā)明實施例中一種多關(guān)鍵詞匹配裝置結(jié)構(gòu)圖12為本發(fā)明實施例中一種多關(guān)鍵詞匹配裝置又一結(jié)構(gòu)圖13為本發(fā)明實施例中一種多關(guān)鍵詞匹配裝置再一結(jié)構(gòu)圖。
具體實施例方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行 清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而 不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作 出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供一種多關(guān)鍵詞匹配方法,應(yīng)用于文本或網(wǎng)絡(luò)內(nèi)容分析 的大規(guī)模特多關(guān)鍵詞快速匹配系統(tǒng)中,如圖3所示,包括
5301、 對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu) 中包括跳躍表、前綴表、子跳躍表和相同前綴長度表;
5302、 根據(jù)待匹配內(nèi)^^r索所述跳躍表;
5303、 當所述跳躍表的跳躍值為零時,根據(jù)前綴表表項,調(diào)用子跳躍表 和/或相同前綴長度表對所述待匹配內(nèi)容進行匹配。
其中,步驟S301,如圖4所示,具體為
S401、掃描關(guān)鍵詞集合,統(tǒng)計關(guān)鍵詞集合中最短關(guān)鍵詞的長度m, m 為大于或等于4的正整數(shù)。
5402、 建立關(guān)鍵詞集合對應(yīng)的跳躍表。
該步驟中,跳躍表表項的索引由第一哈希函數(shù)用長度為Bl的數(shù)據(jù)塊 產(chǎn)生,其中B1為2或2.5。掃描文本或網(wǎng)絡(luò)內(nèi)容時,根據(jù)跳躍表中的跳躍 值移動搜索窗口。具體產(chǎn)生辦法是首先對每個可能的大小為Bl字節(jié)的 字符串用第 一哈希函數(shù)生成移動表的索引值,并將跳躍表中所有表項的跳 躍值初始化為m-Bl+l;考察第一個關(guān)鍵詞的前m個字節(jié),從m個字節(jié)的 末尾開始依次向前,分別取B1長度的數(shù)據(jù)塊,記它的起始位置為q,對該 數(shù)據(jù)塊用第一哈希函數(shù)產(chǎn)生的索引查跳躍表,得到的跳躍值與m-q中較 小的一個作為該項跳躍表值,如果得到的跳躍值與m-q相同,則將所述 跳躍值或者m-q作為該項跳躍表值。然后逐一考察所有關(guān)鍵詞,按照上 述方法修改跳躍表各項的跳躍值。當關(guān)鍵詞集合中的每個關(guān)鍵詞都處理完 成后,跳躍表的建立過程就結(jié)束了。
5403、 建立關(guān)鍵詞集合對應(yīng)的前綴表。
該步驟中,前綴表表項的索引由第二哈希函數(shù)用長度為B2的數(shù)據(jù)塊 產(chǎn)生,其中B2為2或3??紤]所有關(guān)鍵詞的長度為B2的前綴,將所有具 有相同前綴的關(guān)鍵詞組成的鏈表作為相應(yīng)表項的值。每個表項含有一個頭 節(jié)點,頭節(jié)點中的計數(shù)值為具有相同前綴的關(guān)鍵詞的數(shù)目,可以為0, 1 或大于1。根據(jù)前綴表表項中頭節(jié)點的計數(shù)值的不同,對關(guān)鍵詞分別作不 同的處理。具體為
(1) 前綴表表項中頭節(jié)點的計數(shù)值為0的,不用作任何處理;
(2) 前綴表表項中頭節(jié)點計數(shù)值為1的,為這個關(guān)鍵詞建立子跳躍表。
(3) 前綴表表項中頭節(jié)點計數(shù)值大于1的,首先對該組關(guān)鍵詞按字典 序排序;然后建立相同前綴長度表;最后用與上述(2)步驟相同的方法為 該組中的每個關(guān)4建詞建立相對應(yīng)的子跳躍表。
步驟s403中,(2 )( 3 )所描述的為關(guān)鍵詞建立子跳躍表的方法具體為
(1) 初始化所有子跳躍表項為0;
(2) 前m項的表值仍然保持O不變(這樣設(shè)置的原因是在搜索過程 中,關(guān)鍵詞前m個字節(jié)對應(yīng)的子跳躍表值沒有意義,因此將其設(shè)為O);
(3) 將一個大小為m的窗口置于上述關(guān)鍵詞的第二個字節(jié)處,對窗 口中后B1個字節(jié)用第一哈希函數(shù)產(chǎn)生索引查找跳躍表,得到跳躍值為x, 若跳躍值x為零,則子跳躍表建立過程結(jié)束;若跳躍值x不為零,則該子 跳躍表的m+l項跳躍值為x,并將窗口移動x個字節(jié)。轉(zhuǎn)(4)繼續(xù)查找 跳躍表的過程;
(4) 根據(jù)當前窗口后Bl個字節(jié)查找跳躍表,若跳躍值不為零,則窗 口中最后一個字符所對應(yīng)的子跳躍表的跳躍值為上述查找到的跳躍表的跳 躍值,然后重復(fù)本步驟;若查找到的跳躍表中的跳躍值為零或窗口到達關(guān) 鍵詞最末端,轉(zhuǎn)到(5);
(5) 從第m + 2項開始,子跳躍表的每一項跳躍值等于當前該項跳躍 值與前一項跳躍值之和,到此該關(guān)鍵詞對應(yīng)的子跳躍表產(chǎn)生完畢。
上述步驟s403中(3)步驟所述描述的為關(guān)鍵詞建立相同前綴長度表 的方法具體為
(l)找出第一和第二個關(guān)鍵詞的最長相同前綴子串,并把該子串長度 記錄在相同前綴長度表的第 一項中。
(2 )依次找到后面的相鄰關(guān)鍵詞的最長相同前綴子串,并將其值記錄 在相應(yīng)的相同前綴長度表項中。
(3)用與頭節(jié)點計數(shù)值為1的步驟相同的方法為該組中的每個關(guān)鍵詞 建立相對應(yīng)的子跳躍表。
下面以關(guān)鍵詞"abcdefghijklmn,,為例說明子跳躍表的建立過程,如圖 5所示為子跳躍表產(chǎn)生過程示例,該子跳躍表的建立具體步驟如圖6所示, 包括
5601、 初始化所有關(guān)鍵詞對應(yīng)的子跳躍表項為0。
5602、 保持前m項的表值為0不變
5603、 窗口 w是長度為Bl的用于作第一哈希函數(shù)的數(shù)據(jù)塊窗口,用 得到的索引查找跳躍表得到子跳躍表中e所對應(yīng)的項跳躍值為3,窗口移 動3個字符,窗口移動到wl。5604、 窗口為wl,查找跳躍表得到h對應(yīng)的子跳躍表的跳躍值為2, 窗口移動到w2,查找跳躍表得到j(luò)對應(yīng)的子跳躍表的跳躍值為2。
5605、 從第m+2項開始,子跳躍表每一項的跳躍值等于當前值與前一 個跳躍值的和。
在本發(fā)明實施例中,在對待匹配內(nèi)容進行預(yù)處理階段后,進入內(nèi)容匹 配階段,如圖7所示,包括以下步驟
5701、 將一個大小為m的窗口置于待匹配內(nèi)容的開始處;
5702、 對窗口內(nèi)的后Bl個字符進行第一哈希運算,用得到的哈希值 檢索跳躍表,若對應(yīng)表項的跳躍值不為零,則按照跳躍值移動窗口,重復(fù) 此步驟直到窗口到達待分析的文本或網(wǎng)絡(luò)內(nèi)容的最末端。
5703、 若跳躍表中的跳躍值為零,則對根據(jù)窗口中前B2個字符進行 第二哈希運算,用得到的哈希值檢索前綴表,根據(jù)前綴表表項中的頭節(jié)點 計數(shù)值的不同,分別進行三種不同的處理。
該步驟中,三種不同的處理具體包括
(1) 若前綴表的頭節(jié)點計數(shù)值為0,則窗口向右移動一個字符,轉(zhuǎn)到 步驟S702繼續(xù)查找;
(2) 若前綴表的頭節(jié)點計數(shù)值為1,將該表項關(guān)聯(lián)詞的關(guān)鍵詞與待匹 配內(nèi)容中的相應(yīng)字段進行字符比較,如果匹配成功就報告一次匹配,并記 錄該關(guān)鍵詞最后一個字符對應(yīng)的子跳躍表值,如圖8所示,當匹配成功時, 應(yīng)記錄的子跳躍表位置Xn,所對應(yīng)的子跳躍表值Fn;如果匹S己在關(guān)鍵詞 中間的某個字符匹配失敗,就記錄匹配失敗字符的前一個字符所對應(yīng)的子 跳躍表值,如圖9所示。最后根據(jù)記錄的子跳躍表值移動窗口,然后轉(zhuǎn)到 步驟S702繼續(xù)查找;
(3) 若前綴表的頭節(jié)點計數(shù)值大于1,要將該表項關(guān)聯(lián)的所有關(guān)鍵詞 逐一與待分析的文本或網(wǎng)絡(luò)內(nèi)容中的相應(yīng)字段進行字符比較。本關(guān)鍵詞組 中第一個關(guān)鍵詞比較完畢后,根據(jù)步驟(2)中的方法記錄該關(guān)鍵詞對應(yīng)的 子跳躍表項位置及此位置上的子跳躍表值;然后比較第二個關(guān)鍵詞,然后 將第二個關(guān)鍵詞對應(yīng)的子跳躍表項位置及此位置上的子跳躍表值,將此跳 躍表位置與前一個子跳躍表位置比較,取最右的位置及其對應(yīng)的子跳躍表 值。依此類推,選擇所有關(guān)鍵詞中最右位置對應(yīng)的子跳躍表值,根據(jù)這個
值移動窗口,然后轉(zhuǎn)到步驟S702繼續(xù)查找。
其中,將某一表項所關(guān)聯(lián)的所有關(guān)鍵詞逐一與待匹配內(nèi)容進行字符比 較的方法,包括
首先,從第一個關(guān)鍵詞Pl開始與文本或網(wǎng)絡(luò)內(nèi)容T比較,設(shè)關(guān)鍵詞 Pi的長度為li,搜索指針為J(0<J<li),文本T的搜索指針為H。當Pi在 第J個位置與T匹配失敗,若J〉li就"^艮告匹配。
其次,根據(jù)Pi和Pi+1相同前綴子串的長度same-pos [i]與J的不同關(guān) 系分別處理(其中相同前綴長度表用same-pos []表示,same-pos [i]表示Pi 與Pi+1的相同前綴長度),具體為
1) 若same-pos [i] = J,說明Pi和Pi+1從第J個位置開始出現(xiàn)不同的, 那么Pi+1可以從J位置開始與T進行精確比較,即i-i+l, J不變,T的搜 索指針H也不變。
2) 若same-pos [i] < J,說明Pi和Pi+1相同部分長度小于Pi已匹配的 長度,那么Pi+1應(yīng),人same-pos [i]與T開始匹配,即i = i+l , J = same畫pos [i], T的搜索指針回退J-same-pos [i]個位置開始搜索,即H = H - (J-same-pos[i])。
3) 若same-pos [i] > j,說明Pi與T匹配失敗的位置大于Pi和Pi+1相 同部分長度,那么Pi+1應(yīng)該從J開始與T精確匹配,即i—十l, J不變,T 的搜索指針H也不變。雖然可以知道Pi+l與T必定也會在J位置匹配失 敗,但是如果略過Pi+l直接判斷Pi+2開始匹配的位置,情況會非常復(fù)雜。 所以要通過Pi+l匹配結(jié)果進一步判斷Pi+2開始匹配的位置。
反復(fù)執(zhí)行上面的搜索步驟,直到窗口到達待分析文本或網(wǎng)絡(luò)內(nèi)容的最 末端完成對文本或網(wǎng)絡(luò)內(nèi)容的分析。
下面用一個圖例說明上述精確比較過程,如圖IO所示。圖中表示關(guān)鍵
詞P1、 P2、 P3與文本T精確匹配的圖示,具體為
1) Pl與T從xl(ti+1)比較,在x6(ti+6)位置匹配失敗。
2) 相同前綴長度表第一項為6說明xlx2x3x4x5 = yly2y3y4y5,而從 Pl與T的比較結(jié)果知道x 1x2x3x4x5= ti+lti+2ti+3ti+4ti+5 ,那么 yly2y3y4y5= ti+lti+2ti+3ti+4ti+5。所以P2可以直4妄從y6開始與T的ti+6 比較。由于y6#x6andx6 = ti+6,比較會在y6位置失敗。
3 )根據(jù)相同前綴長度表第二項為8 ,知道yly2y3y4y5y6y7= Zlz2z3z4z5z6z7, P2與T匹配的結(jié)果是yly2y3y4y5= ti+lti+2ti+3ti+4ti+5 而y6弁i+6,那么P3可以z6開始與T的ti+6開始比專支。
本發(fā)明實施例提供的一種多關(guān)鍵詞匹配方法,通過建立子跳躍表和相 同前綴長度表,有效提升了現(xiàn)有技術(shù)的跳躍能力,加快了精確匹配中出現(xiàn) 大量具有相同前綴的關(guān)鍵詞的匹配速度,極大提升了模式匹配算法的效率。
本發(fā)明實施例還提供一種多關(guān)鍵詞匹配裝置,如圖ll所示,包括預(yù)處 理單元10、跳躍表檢索單元20以及第一內(nèi)容匹配單元30,具體為
預(yù)處理單元10,用于對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu), 所述數(shù)據(jù)結(jié)構(gòu)中包括跳躍表、前綴表、子跳躍表和相同前綴長度表;
跳躍表檢索單元20,用于根據(jù)待匹配內(nèi)^^r索所述跳躍表;
第一內(nèi)容匹配單元30,用于當所述跳躍表檢索單元20檢索所述跳躍表的 跳躍值為零時,根據(jù)所述前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對 所述待匹配內(nèi)容進行匹配。
其中,預(yù)處理單元10,如圖12所示,包括
跳躍表建立子單元11,用于為關(guān)鍵詞集合建立對應(yīng)的跳躍表;該單元在 掃描待匹配內(nèi)容時,根據(jù)跳躍表中的跳躍值移動搜索窗口。
前綴表建立子單元12,用于為關(guān)鍵詞集合建立對應(yīng)的前綴表。
根據(jù)該前綴表建立子單元12中前綴表表項中頭節(jié)點計數(shù)值的不同分別為 每個關(guān)鍵詞創(chuàng)建子跳躍表建立子單元13和相同前綴長度表建立子單元14.
子跳躍表建立子單元13,用于為關(guān)鍵詞建立對應(yīng)的子跳躍表;
相同前綴長度表建立子單元14,用于為每個關(guān)鍵詞建立對應(yīng)的相同前綴 長度表。
具體的,跳躍表4全索單元20,如圖13所示,還包括
窗口確定子單元21,用于將一個大小為m的窗口置于所述待匹配內(nèi)容的 開始處,所述m為所有關(guān)鍵詞中最短關(guān)鍵詞的長度;
跳躍表檢索子單元22,用于對窗口內(nèi)預(yù)定的后B1個字節(jié)進行運算,用 得到的運算結(jié)果檢索跳躍表。
上述第一內(nèi)容匹配單元30,具體包括
當所述跳躍表檢索子單元22檢索所述跳躍表的跳躍值為零時,根據(jù)窗口 中前B2個字節(jié)查找前綴表,
當所述前綴表表項的頭節(jié)點計數(shù)值為0時,表示沒有與待匹配內(nèi)容相同 的關(guān)鍵詞,窗口向右移動一個字符,并利用得到的哈希值檢索跳躍表;
當前綴表表項的頭節(jié)點計數(shù)值為1時,將所述表項關(guān)聯(lián)的關(guān)鍵詞與待匹 配內(nèi)容的相應(yīng)字段進行字符比較,根據(jù)比較結(jié)果檢索所述關(guān)鍵詞對應(yīng)的子跳 躍表,根據(jù)所述子跳躍表的跳躍值移動窗口,并利用得到的運算結(jié)果檢索跳 躍表;
當前綴表表項的頭節(jié)點計數(shù)值大于1時,依次將所述表項關(guān)聯(lián)的所有關(guān) 鍵詞與待匹配內(nèi)容的相應(yīng)字段進行字符比較,每次進行下一個關(guān)鍵詞與待匹 配內(nèi)容比較前,要根據(jù)當前比較結(jié)果和相應(yīng)的相同前綴長度值決定下一個關(guān) 鍵詞與待匹配內(nèi)容比較的開始位置。在比較過程中,每個關(guān)鍵詞比較結(jié)束時 都要記錄比較失敗的位置及其對應(yīng)的子跳躍表值,最后找出比較失敗的最右 位置及其對應(yīng)的子跳躍表值,根據(jù)所述的跳躍值移動窗口,并利用得到的運 算結(jié)果檢索跳躍表;
重復(fù)上述過程,直到窗口到達待匹配內(nèi)容的最末端。 本發(fā)明實施例提供的一種多關(guān)鍵詞匹配裝置還包括 第二內(nèi)容匹配單元40,用于當所述跳躍表檢索單元20檢索所述跳躍表 的跳躍值不為零,則按照跳躍值移動窗口并重復(fù)該過程。
本發(fā)明實施例提供的一種多關(guān)鍵詞匹配裝置,通過建立子跳躍表和相 同前綴長度表,有效提升了現(xiàn)有技術(shù)的跳躍能力,加快了精確匹配中出現(xiàn) 大量具有相同前綴的關(guān)鍵詞的匹配速度,極大提升了模式匹配算法的效率。 通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本 發(fā)明可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來 實現(xiàn)基于這樣的理解,本發(fā)明的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,
該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM, U盤, 移動硬盤等)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計 算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本技術(shù)領(lǐng)域的 普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進 和潤飾,這些改進和潤飾也應(yīng)視為本發(fā)明的保護范圍。
權(quán)利要求
1、一種多關(guān)鍵詞匹配方法,其特征在于,包括對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)中包括跳躍表、前綴表、子跳躍表和相同前綴長度表; 根據(jù)待匹配內(nèi)容檢索所述跳躍表; 當所述跳躍表的跳躍值為零時,根據(jù)前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對所述待匹配內(nèi)容進行匹配。
2、 如權(quán)利要求l所述的方法,其特征在于,建立所述跳躍表包括 對每個可能的大小為Bl字節(jié)的字符串生成移動表的索引值,并將所述跳躍表中所有表項的跳躍值初始化為m-Bl+l;所述m為所有關(guān)鍵詞中最短關(guān)鍵 詞的長度,所述B1為2或2.5;考察每一個關(guān)鍵詞的前m個字節(jié),從m個字節(jié)的末尾開始依次向前,分 別取B1長度的數(shù)據(jù)塊,所述數(shù)據(jù)塊的起始位置為q,對所述數(shù)據(jù)塊產(chǎn)生的索 引查跳躍表,得到的跳躍值與m-q中較小的一個作為該項跳躍表值。
3、 如權(quán)利要求l所述的方法,其特征在于,建立所述前綴表包括 使用預(yù)定長度為B2的數(shù)據(jù)塊產(chǎn)生前綴表表項的索引,將具有相同前綴關(guān)鍵詞組成的鏈表作為相應(yīng)表項的值,所述B2為2或3。
4、 如權(quán)利要求3所述的方法,其特征在于,還包括對所述前綴表中的 每個入口加入頭節(jié)點并進行處理,所述處理具體為入口下只有一個關(guān)鍵詞時,所述入口的頭節(jié)點計數(shù)為1,并為所述關(guān)鍵詞建立所述子跳躍表;入口下有多個關(guān)鍵詞時,關(guān)鍵詞個數(shù)為s,此入口頭節(jié)點的計數(shù)為s,并 對該組關(guān)鍵詞按字典序排序,然后建立相同前綴長度表,最后為每個所述關(guān) 鍵詞建立相對應(yīng)的所述子跳躍表。
5、 如權(quán)利要求4所述的方法,其特征在于,所述為關(guān)4定詞建立所述子跳 躍表包括初始化所有關(guān)4建詞對應(yīng)的子跳躍表項為0;保持前m項的表值為0不變,所述m為所有關(guān)鍵詞中最短關(guān)鍵詞的長度; 將一個大小為m的窗口置于關(guān)鍵詞的第二字節(jié)處,對窗口中預(yù)定的后B1 個字節(jié)產(chǎn)生索引查找跳躍表,得到跳躍值x;跳躍值x不為零時,設(shè)置所述子跳il^的m+l項跳躍值為x,并將窗口 移動x個字節(jié);根據(jù)當前窗口后B1個字節(jié)查找跳躍表,若跳躍值不為零,則窗口中最后 一個字符所對應(yīng)所述子跳躍表的跳躍值為上述查找到的跳躍表的跳躍值,并 重復(fù)本步驟直至查找到跳JA4中的跳躍值為零或窗口到達關(guān)鍵詞最末端;若查找到的跳躍表中的跳躍值為零或窗口到達關(guān)鍵詞最末端,則從第m + 2項開始,子跳躍表的每一項跳躍值等于當前項跳躍值與前一項跳躍值之 和。
6、 如權(quán)利要求4所述的方法,其特征在于,所述建立所述相同前綴長度 表包括獲取相鄰關(guān)鍵詞的最長相同前綴子串,并將其值記錄在相應(yīng)的相同前綴 長度表項中。
7、 如權(quán)利要求4所述的方法,其特征在于,所述頭節(jié)點具體為具有相同 前綴的關(guān)鍵詞的數(shù)目,為0、 l或大于l。
8、 如權(quán)利要求l所述的方法,其特征在于,所述根據(jù)待匹配內(nèi)容檢索所 述跳躍表包括將一個大小為m的窗口置于待匹配內(nèi)容的開始處,所述m為所有關(guān)鍵詞 中最短關(guān)鍵詞的長度;對窗口內(nèi)預(yù)定的后Bl個字節(jié)進行運算,用得到的運算結(jié)果檢索跳躍表。
9、 如權(quán)利要求l所述的方法,其特征在于,所述當所述跳躍表的跳躍值 為零時,根據(jù)前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對所述待匹配 內(nèi)容進行匹配具體包括當所述跳躍表的跳躍值為零時,根據(jù)窗口中前B2個字節(jié)查找前綴表, 當所述前綴表表項的頭節(jié)點計數(shù)值為0時,表示沒有與待匹配內(nèi)容相同 的關(guān)鍵詞,窗口向右移動一個字符,并利用得到的運算值檢索跳躍表;當所述前綴表表項的頭節(jié)點計數(shù)值為1時,將所述表項關(guān)聯(lián)的關(guān)鍵詞與 待匹配內(nèi)容的相應(yīng)字段進行字符比較,根據(jù)比較結(jié)果檢索所述關(guān)鍵詞對應(yīng)的 子跳躍表,根據(jù)所述子跳躍表的跳躍值移動窗口,并利用得到的運算結(jié)果檢索跳躍表;當所述前綴表表項的頭節(jié)點計數(shù)值大于1時,依次將所述表項關(guān)聯(lián)的所 有關(guān)鍵詞與待匹配內(nèi)容的相應(yīng)字段進行字符比較,每次進行下一個關(guān)鍵詞與 待匹配內(nèi)容比較前,要根據(jù)當前比較結(jié)果和相應(yīng)的相同前綴長度值決定下一 個關(guān)鍵詞與待匹配內(nèi)容比較的開始位置;在比較過程中,每個關(guān)鍵詞比較結(jié) 束時都要記錄比較失敗的位置及其對應(yīng)的子跳躍表值,最后找出比較失敗的 最右位置及其對應(yīng)的子跳躍表值,根據(jù)所述的跳躍值移動窗口,并利用得到 的運算結(jié)果檢索跳躍表;重復(fù)上述過程,直到窗口到達待匹配內(nèi)容的最末端。
10、 如權(quán)利要求l所述的方法,其特征在于,還包括當所述跳躍表的跳躍值不為零時,按照所述跳躍值移動窗口并重復(fù)該過 程直到窗口到達待匹配內(nèi)容的最末端。
11、 一種多關(guān)鍵詞匹配裝置,其特征在于,包括預(yù)處理單元、跳躍表檢 索單元,以及第一內(nèi)容匹配單元;預(yù)處理單元,用于對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所 述數(shù)據(jù)結(jié)構(gòu)中包括跳躍表、前綴表、子跳躍表和相同前綴長度表; 跳躍表檢索單元,用于根據(jù)待匹配內(nèi)容檢索所述跳躍表; 第一內(nèi)容匹配單元,用于當所述跳躍表檢索單元檢索所述跳躍表的跳躍 值為零時,根據(jù)所述前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對所述 待匹配內(nèi)容進行匹配。
12、 如權(quán)利要求11所述的裝置,其特征在于,所述預(yù)處理單元包括 跳躍表建立子單元,用于對關(guān)鍵詞集合建立對應(yīng)的跳il^; 前綴表建立子單元,用于對關(guān)鍵詞集合建立對應(yīng)的前綴表; 子跳躍表建立子單元,用于對關(guān)鍵詞集合建立對應(yīng)的子跳躍表;相同前綴長度表建立子單元,用于對關(guān)鍵詞集合建立對應(yīng)的相同前綴長 度表。
13、 如權(quán)利要求11所述的裝置,其特征在于,所述跳躍表檢索單元包括: 窗口確定子單元,用于將一個大小為m的窗口置于所述;f寺匹配內(nèi)容的開始處,所述m為所有關(guān)鍵詞中最短關(guān)鍵詞的長度;跳躍表檢索子單元,用于對窗口內(nèi)預(yù)定的后B1個字節(jié)進行運算,用得到 的運算結(jié)果檢索跳躍表。
14、 如權(quán)利要求11所述的裝置,其特征在于,所述第一內(nèi)容匹配單元具 體包括當所述跳躍表的跳躍值為零時,根據(jù)窗口中前B2個字節(jié)查找前綴表, 當所述前綴表表項的頭節(jié)點計數(shù)值為0時,表示沒有與待匹配內(nèi)容相同的關(guān)鍵詞,窗口向右移動一個字符,并利用得到的哈希值檢索跳躍表;前綴表表項的頭節(jié)點計數(shù)值為1時,將所述表項關(guān)聯(lián)的關(guān)鍵詞與待匹配內(nèi)容的相應(yīng)字段進行字符比較,根據(jù)比較結(jié)果檢索所述關(guān)鍵詞對應(yīng)的子跳躍表,根據(jù)所述子跳躍表的跳躍值移動窗口,并利用得到的運算結(jié)果檢索跳躍表;前綴表表項的頭節(jié)點計數(shù)值大于1時,依次將所述表項關(guān)聯(lián)的所有關(guān)鍵 詞與待匹配內(nèi)容的相應(yīng)字段進行字符比較,每次進行下一個關(guān)鍵詞與待匹配 內(nèi)容比較前,要根據(jù)當前比較結(jié)果和相應(yīng)的相同前綴長度值決定下一個關(guān)鍵 詞與待匹配內(nèi)容比較的開始位置。在比較過程中,每個關(guān)鍵詞比較結(jié)束時都 要記錄比較失敗的位置及其對應(yīng)的子跳躍表值,最后找出比豐支失敗的最右位 置及其對應(yīng)的子跳躍表值,根據(jù)所述的跳躍值移動窗口,并利用得到的運算 結(jié)果檢索跳躍表;重復(fù)上述過程,直到窗口到達待匹配內(nèi)容的最末端。
15、 如權(quán)利要求11所述的裝置,其特征在于,還包括第二內(nèi)容匹配單元,用于當所述跳躍表檢索單元檢索所述跳躍表的跳躍 值不為零,則按照跳躍值移動窗口并重復(fù)該過程。
全文摘要
本發(fā)明的實施例公開了一種多關(guān)鍵詞匹配方法和裝置。該方法包括對關(guān)鍵詞集合進行預(yù)處理并建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)中包括跳躍表、前綴表、子跳躍表和相同前綴長度表;根據(jù)待匹配內(nèi)容檢索所述跳躍表;當所述跳躍表的跳躍值為零時,根據(jù)前綴表表項,調(diào)用子跳躍表和/或相同前綴長度表對所述待匹配內(nèi)容進行匹配。通過使用本發(fā)明的實施例,有效提升了現(xiàn)有技術(shù)的跳躍能力,加快了精確匹配中出現(xiàn)大量具有相同前綴的關(guān)鍵詞的匹配速度,極大提升了模式匹配算法的效率。
文檔編號G06F17/30GK101364237SQ200810212218
公開日2009年2月11日 申請日期2008年9月5日 優(yōu)先權(quán)日2008年9月5日
發(fā)明者卞建光, 雪 李, 薛一波 申請人:成都市華為賽門鐵克科技有限公司