两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

快速特征碼掃描的制作方法

文檔序號:6538057閱讀:327來源:國知局
快速特征碼掃描的制作方法
【專利摘要】在字符串字段上掃描特征碼的方法和系統(tǒng)。在一個實施例中,本發(fā)明提供了一種特征碼掃描方法。所述方法包括把一個或多個特征碼處理成一個或多個格式,所述格式包括每個定長特征碼或特征子碼的一個或多個指紋和一個或多個后續(xù)查找數(shù)據(jù)結構,從而使得每個定長特征碼或特征子碼的指紋的數(shù)目等于特征碼掃描操作的步長,并且使得所述特定定長特征碼或特征子碼在任何被掃描的字符串字段中的任何位置上都能被識別,接收特定字符串字段,識別所述特定字符串字段所包括的任何特征碼,包括在每個以掃描步長為間距的位置上掃描所述指紋,和在有一個或多個匹配的指紋的位置上查找所述后續(xù)查找數(shù)據(jù)結構,和輸出任何已識別的特征碼。
【專利說明】快速特征碼掃描
【技術領域】
[0001 ] 本發(fā)明涉及掃描字符串字段中的特征碼。
【背景技術】
[0002]數(shù)字內容的物件(如文件,程序,網(wǎng)頁,電子郵件,互聯(lián)網(wǎng)數(shù)據(jù)包,或數(shù)字圖像)可以包含一個或多個字符串字段。一個字符串字段是一個通常代表文字或可執(zhí)行代碼的數(shù)據(jù)值串。例如,一個互聯(lián)網(wǎng)數(shù)據(jù)包可以包含網(wǎng)址,主機名,超文本傳輸協(xié)定(HTTP)報頭,超文本傳輸協(xié)定報文,電子郵件附件,電子郵件標題和電子郵件內容。一個字符串字段的大小可從幾個字節(jié)到數(shù)百萬以上個字節(jié)。一個字符串特征碼可以是一串特定的完全指明的數(shù)據(jù)值或是特定的數(shù)據(jù)值的表達式(如特定的正則表達式),其目的是用來識別一個字符串物件(如特定的計算機病毒或特定的基因序列)。特征碼可以被存儲在一個征碼數(shù)據(jù)庫中。一個字征碼數(shù)據(jù)庫可以包含多個特征碼。一個字符串特征碼的大小可從幾個字節(jié)到幾千個字節(jié)。
[0003]字符串特征碼和字符串字段都是包含很多基本單元的比特字符串。一個基本單元是最小的有語義的單位,因此通常在特征碼掃描技術中作為掃描單元。一個基本單元的大小由應用而定。例如,英文字符串的基本單位通常是8比特位(即一個字節(jié)),而一個電腦病毒特征碼的基本單位通常是一個字節(jié)或半個字節(jié)。
[0004]每一個特征碼的基本單元可以被指定為等于或不等于某個特定值,或在某個特定范圍內(如在數(shù)字范圍O至9內或英文字母范圍a至z內)。每個基本單元可以為不區(qū)分大小寫或區(qū)分大小寫。每個基本單元可以支持簡單的邏輯運算(如“非”)。此外,每個特征碼可以包括通配符,例如,(一個不定長通配符)或“?”(一個定長通配符),其中表示零個或任意多個任意基本單元和“? ”表示一個任意基本單元。對于每一個不定長特征碼符號,可進一步指明其任意長度范圍。當一個特征碼包括不定長字符,特征碼的長度不定。如果一個特征碼不包括不定長字符,其長度是固定的。
[0005]一個典型的特征碼掃描過程可包括在一字符串字段內的所有可能的位置上,比較所述字符串字段和特征碼數(shù)據(jù)庫中所對應的特征碼。掃描速度通常被特征碼的大小和復雜性限制。此外,掃描速度還受特征碼逐個更新的能力限制。

【發(fā)明內容】

