国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法

      文檔序號(hào):6575114閱讀:575來(lái)源:國(guó)知局
      專利名稱:一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種計(jì)算機(jī)安全過(guò)濾中所用到的關(guān)鍵字查找匹配方法,尤其涉及一種在網(wǎng)絡(luò)正文數(shù)據(jù)包中定位特定問(wèn)題關(guān)鍵字的多關(guān)鍵字查找匹配方法。
      背景技術(shù)
      現(xiàn)有的對(duì)單一關(guān)鍵字的查找匹配方法有很多,目前常用的方法是自動(dòng)狀態(tài)機(jī)查找匹配方法,該方法的大致思路是這樣的狀態(tài)機(jī)M是一個(gè)5元組(Q,q,A,∑,δ),其中Q是狀態(tài)的有限集合q屬于Q是初態(tài)A屬于Q是一個(gè)獨(dú)特的接收狀態(tài)集∑是有限的輸入字母表δ是狀態(tài)機(jī)M的從狀態(tài)Q*∑到Q的變遷函數(shù)。
      如果狀態(tài)機(jī)在狀態(tài)q,讀入輸入字符a,則它從狀態(tài)q變?yōu)闋顟B(tài)δ(q,a)(進(jìn)行了一次傳播)。每當(dāng)其當(dāng)前狀態(tài)屬于A時(shí),則狀態(tài)機(jī)M接收了迄今為止所讀入的串。
      對(duì)每個(gè)模式P都存在一個(gè)串匹配自動(dòng)機(jī),必須在預(yù)處理階段根據(jù)模式構(gòu)造出響應(yīng)的自動(dòng)機(jī)后才能利用它來(lái)搜尋正文串。圖1是關(guān)于模式P=ababaca的狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。它的開始狀態(tài)為0,狀態(tài)集Q={0,1,2,3,4,5,6,7},輸入字母表∑={a,b,c}。圖2是相應(yīng)的轉(zhuǎn)換函數(shù)δ的構(gòu)造過(guò)程。
      從圖1和圖2中我們可以看出對(duì)于任意的字符集∑={a,b,c}的正文串輸入,以當(dāng)前的狀態(tài)和輸入字符為輸入?yún)?shù),經(jīng)過(guò)狀態(tài)轉(zhuǎn)換函數(shù)δ,我們都可以得到一個(gè)新狀態(tài),一旦狀態(tài)轉(zhuǎn)換函數(shù)δ的輸出結(jié)果為狀態(tài)7,也就是說(shuō)到達(dá)了我們?cè)O(shè)定的接收狀態(tài),我們就找到了搜索串。
      目前的自動(dòng)狀態(tài)機(jī)查找匹配方法比較好的解決了單一關(guān)鍵字地查找和匹配,對(duì)查找正文每個(gè)字符只比較一次,從速度上可以滿足系統(tǒng)對(duì)算法的要求。但是當(dāng)需要查找多個(gè)關(guān)鍵字時(shí)(例如2000個(gè)關(guān)鍵字),則需要一種可以將多個(gè)關(guān)鍵字的狀態(tài)表聯(lián)合形成一個(gè)總的狀態(tài)表的生成算法,這需要考慮將多個(gè)關(guān)鍵字的狀態(tài)表的相似狀態(tài)進(jìn)行合并的問(wèn)題,但是目前的自動(dòng)狀態(tài)機(jī)查找匹配方法不能解決多關(guān)鍵字同時(shí)查找的問(wèn)題。
      此外,美國(guó)的斯蒂爾.P.尼克爾在1990年提出的《具有部分關(guān)鍵字分支的前綴檢索樹》的關(guān)鍵字查找方法(中國(guó)專利申請(qǐng)?zhí)?0107971.5),將包含前綴關(guān)鍵字字段的節(jié)點(diǎn)構(gòu)成的查找前綴索引樹可以從正文中查找出多個(gè)關(guān)鍵字,但是這種方法在速度上還不能達(dá)到對(duì)每個(gè)字符只比較一次的線形查找速率。

      發(fā)明內(nèi)容
      本發(fā)明的目的是提出一種能夠?qū)Χ鄠€(gè)關(guān)鍵字同時(shí)查找匹配并且在速度上達(dá)到對(duì)每個(gè)字符只比較一次的線形查找速率的自動(dòng)狀態(tài)機(jī)查找匹配方法。
      本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,包括下列步驟①建立匹配總狀態(tài)表;②輸入待匹配信息;③自動(dòng)狀態(tài)機(jī)利用匹配總狀態(tài)表進(jìn)行查找匹配;④輸出查找匹配結(jié)果。
      其中所述步驟①包括兩個(gè)階段第一階段為生成多關(guān)鍵字總狀態(tài)表,第二階段為同步總狀態(tài)表中的狀態(tài)。
      第一階段包括下列步驟①初始化自動(dòng)狀態(tài)機(jī)的總狀態(tài)表,各關(guān)鍵字狀態(tài)表和終結(jié)狀態(tài)匹配描述表;②確定所有待查找的關(guān)鍵字之間的關(guān)系,對(duì)于有包含關(guān)系且有相同前綴的關(guān)鍵字的一些字節(jié)狀態(tài)進(jìn)行確定或合并;③對(duì)所有關(guān)鍵字的字符狀態(tài)表中沒(méi)有被匹配到的字符再進(jìn)行匹配;④根據(jù)字符狀態(tài)表進(jìn)行總狀態(tài)表的生成。
      第二階段包括下列步驟①對(duì)每一個(gè)關(guān)鍵字,建立一個(gè)臨時(shí)狀態(tài)表;②對(duì)所有待匹配關(guān)鍵字在該關(guān)鍵字中找到所有匹配的前綴,與臨時(shí)狀態(tài)表中的已有前綴進(jìn)行比較;③根據(jù)最大前綴原則更新臨時(shí)狀態(tài)表中的狀態(tài);④根據(jù)臨時(shí)狀態(tài)表中的內(nèi)容對(duì)總狀態(tài)表進(jìn)行更新。
      關(guān)鍵字間的單一狀態(tài)機(jī)的合并程度取決于狀態(tài)序列的相似程度。所述的相似程度包括三類包含關(guān)系,相似關(guān)系和沒(méi)有關(guān)系。
      所述確定所有待查找的關(guān)鍵字之間的關(guān)系包括①判斷某關(guān)鍵字與其下所有關(guān)鍵字判斷是否有前綴關(guān)系;②判斷兩個(gè)關(guān)鍵字是否有包含關(guān)系。
      將具有前綴關(guān)系的關(guān)鍵字進(jìn)行如下狀態(tài)合并
      ①如果是相同的關(guān)鍵字,則刪除后面一個(gè)關(guān)鍵字,并釋放后面一個(gè)關(guān)鍵字的字符狀態(tài)表;②如果兩個(gè)關(guān)鍵字只有部分相同,則從相同的第一個(gè)字符開始,分別從兩個(gè)關(guān)鍵字的字符狀態(tài)表中找出該字符下關(guān)鍵字的當(dāng)前狀態(tài)。
      1)如果兩個(gè)關(guān)鍵字中相應(yīng)的字符狀態(tài)都為空閑狀態(tài),則取新的狀態(tài),并更新兩個(gè)關(guān)鍵字的字符狀態(tài)表中的相應(yīng)的狀態(tài)為一個(gè)相同的中間狀態(tài);2)如果兩個(gè)關(guān)鍵字中某個(gè)字符下的字符狀態(tài)表中的當(dāng)前狀態(tài)不為空閑狀態(tài),若其中一個(gè)已經(jīng)被賦過(guò)狀態(tài),則用其值更新另一個(gè)的當(dāng)前狀態(tài);3)如果是二者都不處于空閑狀態(tài),并且兩者的當(dāng)前狀態(tài)又不相等,則判斷是已經(jīng)存在匹配關(guān)系。如果二者都是終結(jié)狀態(tài),以前一個(gè)狀態(tài)為準(zhǔn);如果只有一個(gè)是終結(jié)狀態(tài),用該狀態(tài)同步另一個(gè)中相應(yīng)的狀態(tài)。
      對(duì)兩個(gè)關(guān)鍵字有包含關(guān)系的進(jìn)行如下處理①如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)為空閑狀態(tài),則申請(qǐng)一個(gè)新的終結(jié)狀態(tài);②如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)不為終結(jié)狀態(tài),則為其申請(qǐng)一個(gè)新的終結(jié)狀態(tài);③如果兩個(gè)關(guān)鍵字有同樣的前綴又是包含關(guān)系,則二關(guān)鍵字的終結(jié)狀態(tài)以長(zhǎng)關(guān)鍵字為準(zhǔn);④如果是到長(zhǎng)關(guān)鍵字的最后一個(gè)字符匹配,則把長(zhǎng)關(guān)鍵字也加入字符狀態(tài)匹配描述表。
      所述根據(jù)最大前綴原則更新臨時(shí)狀態(tài)表中的狀態(tài)包括下列步驟①如果匹配長(zhǎng)度為目的關(guān)鍵字的長(zhǎng)度,這種包含關(guān)系的狀態(tài)確定,在前面包含關(guān)系匹配中已經(jīng)確定,其狀態(tài)已經(jīng)全部合并完成,可以不做處理;②如果源關(guān)鍵字下面一個(gè)字符是結(jié)尾,則說(shuō)明源關(guān)鍵字在目標(biāo)關(guān)鍵字中,二者有包含關(guān)系,如果需要繼續(xù)向下找其它匹配字符,則可以繼續(xù)進(jìn)行處理;③在臨時(shí)狀態(tài)表中,取出當(dāng)前匹配的最大前綴長(zhǎng)度,如果目前的前綴大于原來(lái)的前綴,則狀態(tài)轉(zhuǎn)為目的關(guān)鍵字匹配終結(jié)時(shí)字符所要對(duì)應(yīng)的狀態(tài)。
      本發(fā)明根據(jù)多個(gè)關(guān)鍵字間的關(guān)系,生成出可以用于同時(shí)查找匹配多個(gè)關(guān)鍵字的自動(dòng)狀態(tài)機(jī),當(dāng)自動(dòng)機(jī)的當(dāng)前狀態(tài)為查找的終結(jié)狀態(tài),則多個(gè)關(guān)鍵字中的某個(gè)或多個(gè)關(guān)鍵字同時(shí)被查找定位到。本發(fā)明的查找速度為對(duì)正文中每一個(gè)字符只比較一次,可以滿足系統(tǒng)對(duì)處理速度的實(shí)時(shí)性要求。本發(fā)明的查找速度和規(guī)則數(shù)無(wú)關(guān),故在規(guī)則數(shù)量多的情況下更具備優(yōu)勢(shì)。
      綜上所述,本發(fā)明具有以下有益效果
      1、查找速度快。對(duì)正文中的每一個(gè)字符只比較一次,對(duì)查找速率實(shí)時(shí)性要求高的系統(tǒng),本發(fā)明的速度優(yōu)勢(shì)比較明顯。
      2、查找速度和規(guī)則數(shù)無(wú)關(guān)。同時(shí)匹配查找關(guān)鍵字的數(shù)量的多少對(duì)查找速度沒(méi)有影響,可以滿足海量規(guī)則的要求。
      3、對(duì)查找關(guān)鍵字的編碼沒(méi)有特殊要求,可以查找多種文字混合的正文。
      4、可以同時(shí)查找多個(gè)特定關(guān)鍵字,也可以只查找指定的某一個(gè)關(guān)鍵字。


      圖1是現(xiàn)有技術(shù)中自動(dòng)狀態(tài)機(jī)關(guān)于模式串P=ababaca的狀態(tài)轉(zhuǎn)換示意圖。
      圖2是現(xiàn)有技術(shù)中自動(dòng)狀態(tài)機(jī)關(guān)于模式串P=ababaca的狀態(tài)轉(zhuǎn)換函數(shù)δ的構(gòu)造過(guò)程示意圖。
      圖3是本發(fā)明提出的多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法的總流程圖。
      圖4是本發(fā)明提出的方法中建立匹配總狀態(tài)表的第一階段的流程圖。
      圖5是本發(fā)明提出的方法中建立匹配總狀態(tài)表的第二階段的流程圖。
      具體實(shí)施例方式
      下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明。
      圖1和圖2在背景技術(shù)中已經(jīng)做過(guò)說(shuō)明。
      圖3是本發(fā)明提出的多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法的總流程圖。對(duì)待查詢的協(xié)議正文的過(guò)濾處理可以看作是在一段正文中同時(shí)查詢多個(gè)特定關(guān)鍵字的問(wèn)題。因?yàn)镮DS系統(tǒng)對(duì)實(shí)時(shí)性要求往往都比較高,在正文中查找關(guān)鍵字的處理速度和正確率直接影響到匹配過(guò)濾性能的好壞,其性能是系統(tǒng)性能的一個(gè)關(guān)鍵部分。系統(tǒng)要求對(duì)查找正文的每個(gè)字符匹配次數(shù)要盡可能少,查找關(guān)鍵字的長(zhǎng)度對(duì)查找性能沒(méi)有影響。另外,系統(tǒng)要求同時(shí)查找的關(guān)鍵字的數(shù)量對(duì)系統(tǒng)的影響應(yīng)該盡可能的小,不會(huì)因?yàn)椴檎谊P(guān)鍵字?jǐn)?shù)量的大量增加而使系統(tǒng)的性能大幅下降。如圖3所示,本發(fā)明提出的這種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,包括下列步驟①建立匹配總狀態(tài)表;②輸入待匹配信息;③自動(dòng)狀態(tài)機(jī)利用匹配總狀態(tài)表進(jìn)行查找匹配;④輸出查找匹配結(jié)果。
      上面所述的步驟①包括兩個(gè)階段第一階段為生成多關(guān)鍵字總狀態(tài)表,第二階段為同步總狀態(tài)表中的狀態(tài)。圖4是是本發(fā)明提出的方法中建立匹配總狀態(tài)表的第一階段的流程圖。如圖4所示,第一階段包括下列步驟①初始化自動(dòng)狀態(tài)機(jī)的總狀態(tài)表,各關(guān)鍵字狀態(tài)表和終結(jié)狀態(tài)匹配描述表。關(guān)鍵字狀態(tài)表是各關(guān)鍵字的每個(gè)字節(jié)的狀態(tài)表。字符狀態(tài)匹配描述表是表示在某個(gè)終結(jié)狀態(tài)下的查找到的關(guān)鍵字的信息。②確定所有待查找的關(guān)鍵字之間的關(guān)系,對(duì)于有包含關(guān)系且有相同前綴的關(guān)鍵字的一些字節(jié)狀態(tài)進(jìn)行確定或合并;③對(duì)所有關(guān)鍵字的字符狀態(tài)表中沒(méi)有被匹配到的字符再進(jìn)行匹配;④根據(jù)字符狀態(tài)表進(jìn)行總狀態(tài)表的生成。
      每個(gè)關(guān)鍵字都可以歸納出該關(guān)鍵字的狀態(tài)表,狀態(tài)表中的狀態(tài)表示當(dāng)前已經(jīng)匹配的關(guān)鍵字前綴。對(duì)于同時(shí)匹配多個(gè)關(guān)鍵字,則各關(guān)鍵字狀態(tài)表中的狀態(tài)是可以并且必須合并的。關(guān)鍵字間單一狀態(tài)機(jī)的合并程度取決于狀態(tài)序列的相似程度,所以可以將關(guān)鍵字與關(guān)鍵字間的關(guān)系用它們之間的相似程度來(lái)劃分。根據(jù)兩個(gè)關(guān)鍵字的相同部分在關(guān)鍵字中的位置可以將關(guān)鍵字間的相互關(guān)系歸為以下幾類

      需要合并的是具有相似關(guān)系和包含關(guān)系的關(guān)鍵字。
      具有相似關(guān)系的關(guān)鍵字分為兩類一類是相同部分從兩個(gè)關(guān)鍵字的頭開始,結(jié)束于關(guān)鍵字中。如abcde和abcmnl間的關(guān)系,他們有相同的前綴關(guān)鍵字abc。
      另一類是相同部分從其中一個(gè)關(guān)鍵字的中間開始,如abcdef和bcdgk,第二個(gè)關(guān)鍵字的前綴bcd與第一個(gè)關(guān)鍵字中的部分相同。
      還有的就是具有特殊的包含關(guān)系的(兩個(gè)關(guān)鍵字相同或者一個(gè)關(guān)鍵字從頭開始被完全包含在另一個(gè)關(guān)鍵字中)。如acd被acdfg包含,abc被aabcd包含。
      若兩個(gè)關(guān)鍵字之間從前綴開始互相沒(méi)有任何相似關(guān)系,則它們之間不會(huì)有狀態(tài)間互相轉(zhuǎn)換的可能,它們的狀態(tài)集沒(méi)有交集,那么兩個(gè)關(guān)鍵字的狀態(tài)將互相獨(dú)立存在于多關(guān)鍵字狀態(tài)機(jī)中。
      關(guān)鍵字間的關(guān)系若具有上述的相互聯(lián)系的關(guān)系的,那么兩個(gè)關(guān)鍵字在狀態(tài)表中將有相互間的狀態(tài)轉(zhuǎn)換的關(guān)系。兩個(gè)關(guān)鍵字相同的關(guān)鍵字部分在狀態(tài)表中的狀態(tài)必須用唯一的狀態(tài)來(lái)表示,關(guān)鍵字完全查找到的狀態(tài)用終結(jié)狀態(tài)來(lái)表示。若某一關(guān)鍵字屬于另一個(gè)關(guān)鍵字的中間一部分,則該關(guān)鍵字的狀態(tài)都屬于另一個(gè)關(guān)鍵字的狀態(tài)集。
      所述第一階段的第②中確定所有待查找的關(guān)鍵字之間的關(guān)系包括①判斷某關(guān)鍵字與其下所有關(guān)鍵字判斷是否有前綴關(guān)系;②判斷兩個(gè)關(guān)鍵字是否有包含關(guān)系。
      將具有前綴關(guān)系的關(guān)鍵字進(jìn)行如下狀態(tài)合并①如果是相同的關(guān)鍵字,則刪除后面一個(gè)關(guān)鍵字,并釋放后面一個(gè)關(guān)鍵字的字符狀態(tài)表;
      ②如果兩個(gè)關(guān)鍵字只有部分相同,則從相同的第一個(gè)字符開始,分別從兩個(gè)關(guān)鍵字的字符狀態(tài)表中找出該字符下關(guān)鍵字的當(dāng)前狀態(tài)。
      1)如果兩個(gè)關(guān)鍵字中相應(yīng)的字符狀態(tài)都為空閑狀態(tài),則取新的狀態(tài),并更新兩個(gè)關(guān)鍵字的字符狀態(tài)表中的相應(yīng)的狀態(tài)為一個(gè)相同的中間狀態(tài);2)如果兩個(gè)關(guān)鍵字中某個(gè)字符下的字符狀態(tài)表中的當(dāng)前狀態(tài)不為空閑狀態(tài),若其中一個(gè)已經(jīng)被賦過(guò)狀態(tài),則用其值更新另一個(gè)的當(dāng)前狀態(tài);3)如果是二者都不處于空閑狀態(tài),并且兩者的當(dāng)前狀態(tài)又不相等,則判斷是已經(jīng)存在匹配關(guān)系。如果二者都是終結(jié)狀態(tài),以前一個(gè)狀態(tài)為準(zhǔn);如果只有一個(gè)是終結(jié)狀態(tài),用該狀態(tài)同步另一個(gè)中相應(yīng)的狀態(tài)。
      對(duì)兩個(gè)關(guān)鍵字有包含關(guān)系的進(jìn)行如下處理①如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)為空閑狀態(tài),則申請(qǐng)一個(gè)新的終結(jié)狀態(tài);②如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)不為終結(jié)狀態(tài),則為其申請(qǐng)一個(gè)新的終結(jié)狀態(tài);③如果兩個(gè)關(guān)鍵字有同樣的前綴又是包含關(guān)系,則二關(guān)鍵字的終結(jié)狀態(tài)以長(zhǎng)關(guān)鍵字為準(zhǔn);④如果是到長(zhǎng)關(guān)鍵字的最后一個(gè)字符匹配,則把長(zhǎng)關(guān)鍵字也加入字符狀態(tài)匹配描述表。
      第一階段的第③步,對(duì)所有關(guān)鍵字的字符狀態(tài)表中沒(méi)有被匹配到的字符再進(jìn)行匹配。對(duì)所有關(guān)鍵字的字符狀態(tài)表中沒(méi)有被匹配到的字符再進(jìn)行匹配。對(duì)于為空閑狀態(tài)的申請(qǐng)一個(gè)新的中間狀態(tài)。關(guān)鍵字最后字符下的當(dāng)前狀態(tài)若為空閑狀態(tài),則申請(qǐng)一個(gè)新的終結(jié)狀態(tài)。
      第一階段的第④步是根據(jù)字符狀態(tài)表進(jìn)行總狀態(tài)表的生成??偁顟B(tài)表為變量分別為狀態(tài)和輸入字符的二維表,表中數(shù)據(jù)為狀態(tài)變遷的下一個(gè)跳轉(zhuǎn)狀態(tài)。
      根據(jù)所有關(guān)鍵字的狀態(tài)表,將所有狀態(tài)同步到總狀態(tài)表中去,可以初步完成總狀態(tài)表的建立。初步的總狀態(tài)表還不能解決關(guān)鍵字間狀態(tài)轉(zhuǎn)換時(shí)存在的最佳跳轉(zhuǎn)問(wèn)題,也就是在某個(gè)字符狀態(tài)下所有關(guān)鍵字(包括本身)在該狀態(tài)下隱含的最大已匹配前綴的問(wèn)題。通過(guò)對(duì)每個(gè)關(guān)鍵字建一臨時(shí)狀態(tài)表,對(duì)所有待查找關(guān)鍵字在該關(guān)鍵字中找到所有匹配的前綴,和臨時(shí)表中的已有前綴做比較,保留最大前綴,最后將臨時(shí)表更新到總狀態(tài)表中去,完成總狀態(tài)表的建立。圖5是本發(fā)明提出的方法中建立匹配總狀態(tài)表的第二階段的流程圖。如圖5所示,第二階段包括下列步驟①對(duì)每一個(gè)關(guān)鍵字,建立一個(gè)臨時(shí)狀態(tài)表;②對(duì)所有待匹配關(guān)鍵字在該關(guān)鍵字中找到所有匹配的前綴,與臨時(shí)狀態(tài)表中的已有前綴進(jìn)行比較;③根據(jù)最大前綴原則更新臨時(shí)狀態(tài)表中的狀態(tài);④根據(jù)臨時(shí)狀態(tài)表中的內(nèi)容對(duì)總狀態(tài)表進(jìn)行更新。同步方法為對(duì)所有的關(guān)鍵字,設(shè)初始當(dāng)前狀態(tài)為空閑狀態(tài),輸入字符為關(guān)鍵字的第一個(gè)字符,則總狀態(tài)表的下一個(gè)跳轉(zhuǎn)狀態(tài)為該關(guān)鍵字在字符狀態(tài)表中的當(dāng)前字符下的下一個(gè)跳轉(zhuǎn)狀態(tài)。接著設(shè)當(dāng)前狀態(tài)為下一個(gè)跳轉(zhuǎn)狀態(tài),當(dāng)前的輸入字符為關(guān)鍵字的第二個(gè)字符,又從該關(guān)鍵字在字符狀態(tài)表中取的了下一個(gè)的跳轉(zhuǎn)狀態(tài)。依此類推,將所有的關(guān)鍵字的字符狀態(tài)表同步的總狀態(tài)表中。
      對(duì)每一個(gè)關(guān)鍵字,建立一個(gè)臨時(shí)狀態(tài)表,是變量為關(guān)鍵字長(zhǎng)度和字符可能值(255)的二維數(shù)組,數(shù)組存放值為目前到該字符終止,下一跳正文前移前綴可能的最大長(zhǎng)度。與其它所有待查找的關(guān)鍵字進(jìn)行比較,找出其所有前綴,根據(jù)原來(lái)的表比較找到其串系,并針對(duì)每一個(gè)字節(jié)來(lái)確定其狀態(tài)機(jī)的內(nèi)容,更新臨時(shí)狀態(tài)表,刷新總狀態(tài)轉(zhuǎn)換表。對(duì)比較的源關(guān)鍵字,在其中找出目的關(guān)鍵字在其中的匹配前綴的長(zhǎng)度。
      根據(jù)最大前綴原則更新臨時(shí)狀態(tài)表中的狀態(tài)包括下列步驟①如果匹配長(zhǎng)度為目的關(guān)鍵字的長(zhǎng)度,這種包含關(guān)系的狀態(tài)確定,在前面包含關(guān)系匹配中已經(jīng)確定,其狀態(tài)已經(jīng)全部合并完成,可以不做處理;②如果源關(guān)鍵字下面一個(gè)字符是結(jié)尾,則說(shuō)明源關(guān)鍵字在目標(biāo)關(guān)鍵字中,二者有包含關(guān)系,如果需要繼續(xù)向下找其它匹配字符,則可以繼續(xù)進(jìn)行處理;③在臨時(shí)狀態(tài)表中,取出當(dāng)前匹配的最大前綴長(zhǎng)度,如果目前的前綴大于原來(lái)的前綴,則狀態(tài)轉(zhuǎn)為目的關(guān)鍵字匹配終結(jié)時(shí)字符所要對(duì)應(yīng)的狀態(tài)。
      本發(fā)明的應(yīng)用范圍非常廣泛,可應(yīng)用于HTTP,F(xiàn)TP,郵件等安全過(guò)濾中在正文中同時(shí)查找多個(gè)關(guān)鍵字。即可用于實(shí)時(shí)性要求很高的實(shí)時(shí)網(wǎng)絡(luò)信息監(jiān)控系統(tǒng)和檢索信息量很大的大規(guī)模監(jiān)控,也可應(yīng)用于一般的信息檢測(cè)系統(tǒng)。
      權(quán)利要求
      1.一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于包括下列步驟①建立匹配總狀態(tài)表;②輸入待匹配信息;③自動(dòng)狀態(tài)機(jī)利用匹配總狀態(tài)表進(jìn)行查找匹配;④輸出查找匹配結(jié)果。
      2.根據(jù)權(quán)利要求1所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述步驟①包括兩個(gè)階段第一階段為生成多關(guān)鍵字總狀態(tài)表,第二階段為同步總狀態(tài)表中的狀態(tài)。
      3.根據(jù)權(quán)利要求2所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述第一階段包括下列步驟①初始化自動(dòng)狀態(tài)機(jī)的總狀態(tài)表,各關(guān)鍵字狀態(tài)表和終結(jié)狀態(tài)匹配描述表;②確定所有待查找的關(guān)鍵字之間的關(guān)系,對(duì)于有包含關(guān)系且有相同前綴的關(guān)鍵字的一些字節(jié)狀態(tài)進(jìn)行確定或合并;③對(duì)所有關(guān)鍵字的字符狀態(tài)表中沒(méi)有被匹配到的字符再進(jìn)行匹配;④根據(jù)字符狀態(tài)表進(jìn)行總狀態(tài)表的生成。
      4.根據(jù)權(quán)利要求2所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述第二階段包括下列步驟①對(duì)每一個(gè)關(guān)鍵字,建立一個(gè)臨時(shí)狀態(tài)表;②對(duì)所有待匹配關(guān)鍵字在該關(guān)鍵字中找到所有匹配的前綴,與臨時(shí)狀態(tài)表中的已有前綴進(jìn)行比較;③根據(jù)最大前綴原則更新臨時(shí)狀態(tài)表中的狀態(tài);④根據(jù)臨時(shí)狀態(tài)表中的內(nèi)容對(duì)總狀態(tài)表進(jìn)行更新。
      5.根據(jù)權(quán)利要求3所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述關(guān)鍵字間的單一狀態(tài)機(jī)的合并程度取決于狀態(tài)序列的相似程度。
      6.根據(jù)權(quán)利要求5所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述的相似程度包括三類包含關(guān)系,相似關(guān)系和沒(méi)有關(guān)系。
      7.根據(jù)權(quán)利要求3所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述步驟②包括①判斷某關(guān)鍵字與其下所有關(guān)鍵字判斷是否有前綴關(guān)系;②判斷兩個(gè)關(guān)鍵字是否有包含關(guān)系。
      8.根據(jù)權(quán)利要求7所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于將具有前綴關(guān)系的關(guān)鍵字進(jìn)行如下狀態(tài)合并①如果是相同的關(guān)鍵字,則刪除后面一個(gè)關(guān)鍵字,并釋放后面一個(gè)關(guān)鍵字的字符狀態(tài)表;②如果兩個(gè)關(guān)鍵字只有部分相同,則從相同的第一個(gè)字符開始,分別從兩個(gè)關(guān)鍵字的字符狀態(tài)表中找出該字符下關(guān)鍵字的當(dāng)前狀態(tài)。
      9.根據(jù)權(quán)利要求8所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述步驟②具體包括如下步驟①如果兩個(gè)關(guān)鍵字中相應(yīng)的字符狀態(tài)都為空閑狀態(tài),則取新的狀態(tài),并更新兩個(gè)關(guān)鍵字的字符狀態(tài)表中的相應(yīng)的狀態(tài)為一個(gè)相同的中間狀態(tài);②如果兩個(gè)關(guān)鍵字中某個(gè)字符下的字符狀態(tài)表中的當(dāng)前狀態(tài)不為空閑狀態(tài),若其中一個(gè)已經(jīng)被賦過(guò)狀態(tài),則用其值更新另一個(gè)的當(dāng)前狀態(tài);③如果是二者都不處于空閑狀態(tài),并且兩者的當(dāng)前狀態(tài)又不相等,則判斷是已經(jīng)存在匹配關(guān)系。如果二者都是終結(jié)狀態(tài),以前一個(gè)狀態(tài)為準(zhǔn);如果只有一個(gè)是終結(jié)狀態(tài),用該狀態(tài)同步另一個(gè)中相應(yīng)的狀態(tài)。
      10.根據(jù)權(quán)利要求7所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于對(duì)兩個(gè)關(guān)鍵字有包含關(guān)系的進(jìn)行如下處理①如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)為空閑狀態(tài),則申請(qǐng)一個(gè)新的終結(jié)狀態(tài);②如果長(zhǎng)關(guān)鍵字在包含串所對(duì)應(yīng)的最后一個(gè)字符處的狀態(tài)不為終結(jié)狀態(tài),則為其申請(qǐng)一個(gè)新的終結(jié)狀態(tài);③如果兩個(gè)關(guān)鍵字有同樣的前綴又是包含關(guān)系,則二關(guān)鍵字的終結(jié)狀態(tài)以長(zhǎng)關(guān)鍵字為準(zhǔn);④如果是到長(zhǎng)關(guān)鍵字的最后一個(gè)字符匹配,則把長(zhǎng)關(guān)鍵字也加入字符狀態(tài)匹配描述表。
      11.根據(jù)權(quán)利要求4所述的一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,其特征在于所述步驟③包括下列步驟①如果匹配長(zhǎng)度為目的關(guān)鍵字的長(zhǎng)度,這種包含關(guān)系的狀態(tài)確定,在前面包含關(guān)系匹配中已經(jīng)確定,其狀態(tài)已經(jīng)全部合并完成,可以不做處理;②如果源關(guān)鍵字下面一個(gè)字符是結(jié)尾,則說(shuō)明源關(guān)鍵字在目標(biāo)關(guān)鍵字中,二者有包含關(guān)系,如果需要繼續(xù)向下找其它匹配字符,則可以繼續(xù)進(jìn)行處理;③在臨時(shí)狀態(tài)表中,取出當(dāng)前匹配的最大前綴長(zhǎng)度,如果目前的前綴大于原來(lái)的前綴,則狀態(tài)轉(zhuǎn)為目的關(guān)鍵字匹配終結(jié)時(shí)字符所要對(duì)應(yīng)的狀態(tài)。
      全文摘要
      本發(fā)明公開了一種多關(guān)鍵字自動(dòng)狀態(tài)機(jī)查找匹配方法,包括下列步驟①建立匹配總狀態(tài)表;②輸入待匹配信息;③自動(dòng)狀態(tài)機(jī)利用匹配總狀態(tài)表進(jìn)行查找匹配;④輸出查找匹配結(jié)果。本發(fā)明查找速度快、查找速度和規(guī)則數(shù)無(wú)關(guān);對(duì)查找關(guān)鍵字的編碼沒(méi)有特殊要求,可以查找多種文字混合的正文;可以同時(shí)查找多個(gè)特定關(guān)鍵字,也可以只查找指定的某一個(gè)關(guān)鍵字。本發(fā)明即可用于實(shí)時(shí)性要求很高的實(shí)時(shí)網(wǎng)絡(luò)信息監(jiān)控系統(tǒng)和檢索信息量很大的大規(guī)模監(jiān)控,也可應(yīng)用于一般的信息檢測(cè)系統(tǒng)。
      文檔編號(hào)G06F17/30GK1492359SQ0211137
      公開日2004年4月28日 申請(qǐng)日期2002年4月10日 優(yōu)先權(quán)日2002年4月10日
      發(fā)明者許志軍, 秦浩, 吳晨 申請(qǐng)人:深圳市中興通訊股份有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1