[0006]本發(fā)明實施例提供了在字符串字段上掃描特征碼的方法和系統(tǒng)。一般來說,本發(fā)明一個方面的實施例提供了字符串特征碼掃描方法,所述方法包括把一個或多個特征碼處理成一個或多個格式,所述格式包括每個定長特征碼或不定長特征碼的每個定長特征子碼的一個或多個指紋和一個或多個后續(xù)查找數(shù)據(jù)結構,所述一個或多個指紋包括特定定長特征碼或特征子碼的第J個指紋,所述第J個指紋的第一基本單元在所述特定定長特征碼或特征子碼中的在掃描方向上的位置除以特征碼掃描操作的步長的余數(shù)等于J,從而使得所述指紋的數(shù)目等于特征碼掃描的步長,并且使得所述特定定長特征碼或特征子碼在任何被掃描的字符串字段中的任何位置上都能被識別,其中每個所述指紋包括特定定長特征碼或特征子碼的一個或多個片段,所述一個或多個片段具有在所述特定定長特征碼或特征子碼中的任何地方的特定位置,接收一個由數(shù)據(jù)值組成的特定字符串字段,識別所述特定字符串字段所包括的任何特征碼,包括在每個以掃描步長為間距的位置上,掃描所述特定字符串字段,以查找一個或多個特征碼的一個或多個所述指紋,和在有一個或多個匹配的所述指紋的位置上,查找所述特定字符串字段,以查找一個或多個后續(xù)查找數(shù)據(jù)結構,和輸出所述特定字符串字段中的任何已識別的特征碼。本發(fā)明的所述方面的其它實施例包括所述方法所對應的系統(tǒng),裝置,和計算機軟件產品。
[0007]這些和其它實施例可選地包括一個或多個以下特性。每個定長特征碼或特征子碼有多個指紋,和所述掃描包括在每個以掃描步長為間距的位置上,掃描所述字符串字段,以查找一個或多個特征碼的多個指紋,包括并行查找兩個或兩個以上指紋。特定特征碼的一個或多個指紋中的每個指紋在原空間或在被投影到一個或多個影子空間之后是完全指明的,所述影子空間是比所述原空間格式更廣的空間,所述影子空間通過引入一些模糊性到所述原空間,從而使得一個在特定影子空間的指紋影子對應于一個或多個在所述原空間的指紋。
[0008]所述字符串特征碼掃描方法可進一步包括在每個以掃描步長為間距的位置上,在原空間掃描所述特定字符串字段,以查找一個或多個指紋,和先在每個以掃描步長為間距的位置上,在一個或多個指紋的一個或多個影子空間中的每個影子空間中,掃描所述特定字符串字段,以查找一個或多個指紋,然后再在一個或多個所述影子空間中的至少一個影子空間中有一個或多個已識別的指紋的位置上,在所述原空間中核實已識別的指紋中的一個或兩個。引入一些模糊性到所述原空間進一步包括把原空間的大寫和小寫字母變成一個大小寫相同的字母,把原空間的所有從O至9的數(shù)字變成一個相同的數(shù)字,和把原空間的空格和變成空格或中的一個或多個。
[0009]掃描以查找所述一個或多個特征碼的所述一個或多個指紋可進一步包括使用一個或多個散列表和一個或多個布隆(Bloom)過濾器中的一個或多個進行掃描。掃描以查找所述一個或多個特征碼的所述一個或多個指紋可進一步包括使用一個散列值解復用器和一個指紋長度解復用器中的一個或多個進行掃描。多個特征碼的不同指紋長度的數(shù)目可比所述多個特征碼的不同特征碼長度的數(shù)目少,且所述掃描可進一步包括在每個以掃描步長為間距的位置上,掃描所述特定字符串字段,以查找所述多個特征碼的多個指紋,包括并行查找兩個或兩個以上長度相同的指紋。所述一個或多個指紋可被選擇,從而使得所述指紋的長度被限制為一組覆蓋在一個或多個長度范圍內的一個或多個長度的長度,以提供多分辨率的指紋掃描。每個所述指紋的長度可是特征碼掃描操作的步長的整倍數(shù)。所述字符串特征碼掃描方法可進一步包括使用一個或多個內容尋址存儲器(CAM)和一個或多個有限自動機(FA)中的一個或多個進行掃描,以查找所述一個或多個特征碼的所述一個或多個指紋。
[0010]所述字符串特征碼掃描方法可進一步包括把多個特征碼的多個指紋的每個指紋分解為一個或多個指紋段,從而使得所述特征碼的不同指紋段長度的數(shù)目比所述特征碼的不同指紋長度的數(shù)目少,在每個以掃描步長為間距的位置上,掃描所述特定字符串字段,以查找所述多個指紋段,包括并行查找兩個或兩個以上指紋段,和把已識別的指紋段合成為任何指紋匹配。所有指紋段可具有一個相同的長度,且所述掃描所述特定字符串字段以查找多個指紋段可用一個是所述指紋段長度的整倍數(shù)的特征碼掃描操作的步長。一個說明特定指紋段在任何指紋內的一個或多個可能位置的指紋段位圖可和所述特定指紋段儲存在一起,以用于把已識別的指紋段合成為任何指紋匹配。說明一個或多個可能長度的指紋長度信息可和每個指紋的第一段或每一段儲存在一起,以用于把已識別的指紋段合成為任何指紋匹配。一個或多個有限自動機(FA)可用來把已識別的指紋段合成為任何指紋匹配。
[0011]所述字符串特征碼掃描方法可進一步包括存儲每個指紋的假陽性匹配的概率,在有一個或多個匹配的指紋的位置上,檢查所對應的假陽性匹配的概率,和當所述一個或多個假陽性匹配的概率中的一個假陽性匹配的概率不足夠低時,查找所述特定字符串字段,以查找所述一個或多個后續(xù)查找數(shù)據(jù)結構。所述方法可進一步包括用一個指紋所對應的多個定長特征碼或特征子碼的一個或多個不同的基本單元構建一個差分查找數(shù)據(jù)結構,和查找所述特定字符串字段,以查找所述一個或多個后續(xù)查找數(shù)據(jù)結構,包括差分查找一個已識別的指紋所對應的多個定長特征碼或特征子碼。所述方法可進一步包括把每一個定長特征碼或特征子碼用一個或多個碼膜比特編碼,所述一個或多個碼膜比特包括用于說明一個或多個以下匹配條件的一個或多個碼膜比特:不用匹配,是否區(qū)分大小寫,邏輯非,預定義范圍,邏輯運算,和任意范圍,所述一個或多個碼膜比特包括一個或多個以下碼膜比特:一個或多個基本單元或亞基本單元的碼膜比特,一個或多個特征子碼段的碼膜比特,和一個或多個定長特征碼或特征子碼的碼膜比特,查找所述特定字符串字段,以查找所述一個或多個后續(xù)查找數(shù)據(jù)結構,包括以查找所述被碼膜比特編碼的定長特征碼或特征子碼。所述方法可進一步包括把所述特定字符串字段規(guī)格化,包括把已編碼的特定字符串字段解碼,把已壓縮的特定字符串字段解壓,和把不需要的字符串數(shù)據(jù)刪除中的一個或多個過程。
[0012]一般來說,本發(fā)明的一個方面的實施例提供字符串特征碼掃描方法,所述方法包括把多個特征碼中的每個特征碼分解成一個或多個特征碼段,接收一個由數(shù)據(jù)值組成的特定字符串字段,掃描所述特定字符串字段,以查找所述多個特征碼的所述多個特征碼段,包括并行查找兩個或兩個以上特征碼段,把已識別的特征碼段合成為任何特征碼的匹配,和輸出所述特定字符串字段中的任何已識別的特征碼。本發(fā)明的所述方面的其它實施例包括所述方法所對應的系統(tǒng),裝置,和計算機軟件產品。
[0013]具體實施可包括一個或多個以下特性。掃描以查找所述多個特征碼段可進一步包括使用:一個或多個散列表,一個或多個布隆過濾器,一個或多個有散列值復用或長度復用或兩者的散列表,和一個或多個有散列值復用或長度復用或兩者的布隆過濾器中的一個或多個進行掃描。一個說明特定特征碼段在任何特征碼內的一個或多個可能位置的特征碼段位圖可以和所述特定特征碼段存儲在一起,以用來把已識別的特征碼段合成為任何特征碼匹配。說明一個或多個可能的特征碼長度的特征碼長度信息可進一步和每個特征碼的第一段或每一段儲存在一起,以用于把已識別的特征碼段合成為任何特征碼匹配。一個或多個有限自動機(FA)可被用來把已識別的特征碼段合成為任何特征碼匹配。
[0014]一般來說,本發(fā)明的一個方面的實施例提供字符串特征碼掃描方法,所述方法包括把一個或多個特征碼處理成一個或多個格式,包括把一個或多個特征碼中的每個不定長特征碼分解為多個定長特征子碼和一個或多個不定長特征子碼,接收一個由數(shù)據(jù)值組成的特定字符串字段,識別所述特定字符串字段所包括的任何特征碼,包括掃描所述特定字符串字段,以查找多個所述定長特征碼或特征子碼,和在有一個或多個所述定長特征子碼被識別的位置上,把已識別的所述定長特征子碼合成為任何不定長特征碼,和輸出所述特定字符串字段中的任何已識別的特征碼。處理一個或多個特征碼成一個或多個格式可進一步包括儲存每個定長特征子碼的位置信息到靜態(tài)特征碼合成規(guī)則數(shù)據(jù)庫,所述位置信息包括一個秩序和一個到下一定長特征子碼的距離范圍,和包括或不包括對每對定長特征子碼之間的不定長特征子碼的描述,和所述把已識別的定長特征子碼合成為任何不定長特征碼的匹配進一步包括檢查每個已識別的定長特征子碼的位置信息和核實或不核實每對相鄰定長特征子碼之間的所述不定長特征子碼,和更新一個動態(tài)特征碼合成狀態(tài)表。一個或多個有限自動機(FA)可以被用來把已識別的定長特征子合成為任何不定長特征碼。本發(fā)明的所述方面的其它實施例包括所述方法所對應的系統(tǒng),裝置,和計算機軟件產品。
[0015]—般來說,本發(fā)明的一個方面的實施例提供字符串特征碼掃描方法,所述方法包括為一個或多個字符串物件中的每個字符串物件選擇多個定長特征碼,所述特定字符串物件的多個定長特征碼包括第J個定長特征碼,所述第J個定長特征碼的第一基本單元在所述特定字符串物件中的在掃描方向上的位置除以特征碼掃描操作的步長的余數(shù)等于J,從而使得所述特定字符串物件的定長特征碼的數(shù)目等于特征碼掃描操作的步長,并且使得所述特定字符串物件在任何被掃描的字符串字段中的任何位置上都能被識別,接收一個由數(shù)據(jù)值組成的特定字符串字段,識別所述特定字符串字段所包括的任何字符串物件,包括在每個以掃描步長為間距的位置上,掃描所述特定字符串字段,以查找所述一個或多個字符串物件的所述多個定長特征碼,其中包括并行掃描兩個或兩個以上定長特征碼,和輸出所述特定字符串字段中的任何已識別的字符串物件。所述方法可進一步包括為每個字符串物件選擇多個基于多組不重疊的有序的定長特征碼的不定長特征碼,所述多個不定長特征碼中的每個不定長特征碼包括每組定長特征碼中的一個定長特征碼和一個把一對相鄰的定長特征碼連接起來的不定長特征碼段,從而使得每個字符串物件的特征碼的數(shù)目等于Sn,其中S是掃描步長或每組定長特征碼的特征碼的數(shù)目和η是定長特征碼的組數(shù),和所述識別所述特定字符串字段中的任何字符串物件進一步包括掃描所述特定字符串字段,以查找一個或多個字符串物件的多個不定長特征碼的多個定長特征子碼,和在有一個或多個匹配的定長特征子碼的位置上,把已識別的定長特征子碼合成為任何不定長特征碼。
[0016]一般來說,本發(fā)明的一個方面的實施例提供字符串特征碼掃描方法,所述方法包括為一個或多個字符串物件中的每個字符串物件選擇一個或多個定長特征碼,把所述一個或多個字符串物件的所述一個或多個定長特征碼處理成一個或多個格式,所述格式包括每個定長特征碼的一個或多個指紋和一個或多個后續(xù)查找數(shù)據(jù)結構,所述特定字符串物件的多個指紋包括第J個指紋,所述第J個所述指紋的第一基本單元在所述特定字符串物件中的在掃描方向上的位置除以特征碼掃描操作的步長的余數(shù)等于J,從而使得所述特定字符串物件的指紋數(shù)等于特征碼掃描操作的步長,并且使得所述特定字符串物件在任何被掃描的字符串字段中的任何位置上都能被識別,其中每個所述指紋包括所述特定字符串物件的所述一個或多個定長特征碼中的特定定長特征碼的一個或多個片段,所述一個或多個片段具有在所述特定定長特征碼中的任何地方的特定位置,接收一個由數(shù)據(jù)值組成的特定字符串字段,識別所述特定字符串字段中的任何字符串物件,包括在每個掃描步長為間距的位置上,掃描所述特定字符串字段,以查找所述一個或多個字符串物件的多個所述指紋,其中包括并行查找兩個或兩個以上所述指紋,和在有一個或多個匹配的所述指紋的位置上,查找所述特定字符串字段,以查找所述后續(xù)查找數(shù)據(jù)結構,和輸出所述特定字符串字段中的任何識別的字符串物件。所述方法可進一步包括為每個字符串物件選擇多個基于多組不重疊的有序的定長特征碼的不定長特征碼,所述多個不定長特征碼中的每個不定長特征碼包括每組定長特征碼中的一個定長特征碼和一個把一對相鄰的定長特征碼連接起來的不定長特征碼段指紋,從而使得每個字符串物件的不定長特征碼的數(shù)目等于各組定長特征碼的定長特征碼的數(shù)目的乘積,和所述識別所述特定字符串字段所包括的任何字符串物件包括掃描所述特定字符串字段,以查找一個或多個字符串物件的多個指紋,包括以并行查找兩個或兩個以上指紋,和在有一個或多個匹配的指紋的位置上,查找所述特定字符串字段,以查找所述后續(xù)查找數(shù)據(jù)結構。本發(fā)明的所述方面的其它實施例包括所述方法所對應的系統(tǒng),裝置,和計算機軟件產品。
[0017]—般來說,本發(fā)明一個方面提供了一個字符串特征碼掃描系統(tǒng),所述系統(tǒng)包括一個包括計算機程序產品的機器可讀的存儲設備,和一個或多個可執(zhí)行計算機程序產品和操作包括以下一個或多個模塊的處理器:一個可把一個或多個特征碼處理成包括每個定長特征碼或不定長特征碼的每個定長特征子碼的一個或多個指紋和一個或多個后續(xù)查找數(shù)據(jù)結構的一個或多個格式的特征碼預處理模塊,所述一個或多個指紋包括特定定長特征碼或特征子碼的第J個指紋,所述第J個指紋的第一基本單元在所述定長特征碼或特征子碼中的在掃描方向上的位置除以特征碼掃描操作的步長的余數(shù)等于J,從而使得所述指紋的數(shù)目等于特征碼掃描的步長,并且使得所述定長特征碼或特征子碼在任何被掃描的字符串字段中的任何位置上都能被識別,其中每個所述指紋包括特定定長特征碼或特征子碼的一個或多個片段,所述一個或多個片段具有在所述特定定長特征碼或特征子碼中的任何地方的特定位置,一個可把一個由數(shù)據(jù)值組成的輸入字符串字段處理為一個或多個掃描所需的格式的掃描預處理引擎,和一個可在所述輸入字符串字段上識別一個或多個特征碼的一個或多個指紋的指紋掃描引擎,所述識別包括在每個掃描步長為間距的位置上,掃描所述輸入字符串字段,以查找所述一個或多個特征碼的所述一個或多個指紋。所述系統(tǒng)可進一步包括一個可識別已識別的指紋所對應的定長特征碼或不定長特征碼的定長特征子碼的定長特征碼查找引擎。所述系統(tǒng)可進一步包括一個包括把已識別的不定長特征碼的定長特征子碼合成為任何不定長特征碼的可識別不定長特征碼的不定長特征碼查找引擎。本發(fā)明的所述方面的其它實施例包括所述系統(tǒng)所對應的方法,裝置,和計算機軟件產品。
[0018]具體實施可包括一個或多個以下特性。所述特征碼預處理模塊可選擇一個或多個影子空間并把一個或多個指紋投影到所述一個或多個影子空間去掃描。特征碼預處理模塊可把一個或多個指紋中的每個指紋分解為一個或多個長度的一個或多個指紋段,并把每個指紋段的指紋合成信息存儲到一個指紋數(shù)據(jù)庫,和所述指紋掃描引擎可識別所述輸入字符串字段中的一個或多個特征碼的多個指紋,所述識別包括在每個以掃描步長為間距的位置上,掃描所述輸入字符串字段,以查找多個指紋段,和在有一個或多個已識別的指紋段的位置上,把已識別的指紋段合成為任何指紋匹配。
[0019]所述特征碼預處理模塊可用一個或多個碼膜比特,對一個特征碼的一個或多個特征碼段進行編碼,并把所述一個或多個碼膜比特和所述特征碼的一個或多個特征碼段存儲在一起。所述特征碼預處理模塊可用多個特征碼的一個或多個不同的基本單元構建一個差分查找數(shù)據(jù)結構。所述特征碼預處理模塊可構建一個包括一個指紋數(shù)據(jù)庫,一個定長特征碼數(shù)據(jù)庫,和當所述特征碼掃描系統(tǒng)有至少有一個不定長特征碼時的一個特征碼規(guī)則數(shù)據(jù)庫的特征碼數(shù)據(jù)庫。
[0020]所述掃描預處理引擎可進一步包括一個掃描輸送器,一個投影器,一個字符串字段存儲器,和一個影子字段存儲器。所述掃描預處理引擎可按塊處理一塊或多塊的字符串字段,所述處理包括輸送,解碼,規(guī)格化,和變換其中的一個或多個,所述一塊或多塊字符串塊中的每個字符串塊包括一個用于指紋掃描及特征碼查找的指紋掃描區(qū)域,一個用于特征碼查找的在指紋掃描區(qū)域之前的前特征碼查找區(qū)域,和一個用于特征碼查找的在指紋掃描區(qū)域之后的后特征碼查找區(qū)域。一字符串塊的所述三個區(qū)域的每個區(qū)域可存儲到一個或多個尺寸相同的內存塊中,所有所述三個區(qū)域的所有內存塊單獨或與一個或多個附加內存塊可構成的一個由當前的前特征碼查找區(qū)域的第一內存塊開頭的環(huán),以減少數(shù)據(jù)在內存中的移動。
[0021]所述指紋掃描引擎可用一個或多個散列表和一個或多個布隆過濾器其中的一個或多個來檢測一個或多個指紋。所述指紋掃描引擎可進一步包括一個指紋掃描控制器,一個指紋散列計算器,一個指紋查找器,一個指紋合成器,和一個指紋數(shù)據(jù)庫。所述指紋散列計算器可用一個順序散列函數(shù)在多個相互不重疊的散列鍵的前綴片段上,按順序計算多個散列鍵的多個散列值。所述指紋掃描引擎可包括一個用一個指紋段比特位圖和指紋長度信息中的一個或多個把多個指紋段并行或串行地合成為任何指紋的匹配的指紋合成器。所述指紋掃描引擎可包括一個進一步包括一個或多個有限自動機(FA)的指紋合成器。
[0022]一個或多個長度的一個或多個指紋可被分解為多個相同大小的指紋段,并被一個或多個有相同掃描步長的指紋掃描引擎掃描,所述一個或多個指紋掃描引擎的每個指紋掃描引擎覆蓋一個或多個不重疊的交錯的所述輸入字符串字段的位置,從而使得所述一個或多個指紋掃描引擎的總掃描步長等于所述一個或多個指紋掃描引擎的數(shù)目和單個指紋掃描引擎的原掃描步長的乘積,或覆蓋一個或多個部分重疊的交錯的所述輸入字符串字段的位置,從而使得所述一個或多個指紋掃描引擎的總掃描步長介于單個指紋掃描引擎的原掃描步長,和所述一個或多個指紋掃描引擎的數(shù)目和單個指紋掃描引擎的原掃描步長的乘積之間。掃描步長和內存速度的乘積較小的指紋掃描引擎的數(shù)目可多于掃描步長和內存速度的乘積較大的指紋掃描引擎的數(shù)目。
[0023]覆蓋一個較短的指紋段的一個或多個指紋掃描引擎所用的一個或多個內存可等于或快于覆蓋一個較長的指紋段的一個或多個指紋掃描引擎所用的一個或多個內存,和覆蓋一個或多個平均長度較短的指紋所對應的一個或多個定長特征碼查找引擎所用的一個或多個內存可等于或快于覆蓋一個或多個平均長度較長的指紋所對應的一個或多個定長特征碼查找引擎所用的一個或多個內存。一個或多個覆蓋短于特定長度的指紋的指紋掃描引擎,單獨或與所對應的定長特征碼查找引擎的第一部分一起可用一個或多個在所述掃描系統(tǒng)中最快的內存。掃描相同的一個或多個指紋的多個指紋掃描引擎可共用一個多端口內存。所述指紋掃描引擎可進一步包括一個或多個內容尋址存儲器(CAM)。
[0024]所述定長特征碼查找引擎可進一步包括一個特征碼搜尋器,一個特征碼核實器,和一個定長特征碼數(shù)據(jù)庫。所述特征碼搜尋器和所述特征碼核實器可用一個特征碼單元比較器和一個特征碼段比較器來比較一個或多個帶碼膜的一個特征碼的片段,以識別一個或多個定長特征碼。所述特征碼搜尋器可差分查找一個或多個定長特征碼或特征子碼。所述不定長特征碼查找引擎可進一步包括一個特征碼合成規(guī)則查找器,一個特征碼狀態(tài)驗證器,一個特征碼合成規(guī)則數(shù)據(jù)庫,和一個特征碼狀態(tài)表格。所述不定長特征碼查找引擎可包括一個有限自動機(FA)。一個或多個引擎可包括一個或多個內容尋址存儲器(CAM)和一個或多個有限自動機(FA)其中的一個或多個。
[0025]本說明書所述具體實施例可用來實現(xiàn)以下一個或多個優(yōu)點。本發(fā)明提供了一個掃描一個特征碼庫中的特征碼的字符串掃描系統(tǒng)。所述字符串掃描系統(tǒng)靈活且容易被更新。一個字符串特征碼掃描引擎即使當掃描大量的特征碼(如幾十萬個特征碼),復雜的特征碼(如長達幾千字節(jié),或帶通配符和“ ? ”,范圍,不區(qū)分大小寫,邏輯非),和一個動態(tài)的特征碼庫時,仍可提供極快的掃描速度(如IOOGbps)。所述字符串掃描系統(tǒng)的掃描速度和特征碼庫的大小和復雜性可擴展性。此外,所述字符串掃描系統(tǒng)需求較小的內存和內存帶寬。所述字符串掃描系統(tǒng)可以用軟件或現(xiàn)場可編程門陣列(FPGA)或專用集成電路(ASIC)來實施。此外,所述字符串掃描系統(tǒng)的成本效益高,既適用于高端產品,也適用于低價產品。
[0026]本發(fā)明的一個或多個實施例詳見如下說明書和附圖。本發(fā)明的其它特征和優(yōu)點由說明書、附圖、和權利要求書顯而易見。
【專利附圖】

【附圖說明】
[0027]圖1A示出了一個示例性快速字符串特征碼掃描系統(tǒng)的結構圖;
[0028]圖1B示出了一個構建字符串特征碼數(shù)據(jù)庫的示例性流程圖;
[0029]圖1C示出了一個字符串特征碼掃描的示例性流程圖; [0030]圖2A-2C示出了一個指紋數(shù)據(jù)庫的示例性數(shù)據(jù)結構;
[0031]圖2D-E示出了一個散列條目塊的示例性數(shù)據(jù)結構和一個指紋合成器的實施例;
[0032]圖2F-2G示出了一個散列條目塊的示例性數(shù)據(jù)結構和一個對應的指紋合成器的實施例;
[0033]圖2H-1示出了一個散列條目塊的示例性數(shù)據(jù)結構和一個對應的并行指紋合成器的實施例;
[0034]圖3A-B示出了用于定長特征碼查找的特征碼群鏈表和特征碼鏈表的示例性數(shù)據(jù)結構;
[0035]圖4A-B示出了一個字符串字段的支持一個預定義的全局單元范圍的一個示例性特征碼單元比較器和一個特征碼段比較器的結構圖;
[0036]圖4C示出了一個支持本地特征碼單元范圍的示例性特征碼單元比較器的結構圖;
[0037]圖5A-C示出了一個用于定長特征碼查找的選擇單元樹和特征碼家庭鏈表的示例性數(shù)據(jù)結構;
[0038]圖6示出了一個用于不定長特征碼查找的特征碼規(guī)則鏈表的示例性數(shù)據(jù)結構;
[0039]圖7示出了一個特定字符串字段的特征碼狀態(tài)鏈表的示例性數(shù)據(jù)結構;
[0040]圖8示出了一個被一個特征碼狀態(tài)布隆過濾器或散列表所指的散列條目塊的示例性數(shù)據(jù)結構;
[0041]圖9示出了一個示例性計算機系統(tǒng)。
[0042]在各附圖中類似的附圖標記和標示表示類似的元件?!揪唧w實施方式】
概觀
[0043]本發(fā)明為針對一個字符串特征碼數(shù)據(jù)庫對一個字符串字段進行掃描的方法和系統(tǒng)。在一個實施例中,一個“分而治之”的掃描方法被用來以多個流水線階段進行掃描。每個不定長特征碼首先被分解成多個定長特征子碼來掃描,而每個定長特征碼或每個不定長特征碼的每個定長特征子碼再進一步被分解成多個特征碼段來掃描。在一個實施例中,先“粗掃描”后“細掃描”的方法被用來以多流水線掃描階段進行掃描,以查找字符串特征碼。在每一個掃描位置上,定長特征碼或定長特征子碼的一個或多個指紋首先被掃描。進一步的檢查只需要在有一個或多個指紋匹配的位置上進行。此外,指紋掃描可先在每一個掃描位置上掃描指紋影子(影子和影子相關的空間將在下面詳細介紹)。只有在有一個或多個匹配的指紋影子的位置上,才需對所述指紋進行全面的檢查。
[0044]所述指紋影子可進一步先分段在每個掃描位置上掃描,然后再通過僅檢查指紋影子段在任何指紋中的可能的位置和可能的指紋長度把指紋影子段進行合成。指紋影子的全面的檢查只需要在有一個或多個匹配的合成的指紋影子的位置上進行。此外,指紋影子段的掃描只需在每一個掃描位置上對其散列值進行掃描。進一步的檢查指紋影子段只需在有一個或多個匹配的散列值的位置上進行。在一個實施例中,在掃描之前先把用于掃描字符串字段的字符串特征碼預處理,并將預處理過的特征碼存儲到特征碼數(shù)據(jù)庫中,以提供給多流水線階段掃描使用。
[0045]圖1A示出了一個快速字符串特征碼掃描引擎100。所述掃描引擎包括一個特征碼預處理模塊90,一個掃描預處理引擎120,一個指紋掃描引擎140,一個定長特征碼查找引擎160,和一個不定長特征碼查找引擎180??焖僮址卣鞔a掃描引擎100針對一個或多個字符串特征碼數(shù)據(jù)庫,對字符串字段進行掃描,并可能送回已匹配的特征碼的編號190和在所述字符串字段內的位置,以識別特定特征碼。在一個實施例中,特征碼數(shù)據(jù)庫包括一個指紋數(shù)據(jù)庫148,一個定長特征碼數(shù)據(jù)庫166,和一個特征碼規(guī)則數(shù)據(jù)庫186。
[0046]圖1B示出了一個預處理每個字符串特征碼的程序91。在一個實施例中,首先將一個不定長特征碼分解為多個定長特征子碼和不定長特征子碼,并把定長特征子碼之間的關系的信息存儲到特征碼規(guī)則數(shù)據(jù)庫186中(步驟92)。
[0047]為了快速掃描,步驟92輸出的一個定長特征碼或特征子碼可以進一步被分解成多個可按最佳次序檢驗的片段(步驟94)。在一個實施例中,第一個或前幾個特征碼段特別重要,可以作為定長特征碼或特征子碼的指紋。一個字符串特征碼的指紋既可以被快速地掃描,又可以減少假陰性或假陽性匹配的概率。在一個實施例中,假陰性匹配的概率是零。在一個實施例中,多個特征碼的不同指紋長度的數(shù)目比多個特征碼的不同特征碼長度的數(shù)目要少,從而加快要求對不同長度的模式進行單獨掃描的掃描方法的速度。在一個實施例中,當掃描步長大于一個基本單元時,多個指紋可以用于一個字符串特征碼,其中每個指紋的第一個基本單元在掃描方向上相對前一個指紋的第一個基本單元位移了一個或多個基本單兀。掃描方向是一個掃描操作在一個輸入字符串字段中掃描位置的移動的方向。
[0048]一個定長特征碼或特征子碼的指紋可以進一步分解為指紋段,根據(jù)需要可以進一步投影到一個或多個影子空間,然后加入到指紋數(shù)據(jù)庫148并從而到特征碼數(shù)據(jù)庫中去(步驟96)。由于不同長度的指紋可能被獨立掃描,指紋可以進一步分解成多個指紋段進行并行或串行掃描。在一些實施例中,指紋被分解成多個指紋段,從而使得不同指紋段長度的數(shù)目為一或遠比不同指紋長度的數(shù)目少,從而加快要求對不同長度的模式進行單獨掃描的掃描方法的速度。指紋段的掃描結果可以隨后被合成到一起,以檢測指紋。
[0049]在一個實施例中,為了進一步提高掃描效率和掃描復雜特征碼的能力,指紋及其它特征碼段可以先被投影到一個或多個影子空間進行掃描,然后再在原始空間進行驗證。影子空間可以選擇既能夠簡化和加速掃描過程,同時還可以覆蓋指紋或指紋段的所有可能的格式。一個影子空間可以覆蓋多個指紋或特征碼段的格式。例如,為了同時支持區(qū)分大小寫和不區(qū)分大小寫的單個字符,影子空間可以為只有小寫或只有大寫的空間。作為一個特例,影子空間可以就是原始空間。
[0050]完全指明的指紋或任何其它特征碼段在任何影子空間的影子仍是完全指明的。因此,完全指明的指紋除在原始空間以外,總可以在任何影子空間掃描。在一個實施例中,為了減少所需掃描的空間的數(shù)目,所有的完全指明的指紋都在一個或多個影子空間中的一個影子空間掃描,使得沒有指紋要在原始空間掃描。在另一個實施例中,一個特征碼數(shù)據(jù)庫的影子空間只有一個,所述特征碼數(shù)據(jù)庫的所有的指紋都在所述唯一的影子空間掃描。
[0051]在一個實施例中,指紋數(shù)據(jù)庫包括一個或多個布隆過濾器或散列表。當原散列鍵太長或太昂貴在指紋掃描過程中進行比較時,為了進一步減少假陽性匹配和散列碰撞的概率,在另一個實施例中,指紋數(shù)據(jù)庫包括一個或多個存有附加的散列值比特或一個指紋長度或兩者的改進型布隆過濾器或散列表。
[0052]最后,所有定長特征碼或不定長特征碼的定長特征子碼的片段被編碼并被存儲到定長特征碼數(shù)據(jù)庫166中,以查找定長特征碼或特征子碼(步驟98)。在一個實施例中,所述片段可以用單元膜或亞單元膜進行編碼,以支持字符串特征碼匹配的特定條件(如“不用匹配”,“相等”,“不相等”,“不區(qū)分大小寫”,“區(qū)分大小寫”,“在一個范圍內”,“在一個范圍夕卜”)。在一個實施例中,帶碼膜的片段可以隨后被編譯成一個鏈表或任何其它查找結構(如樹等)。在另一個實施例中,片段碼膜或定長特征碼或特征子碼碼膜可以被編譯成查找結構,以節(jié)省存儲空間。在另一個實施例中,一組字符串特征碼可以進一步利用字符串特征碼之間的不同單元進行差分編碼,以形成可快速查找的差分數(shù)據(jù)結構(如差分樹等)。
[0053]圖1C演示了一個字符串特征碼的掃描程序101。一個待掃描字符串字段首先要被解碼并被變換到(如用掃描預處理引擎120) —個或多個后續(xù)掃描階段所需要的格式(步驟102)。所述符串字段首先在影子空間通過對其影子與一個或多個字符串特征碼的指紋的影子進行比較而被掃描(如用指紋掃描引擎140),然后再在原始指紋空間對任何已識別的指紋影子(步驟104)進行核實。步驟106查看是否有一個指紋匹配。
[0054]在掃描之后,無匹配或有一個匹配分別產生一個表示沒有特征碼匹配的輸出或一個表示有少數(shù)幾個特征碼匹配的輸出。在一個實施例中,指紋掃描引擎140可提供零假陰性匹配和一個足夠小的假陽性匹配幾率。如果沒有指紋匹配,當前掃描位置的掃描已完成,可以移動到下一個掃描位置(步驟108)。如果有指紋匹配,將對少數(shù)幾個匹配的特征碼作進一步的查找(如用定長特征碼查找引擎160),以更加明確地識別為定長特征碼或不定長特征碼的定長特征子碼(步驟110)。
[0055]步驟112查看是否有一個定長特征碼或特征子碼匹配。如果沒有匹配,當前掃描位置的掃描已完成,可移動到下一個掃描位置(步驟108)。如果有一個或多個定長特征碼匹配,輸出每個匹配的定長特征碼的編號,且結束當前掃描位置的掃描(步驟118)。如果有作為一個或多個不定長特征碼的一部分的定長特征子碼被識別,已匹配的特征子碼將被動態(tài)地合成(如用不定長特征碼查找引擎180)以檢測一個或多個不定長特征碼(步驟114)。步驟116查看是否有一個不定長特征碼匹配。如果沒有匹配,當前掃描位置的掃描已完成,可以移動到下一個掃描位置(步驟108)。如果有一個或多個匹配,輸出每個匹配的不定長特征碼的編號,且結束當前掃描位置的掃描(步驟118)。
[0056]在特征碼的預處理過程91中,在一個實施例中,每個指紋的假陽性匹配的概率被存儲在指紋數(shù)據(jù)庫148中。如果步驟106有一指紋匹配,所述匹配的指紋的假陽性匹配的概率將被查看。如果所述假陽性匹配的概率足夠低(如低于指定的閾值),當前掃描位置的掃描過程已完成,可以移動到下一個掃描位置(步驟108)。在另一個實施例中,所有數(shù)據(jù)庫中的指紋的假陽性匹配的概率都足夠低,因此不需儲存和查看指紋的假陽性匹配的概率。當前掃描位置的掃描過程在指紋掃描后已完成,可以移動到下一個掃描位置(步驟108)。
[0057]在步驟102中,掃描預處理引擎120首先將所述字符串字段解碼,規(guī)格化,并變換為與特征碼數(shù)據(jù)庫中的特征碼相同的格式。在一個實施例中,字符串特征碼掃描是在整個字符串字段上進行。然而,在另一個實施例中,由于一些系統(tǒng)的存儲空間的限制或低延遲要求,儲存整個字符串字段不可能。因此,在步驟102時,所述字符串字段可以被分解成幾個預定大小的字符串塊。字符串特征碼掃描是在每一個預定大小的字符串字塊上進行。
[0058]在加載一字符串塊后,所述字符串塊將被解碼,規(guī)格化,并變換為以后掃描階段所需要的不同格式。在一個實施例中,解碼和規(guī)格化過程可以支持不同的壓縮格式(如LZS,PKZipJP gzip),不同的編碼標準(如UU編碼,MME編碼,HTML,和XML),和刪除隨機“反掃描”垃圾數(shù)據(jù)。
[0059]在一個實施例中,解碼后的字符串字段將被進一步投影到一個或多個特征碼數(shù)據(jù)庫要求的影子空間,以支持復雜的特征碼。例如,解碼后的字符串字段被轉換為全小寫字(如一個影子空間),以支持不區(qū)分大小寫的字符串特征碼掃描。字符串特征碼掃描可以先在全小寫已解碼字符串字段上進行,然后再用原區(qū)分大小寫的已解碼字符串字段和全小寫已解碼字符串字段進行驗證。
[0060]在步驟104中,指紋掃描可首先識別其影子為完全指明的指紋。為了快速掃描大量且復雜的特征碼,在一個實施例中,指紋掃描引擎140可以用一個或多個散列表或布隆過濾器同時掃描多個基本單元。在一個實施例中,指紋掃描引擎140可用散列值復用和指紋長度復用來提高儲存器的使用效率和減小假陽性匹配和指紋碰撞的概率。散列值復用和指紋長度復用可以在保證零假陰性匹配(即錯過一個特征碼匹配)的同時,進一步減小假陽性匹配(即錯誤的特征碼匹配)的概率。
[0061]步驟110掃描定長特征碼。定長特征碼或不定長特征碼的定長特征子碼可在所述定長特征碼掃描階段識別。定長特征碼掃描只需當指紋掃描過程中至少有一個指紋匹配時才執(zhí)行。已匹配的指紋所對應的定長特征碼或特征子碼可以被逐個進行匹配或用其它查找結構(如樹等)進行匹配。在一個實施例中,基本單元或亞基本單元的帶碼膜比較可以用來支持字符串特征碼匹配的特定條件(如“不用匹配”,“相等”,“不相等”,“不區(qū)分大小寫”,“區(qū)分大小寫”,“在一個范圍內”,“在一個范圍外”)。[0062]步驟114掃描不定長特征碼。在一個實施例中,不定長特征碼掃描只需在掃描有一個或多個不定長字符的不定長特征碼時才執(zhí)行。不定長特征碼的定長特征子碼在定長特征碼掃描階段被識別,已識別的定長特征子碼可在不定長特征碼掃描階段被動態(tài)地連接在一起,以合成為一個或多個原不定長特征碼。所述合成可以用一個靜態(tài)合成規(guī)則表和一個動態(tài)合成狀態(tài)表來實現(xiàn)。所述合成規(guī)則表指明將定長特征子碼合成為不定長特征碼的規(guī)貝1J,所述合成狀態(tài)表則根據(jù)所述合成規(guī)則表維護當前的合成狀態(tài)。
特征碼數(shù)據(jù)庫的預處理
[0063]在一個實施例中,為了提高掃描速度和內存效率,在掃描所述字符串字段之前,特征碼預處理模塊90對特征碼進行預處理。在存入特征碼數(shù)據(jù)庫之前,特征碼預處理模塊90可以先把特征碼分解,變換,和編碼成一個或多個格式。在一個實施例中,特征碼預處理模塊90可以構建和維護一個指紋數(shù)據(jù)庫148,一個定長特征碼數(shù)據(jù)庫166,和一個特征碼規(guī)則數(shù)據(jù)庫186。
[0064]當特征碼數(shù)據(jù)庫有一個或多個特征碼含一個或多個不定長子碼(如代表零個以上任意的基本單元的或代表“be”重復3至6次的“ (be) {3-6} ”),每個這樣的不定長特征碼可以先用不定長特征子碼被分解成多個定長特征子碼。例如,如果一個特征碼為“子碼I*子碼2*子碼3”,其中子碼1,子碼2,和子碼3都是不含不定長字符的定長子碼,所述特征碼可以被分解為子碼1,子碼2,子碼3。子碼I*子碼2*子碼3中的每個所述可被一個不定長子碼取代。在一個實施例中,每個所述定長特征子碼可以先被獨立地掃描,然后再將其合成為原不定長特征碼。
[0065]在一個實施例中,特征碼規(guī)則數(shù)據(jù)庫186可用每個定長特征子碼的位置信息(如次序,最后子碼標志,到下一個定長子碼的距離或距離范圍)來構建,以用于合成定長特征子碼。在一個實施例中,當兩個連續(xù)的定長特征子碼之間的不定長子碼不為“不用匹配”,所述特征碼規(guī)則數(shù)據(jù)庫186可進一步含對所述不定長子碼的描述,以用于合成定長特征子碼。在另一個實施例中,可用所述定長特征子碼和不定長特征子碼構建一個或多個有限自動機(FA),以用于合成定長特征子碼,其中每個定長特征子碼作為一個整體為一個輸入符號。
[0066]在一個實施例中,一個定長特征碼或特征子碼將被進一步被分解成多個可以用最佳的順序進行查找的片段(這些片段包括所述特征碼或特征子碼的所述指紋)。所述多個片段可以有不同的尺寸或相同的尺寸。為了防止假陰性匹配或不錯過任何一個特征碼,所有所述片段的集合等于原定長特征碼。在特征碼掃描的過程中,隨著匹配的片段的數(shù)目的增力口,假陽性匹配值將降低(即匹配的可信度增加)。掃描的過程將終止于第一個不匹配的片段或最后一個匹配的片段。在一個實施例中,特征碼的片段的選擇可以讓無匹配終止或識別一個零假陽性匹配的特征碼匹配盡早出現(xiàn)。
[0067]在一個實施例中,所述指紋包含多個片段。在另一個實施例中,所述指紋只有一個片段,并被編碼為三元組{片段,長度,錯位},其中片段為字符串特征碼的第一個被掃描的片段即所述特征碼的指紋,長度為所述指紋的長度,錯位為所述指紋在一個定長特征碼或特征子碼中的錯位。特定指紋是一個定長特征碼或不定長特征碼的定長特征子碼的特定片段。
[0068]在一個實施例中,所述影子空間可以被選擇能夠簡化和加快所述特征碼掃描的過程,同時能夠覆蓋所述多種指紋或特征碼片段的格式。在理想情況下,所述影子值可以直接作為一個散列鍵。例如,為了同時支持區(qū)分大小寫和不區(qū)分大小寫的單元,所述影子空間可以是全小寫或全大寫的空間。例如,為了掃描由一個字母后接7個數(shù)字組成的駕駛證號碼,其中每個字母和數(shù)字可以進一步指定為任意的字母和數(shù)字的范圍,影子空間可以用一代碼或任何一個字母(如“a”)代替所有的字母,并用另一代碼或任何一個數(shù)字(如“O”)代替所有的數(shù)字。例如,為了掃描由三組被空格或分隔開的三位數(shù)字所組成的社會安全號碼(SSN),其中每個數(shù)字可以進一步被指定為任意的數(shù)字范圍,影子空間可以用一代碼或任何一個數(shù)字(如“O”)代替所有的數(shù)字,并用另一代碼或空格或代替空格和作為一個特例,所述影子空間可以就是原空間。
[0069]在一個實施例中,指紋在影子空間被掃描完之后,指紋的驗證可以在檢測到指紋影子之后立刻在原空間進行。在另一個實施例中,所述驗證可以在先驗證其它片段的部分或全部后再進行。如果所述指紋完全被其它片段所覆蓋,不需驗證。
[0070]指紋的選擇既要加快所述指紋掃描的速度,同時還要提供最小的在指紋掃描之后的假陽性匹配的概率。在一個實施例中,所述指紋可以為任意尺寸和在所述特征碼中的任意位置上。在另一個實施例中,為了滿足系統(tǒng)的要求,所述指紋的尺寸或在所述特征碼中的位置受限制。例如,為了滿足系統(tǒng)的延遲要求,所述指紋的錯位不能超過某特定值。
[0071]在一個實施例中,指紋可以用以下一個或多個條件選擇:
1)所述指紋的所述影子沒有通配符或范圍,以被較快掃描,
2)所述指紋在所述待掃描的字符串字段中出現(xiàn)的概率很小,
3)多個特征碼共用的指紋的數(shù)目盡可能地小,和
4)有一個相同的指紋段的指紋的數(shù)目盡可能地小。
[0072]其它選擇的條件可以根據(jù)系統(tǒng)的要求而增加。在常見的網(wǎng)絡應用和非網(wǎng)絡應用中,通常所有或大多數(shù)字符串特征碼都至少含有一段相當長的,在投影到一個選定的影子空間中之后沒有通配符或范圍的片段。在一個實施例中,第一個選擇條件為一個必要條件。在另一個實施例中,第一個選擇條件可以進一步限制為所有指紋的每個指紋至少在一個影子空間中為完全指明。不含符合選擇條件的指紋的特征碼,可以被擴展為多個含有符合選擇條件的指紋的特征碼,或用一個不需特征碼擴展的不同掃描方式掃描。
[0073]所述指紋可以通過檢查所有符合第一選擇條件的一個特征碼的片段來選擇。其它指紋的參數(shù)也可以在選擇指紋的時候被加以考慮。根據(jù)第二選擇條件,選擇在所述待掃描的字符串字段出現(xiàn)的概率很小的特征碼段作為指紋,可以減少假陽性指紋匹配的概率。此夕卜,讓有一個相同的指紋段的指紋的數(shù)目盡可能地小,可以進一步減少假陽性指紋匹配的概率。盡管所述指紋的長度可以少于8個基本單元或多于32個基本單元,但是通常在8至32基本單元之間。
[0074]由于所述特征碼可以很長(如數(shù)百或上千個基本單元),指紋的長度可能也很多。然而,在一個實施例中,不同長度的指紋要單獨掃描,從而掃描速度較慢。在一個實施例中,為了減少掃描的復雜性,可以根據(jù)特定系統(tǒng)要求和系統(tǒng)架構來限制指紋長度的數(shù)目,如少于16。在一個實施例中,指紋的長度可以從一個預定的長度表中選定。此外,指紋的長度可以根據(jù)系統(tǒng)要求和系統(tǒng)架構,按指數(shù)遞增關系(如2,4,8,16,和32),線性遞增關系(如4的倍數(shù):4,8,12,16,20,24,28,和 32),或另一關系(如 2,3,5,8,13,21,34)來選擇。[0075]在一個實施例中,一個特征碼的指紋可以用一個算法來選擇。例如,以下算法可以用來選擇一個定長特征碼或特征子碼的指紋(假設掃描步長等于1,指紋的長度從最短至最長固定為lo,I1, 12,…,Iffl-!, Im,指紋掃描分段進行,指紋掃描的影子空間已給定):
1.找到所有在影子空間為完全指明的特征碼子段。
2.對每一個長于的Im的所述的子段,找到所有長度等于Im的子段。
3.對每一個長度等于Im的子段,記下所述子段在所有特征碼中已被選為指紋的次數(shù)N。和與其它指紋有相同的第一指紋段的次數(shù)Ns,和用一個基于N。,Ns,和Im的成本函數(shù)算出成本值。
4.分別用長度等于Inri,…,12,I1,和Itl的子段重復步驟2和3。
5.從步驟2到4中,找出最小成本的子段為一個指紋。
[0076]上述步驟與特征碼的處理順序有關。幾個隨機處理順序可以根據(jù)需要用來找到不同的指紋。在一個實施例中,成本值等于把(m-1), N。,和Ns從最高位到最低位聯(lián)接起來,其中i=0,l,2,…,m和i為指紋的長度。在一個實施例中,如果已找到特定長度的指紋,不需要再對所有更短的子段進行選擇。
[0077]在另一個實施例中,指紋掃描引擎140每次移動一個掃描步長。在每個掃描位置上,指紋掃描引擎140串行或并行地掃描不同長短的指紋。因此,掃描速度與掃描步長(即連續(xù)兩個掃描位置之間的基本單元的數(shù)目)成正比。在一個實施例中,為了提高掃描速度,指紋掃描可以同時掃描多個基本單元,而不是一個基本單元。為了確保零假陰性匹配,每個字符串特征碼要用多個指紋且所述指紋的數(shù)目等于所述掃描步長。換言之,一個定長特征碼或特征子碼可以用多個指紋放入到特征碼數(shù)據(jù)庫且所述指紋的數(shù)目等于掃描步長。特定特征碼的第J個指紋的第一個基本單元是所述特定特征碼在掃描方向的第(J+k*S)個基本單元,其中S為掃描步長,k為一個非負整數(shù),和J=0,l,2,, S-1。所述特征碼就可以在所述待掃描的字符串段中的任何位置找到。例如,如果特定特征碼為“ [Rr] [Ee] [Aa] [Dd][Mm] [Ee]123.exe”,所述掃描步長為4,所述指紋長度包括4,8和12,可以選用以下四個指紋:“ [Rr] [Ee] [Aa] [Dd] [Mm] [Ee] 123.ex”, “ [Ee] [Aa] [Dd] [Mm] [Ee] 123.exe”,“ [Aa] [Dd][Mm] [Ee]123.”,和 “[Dd] [Mm] [Ee]123.e”,其中[Rr], [Ee],[Aa],[Dd],和[Mm]分別為不區(qū)分大小寫的英文字母r, e, a, d,和m?!?[Rr] [Ee] [Aa] [Dd] [Mm] [Ee] 123.exe”用所述四個指紋放入到指紋數(shù)據(jù)庫四次。當掃描步長為I時,只需一個指紋且只需放入一次。
[0078]所述多個指紋的掃描可以從輸入字符串字段的前S個單元中(即在第一掃描步長內)的任何位置開始。例如,在一個實施例中,所述掃描從第O位置開始,將掃描第(k*S)位置,其中k為一個非負整數(shù)。在任何輸入字符串字段中,第(k*S)位置被第O個指紋覆蓋,第(k*S+l)位置被第(S-1)個指紋覆蓋,第(k*S+2)位置被第(S-2)個指紋覆蓋,...,和第(k*S+S-l)位置被第1個指紋覆蓋。在另一個實施例中,掃描從第(S-1)位置開始,將掃描第(k*S+S-l)位置,其中k為一個非負整數(shù)。在任何輸入字符串字段中,第(k*S)位置被第(S-1)個指紋覆蓋,第(k*S+l)位置被第(S-2)個指紋覆蓋,第(k*S+2)位置被第(S-3)個指紋覆蓋,...,第(k*S+S-2)位置被第I個指紋覆蓋,和第(k*S+S-l)位置被第O個指紋覆
至JHL ο [0079]為了把所述掃描步長提高到S個基本單元,在一個實施例中,以上當掃描步長為I時的為每個定長特征碼或特征子碼選擇一個指紋的算法可以做如下修改,以用來選擇每個定長特征碼或特征子碼的所述S個指紋:步驟I至4和以前完全一樣,步驟5則修改為從所有在步驟2中找到的、所述定長特征碼或特征子碼的在掃描方向的錯位為(J+k*S)的子段中,找出最小成本值的子段為所述S個指紋中的第J個指紋,其中J=0,1,2,...,S-1和k為
一個非負整數(shù)。
[0080]通常每個字符串物件只有一個特征碼,為支持S基本單元的掃描步長,每個定長特征碼或不定長特征碼的定長特征子碼需要S個指紋。在另一個實施例中,為支持S基本單元的掃描步長,S個定長特征碼可以用來識別一個字符串物件,從而使得每個定長特征碼在掃描方向的第一個基本單元在所述字符串物件的錯位為(J+k*S),其中J=0,1,2,...,(S-1)和k為一個非負整數(shù)。所述特定字符串物件就可以在任何待掃描字符串字段的任何位置上被識別。在一個實施例中,S個定長特征碼的掃描可以不用指紋。在另一個實施例中,S個定長特征碼中的每一個特征碼可以用一個指紋來進行特征碼掃描。[0081]在一個實施例中,多個基于多組不重疊的有序的定長特征碼的不定長特征碼可以進一步被選擇用來識別一個字符串物件。每組定長特征碼有S個定長特征碼,其中第J個定長特征碼在掃描方向的第一個基本單元在所述字符串物件的錯位為(J+k*S),其中J=0,l,2,...,(S-1)和k為一個非負整數(shù),從而構成Sn個不定長特征碼,其中η是不重疊的有序的有S個定長特征碼的碼組的組數(shù)。從每組定長特征碼中選擇出一個定長特征碼,然后再將這些定長特征碼和一個或多個不定長字符串段組合成SSn個不定長特征碼中的一個不定長特征碼,從而使得所述特定字符串物件可以在任何待掃描字符串字段的任何位置上被識別。所述η組S定長特征碼中的每個原定長特征碼在合成后變?yōu)槎鄠€合成后的不定長特征碼的一個定長特征子碼。在一個實施例中,所述不定長特征碼的掃描可以不用指紋。在另一個實施例中,所述不定長特征碼中的每一個定長特征碼可以選用一個指紋來掃描。
[0082]在一個實施例中,為支持S基本單元的掃描步長,特定字符串物件可以選用P個定長特征碼,每個定長特征碼可進一步選用一個或多個指紋,從而使得每個字符串物件的總指紋數(shù)等于S。所述特定字符串物件的S個指紋中的第J個指紋在掃描方向的第一個基本單元在所述特定字符串物件中的錯位為(J+k*S),其中J=0,l,2,...,(S-1)和k為一個非負整數(shù),從而使得所述字符串物件可以在任何待掃描字符串字段的任何一個位置上被識別。
[0083]在另一個實施例中,多個基于多組不重疊的有序的定長特征碼的不定長特征碼可以進一步被選擇用來識別一個字符串物件。第i組不重疊且有序的定長特征碼有Pi個定長特征碼,其中每個定長特征碼進一步有一個或多個指紋,從而使得第i組定長特征碼的總指紋數(shù)等于S,其中i=0,1,2,...,n-1和η為不重疊且有序的定長特征碼組的組數(shù)。每組定長特征碼的S個指紋中的第J個指紋在掃描方向的第一個基本單元在所述特定字符串物件中的錯位為(J+k*S),其中J=O,1,2,..., (S-1)和k為一個非負整數(shù)。
[0084]從每組定長特征碼中選擇出一個定長特征碼,然后再將這些定長特征碼和一個或多個不定長字符串組合成Pc^PdP2"*-Plri個不定長特征碼中的一個不定長特征碼,從而使得所述特定字符串物件可以在任何待掃描字符串段的任何位置上被識別。所述η組定長特征碼中的每個原定長特征碼變?yōu)槎鄠€合成后的不定長特征碼的一個定長特征子碼。
[0085]在一個掃描系統(tǒng)的每個字符串物件的特征碼,指紋,和影子空間確定以后,一個指紋的影子可以作為一個整體進行掃描。不同長度的指紋影子可以并行或串行掃描。在一個實施例中,不同長度的指紋的影子可以作為一個整體進行串行掃描。在一個實施例中,把一個字符串特征碼編入所述特征碼數(shù)據(jù)庫可用以下偽代碼:
【權利要求】
1.一種字符串特征碼掃描方法,所述方法包括: 把一個或多個不定長特征碼處理成一個或多個格式,所述處理包括把一個或多個不定長特征碼中的每個不定長特征碼分解成一個或多個定長特征碼段和一個或多個不定長特征碼段,并且為所述一個或多個不定長特征碼的一個或多個定長特征碼段構建一個或多個用于查找定長特征碼段的數(shù)據(jù)結構和為所述一個或多個不定長特征碼構建一個或多個用于查找不定長特征碼的數(shù)據(jù)結構,其中所述一個或多個用于查找不定長特征碼的數(shù)據(jù)結構被所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構所指; 接收一個由數(shù)據(jù)值組成的字符串字段; 在每個掃描位置上用所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構掃描所述字符串字段以查找所述一個或多個不定長特征碼的一個或多個定長特征碼段; 在有一個或多個匹配的定長特征碼段的掃描位置上用被所述一個或多個已匹配的定長特征碼段所指的一個或多個用于查找不定長特征碼的數(shù)據(jù)結構查看所述字符串字段以查找與所述一個或多個已匹配的定長特征碼段相關的一個或多個不定長特征碼;和 輸出所述字符串字段中的任何匹配的不定長特征碼。
2.根據(jù)權利要求1所述方法,所述一個或多個不定長特征碼的一個或多個定長特征碼段全是完全指明的。
3.根據(jù)權利要求1所述方法,所述一個或多個不定長特征碼的一個或多個定長特征碼段盡可能長。
4.根據(jù)權利要求1-3其中之一所述方法,所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構包括一個或多個散列表,或一個或多個布隆(Bloom)過濾器,或一個或多個有散列值復用或長度復用的散列表,或一個或多個有散列值復用或長度復用的布隆過濾器。
5.根據(jù)權利要求1-3其中之一所述方法,所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構包括一個或多個確定有限自動機(DFA)或不確定有限自動機(NFA)。
6.根據(jù)權利要求1-3其中之一所述方法,所述查看字符串字段以查找同一個或多個已匹配的定長特征碼段相關的一個或多個不定長特征碼包括檢查所述已匹配的定長特征碼段的位置信息或所對應的不定長特征碼的編號,其中所述定長特征碼段的位置信息包括所述定長特征碼段在所相關的不定長特征碼中的順序,或是否在最前或最后,或到下一定長特征碼段的距離或距離范圍。
7.根據(jù)權利要求1-3其中之一所述方法,所述一個或多個用于查找不定長特征碼的數(shù)據(jù)結構包括一個或多個確定有限自動機(DFA)或不確定有限自動機(NFA)。
8.一種字符串特征碼掃描系統(tǒng),所述系統(tǒng)包括: 一個可把一個或多個特征碼處理成一個或多個格式的特征碼預處理模塊,所述處理包括把一個或多個不定長特征碼中的每個不定長特征碼分解成一個或多個定長特征碼段和一個或多個不定長特征碼段,并且為所述一個或多個不定長特征碼的一個或多個定長特征碼段構建一個或多個用于查找定長特征碼段的數(shù)據(jù)結構和為所述一個或多個不定長特征碼構建一個或多個用于查找不定長特征碼的數(shù)據(jù)結構,其中所述一個或多個用于查找不定長特征碼的數(shù)據(jù)結構被所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構所指; 一個可在一個字符串字段中的每個掃描位置上用所述一個或多個用于查找定長特征碼段的數(shù)據(jù)結構識別一個或多個定長特征碼段的定長特征碼掃描引擎;和一個可在有一個或多個匹配的定長特征碼段的掃描位置上用一個或多個被所述一個或多個已匹配的定長特征碼段所指的用于查找不定長特征碼的數(shù)據(jù)結構識別與所述一個或多個已匹配的定長特征碼段相關的一個或多個不定長特征碼的不定長特征碼查找引擎。
9.根據(jù)權利要求8所述系統(tǒng),所述一個或多個不定長特征碼的一個或多個定長特征碼段全是完全指明的或盡可能長。
10.根據(jù)權利要求8-9其中之一所述系統(tǒng),所述定長特征碼掃描引擎包括使用一個或多個散列表,或一個或多個布隆(Bloom)過濾器,或一個或多個有散列值復用或長度復用的散列表,或一個或多個有散列值復用或長度復用的布隆過濾器,或一個或多個確定性有限自動機(DFA)或不確定有限自動機(NFA),或一個或多個內容尋址存儲器(CAM);所述不定長特征碼查找引擎包括使用一個或多個確定性有限自動機(DFA)或非確定性有限自動機(NFA),或已匹配的定長特征碼段的位置信息,或已匹配的定長特征碼段所對應的不定長特征碼的編號,其中所述已匹配的定長特征碼段的位置信息包括所述已匹配的定長特征碼段在所相關的不定長 特征碼中的順序,或是否在最前或最后,或到下一定長特征碼段的距離或距離范圍。
【文檔編號】G06F17/30GK103793522SQ201410055830
【公開日】2014年5月14日 申請日期:2008年10月20日 優(yōu)先權日:2008年10月20日
【發(fā)明者】王強 申請人:王強
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
海林市| 安泽县| 清苑县| 余姚市| 云林县| 奉节县| 濉溪县| 吴忠市| 驻马店市| 河北省| 宜阳县| 新晃| 全南县| 江山市| 安图县| 南澳县| 楚雄市| 木兰县| 恩平市| 洛浦县| 宝坻区| 宜宾市| 永登县| 玉田县| 清徐县| 四平市| 广德县| 阳信县| 龙门县| 宜君县| 东丰县| 永顺县| 安丘市| 汤阴县| 宿松县| 陆丰市| 永春县| 偏关县| 南京市| 永年县| 太白县|