專利名稱:一種可配置方式的復(fù)雜關(guān)鍵字搜索技術(shù)實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種文本,網(wǎng)頁或其他二進(jìn)制內(nèi)容的搜索方法,尤其是一種具有復(fù)雜 關(guān)鍵字檢索結(jié)構(gòu)的網(wǎng)絡(luò)搜索方法,具體地說是一種可配置方式的復(fù)雜關(guān)鍵字搜索方法。
背景技術(shù):
目前,搜索技術(shù)在我們生活中運(yùn)用廣泛,而實(shí)際在軟件開發(fā)中常常遇到一種情況 是搜索的內(nèi)容不固定,只知道幾個(gè)典型的關(guān)鍵字,且關(guān)鍵字可能經(jīng)常變化。例如要分析一 個(gè)郵件網(wǎng)頁的正文內(nèi)容,首先要確定正文開始的關(guān)鍵字和結(jié)束的關(guān)鍵字。因?yàn)榫W(wǎng)頁是腳本 隨機(jī)生成的,不同語言、不同編碼這個(gè)關(guān)鍵字都不一樣,或者這個(gè)網(wǎng)站還在更新中,依賴的 關(guān)鍵字會(huì)經(jīng)常變化,又或者依賴的關(guān)鍵字不是唯一的,在全文中有M個(gè),而我們需要找到第 N個(gè)關(guān)鍵字之后的內(nèi)容。舉三種情況
1)按照關(guān)鍵字出現(xiàn)的順序,先查找第一個(gè)出現(xiàn)的A,之后查找B,截取B之后的內(nèi)容到 關(guān)鍵字C結(jié)束
2)按照關(guān)鍵字出現(xiàn)的順序,需要實(shí)現(xiàn)查找關(guān)鍵字A,再查找關(guān)鍵字B或者關(guān)鍵字C,如 果關(guān)鍵字B出現(xiàn),則查找后面的判斷是否存在關(guān)鍵字D,如果B不出現(xiàn)C出現(xiàn),則判斷后面是 否存在關(guān)鍵字F。3)按照關(guān)鍵字出現(xiàn)的順序,先查找關(guān)鍵字A,之后查找B或者C,截取包含B或者 C關(guān)鍵字到結(jié)束的所有內(nèi)容。
傳統(tǒng)的方法針對(duì)三種情況,寫三段代碼. 對(duì)情況1
If (內(nèi)容查找到A)
{
If (內(nèi)容查找到B)
{
If (內(nèi)容查找到C)
返回B和C之間的內(nèi)容
對(duì)情況2
If (內(nèi)容查找到A)
{
If (內(nèi)容查找到B)
{
If (內(nèi)容查找到D )返回找到
}
Else if (內(nèi)容查找到C) If (內(nèi)容查找到F) 返回找到
}
返回未找到 對(duì)情況3
If (內(nèi)容查找到A)
{
If (內(nèi)容查找到B)
{
查找結(jié)尾 返回內(nèi)容
}
Else (內(nèi)容查找到C)
{
查找結(jié)尾 返回內(nèi)容
返回未找到
以上在關(guān)鍵字確定,邏輯不是特別復(fù)雜時(shí),已經(jīng)明顯感到處理的復(fù)雜性。上面的傳統(tǒng)方法處理的幾個(gè)明顯的缺點(diǎn)
1)邏輯過于復(fù)雜,可讀性差;
2)代碼過于累贅,沒有復(fù)用性,可維護(hù)性差;
3)如果有新的邏輯出現(xiàn),則需要新增加代碼,可移植性差;
4)如果關(guān)鍵字修改,則代碼需要修改,需要重新編譯,升級(jí)繁瑣。
發(fā)明內(nèi)容
本發(fā)明的目的是針對(duì)查找一些內(nèi)容時(shí),查找的依賴關(guān)鍵字比較多,關(guān)鍵字與關(guān)鍵 字之間的邏輯關(guān)系又相對(duì)復(fù)雜,關(guān)鍵字經(jīng)常變化時(shí)搜索適應(yīng)性和可移植性差的問題,發(fā)明 一種可配置方式的復(fù)雜關(guān)鍵字搜索方法。本發(fā)明的技術(shù)方案是
一種可配置方式的復(fù)雜關(guān)鍵字搜索方法,其特征是它包括以下步驟 首先,在搜索引擎中設(shè)置一個(gè)配置文件,在所述配置文件中配置需查找的關(guān)鍵字的查 找邏輯關(guān)系;通過配置文件配置查找項(xiàng)依賴的關(guān)鍵字,通過配置文件配置關(guān)鍵字的邏輯關(guān) 系,隔離關(guān)鍵字變化或者關(guān)鍵字間邏輯關(guān)系變化對(duì)處理流程帶來的影響;配置文件可以配 置的內(nèi)容包括支持多個(gè)查找項(xiàng),每個(gè)查找項(xiàng)都有一個(gè)唯一標(biāo)識(shí); 支持關(guān)鍵字間的邏輯關(guān)系表示,邏輯關(guān)系包括“與”,“或”; 支持任意字符的關(guān)鍵字,不可見字符可用16進(jìn)制表示;
支持關(guān)鍵字類型表示,類型包括查詢類型、取值開始類型、取值結(jié)束類型、查找開始包 含這個(gè)關(guān)鍵字、查找結(jié)束包含這個(gè)關(guān)鍵字、查找結(jié)尾以查找內(nèi)容結(jié)尾為內(nèi)容結(jié)束等;
其次,在初始化搜索引擎時(shí)先讀取配置文件,按照查找項(xiàng)的內(nèi)容和數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
存儲(chǔ)數(shù)據(jù);
最后,執(zhí)行查找或查詢函數(shù),根據(jù)配置項(xiàng)標(biāo)識(shí)查找數(shù)據(jù)內(nèi)容,返回查找結(jié)果和內(nèi)容。所述的配置文件中可含有多個(gè)查找項(xiàng),每個(gè)查找項(xiàng)均帶有標(biāo)識(shí)符,每個(gè)查找項(xiàng)均 可由多個(gè)關(guān)鍵字組成,關(guān)鍵字?jǐn)?shù)量的上限可以設(shè)定,關(guān)鍵字開始和結(jié)束有分割符分割,關(guān)鍵 字的配置順序就是其查找時(shí)的先后順序;關(guān)鍵字的邏輯關(guān)系包括“與”、“或”兩種;同時(shí)為關(guān) 鍵字配置類別。所述的類別不查擴(kuò)充類別,它包括查詢類型,取值開始類型,取值結(jié)束類型,返回 包含關(guān)鍵字類型,返回關(guān)鍵字開始到結(jié)束類型。所述的標(biāo)識(shí)符=([類蕃關(guān)鍵字1])邏輯關(guān)系([類蕃關(guān)鍵字2])…邏輯關(guān)系([類 蕃關(guān)鍵字η]),標(biāo)識(shí)為可見字符,“([”為關(guān)鍵字開始分割符,“]),,為關(guān)鍵字結(jié)束分割符。所述的初始化是指
(1)程序啟動(dòng)或者中途需要讀入配置文件;
(2)配置文件存在本地或者遠(yuǎn)程,配置項(xiàng)按照配置文件的格式讀入內(nèi)存;
(3)配置內(nèi)容按照數(shù)據(jù)結(jié)構(gòu)存放每一個(gè)配置項(xiàng)。所述的執(zhí)行查找或查詢函數(shù)是指查找按照配置項(xiàng)的標(biāo)識(shí)進(jìn)行單項(xiàng)查找,返回查 找內(nèi)容,執(zhí)行查詢函數(shù)是指查找按照配置項(xiàng)的標(biāo)識(shí)進(jìn)行單項(xiàng)查找,返回查找結(jié)果。本發(fā)明的有益效果
利用本發(fā)明的方法能夠解決負(fù)責(zé)邏輯的統(tǒng)一查找,這種技術(shù)的創(chuàng)新點(diǎn)在于可配置,查 找靈活,應(yīng)用范圍廣,使用這種技術(shù)后,代碼的可讀性,軟件的可維護(hù)性以及可擴(kuò)展性大大 提尚。本發(fā)明方法簡單,易于實(shí)現(xiàn),在實(shí)際應(yīng)用中,具有較好的可移植性。
圖1是本發(fā)明的初始化流程圖。圖2是本發(fā)明的查找流程圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說明。如圖1、2所示。一種可配置方式的復(fù)雜關(guān)鍵字搜索方法,它包括以下步驟
首先,在搜索引擎中設(shè)置一個(gè)配置文件,在所述配置文件中配置需查找的關(guān)鍵字的查 找邏輯關(guān)系;配置文件應(yīng)記錄查找的項(xiàng)目、查找項(xiàng)目依賴的關(guān)鍵字以及關(guān)鍵字之間的邏輯 關(guān)系和關(guān)鍵字類型,具體要求為al、配置文件按照約定的語法格式配置,具體語法見下文說明。配置文件可以配置依賴 的查找關(guān)鍵字,關(guān)鍵字?jǐn)?shù)量不設(shè)上限,每個(gè)配置必須有一個(gè)唯一標(biāo)識(shí)標(biāo)記;
a2、查找的內(nèi)容依賴的關(guān)鍵字?jǐn)?shù)量不設(shè)上限,關(guān)鍵字開始結(jié)束有特定(如下所列的配置 文件的具體語法所示)的分割符分割,關(guān)鍵字的配置順序就是其查找時(shí)的先后順序;
a3、配置依賴關(guān)鍵字需要配置關(guān)鍵字的邏輯關(guān)系,邏輯關(guān)系包括“與”,“或”兩種關(guān)系; a4、配置項(xiàng)的依賴關(guān)鍵字是要配置類別的,這些類別包括查詢類型,取值開始類型,取 值結(jié)束類型,返回包含關(guān)鍵字類型,返回關(guān)鍵字開始到結(jié)束類型,類型可以擴(kuò)充; 配置文件的具體語法說明
標(biāo)識(shí)符=([類蕃關(guān)鍵字1])邏輯關(guān)系([類蕃關(guān)鍵字2])…邏輯關(guān)系([類蕃關(guān)鍵字
η])
標(biāo)識(shí)說明標(biāo)識(shí)為可見字符 “([”關(guān)鍵字開始分割符 “])”關(guān)鍵字結(jié)束分割符 類型
關(guān)鍵字的類型具體包括 $-----查詢標(biāo)記
%——從查找開始到這個(gè)符號(hào)后字符串結(jié)束 ——從這個(gè)符號(hào)后字符開始到結(jié)束 & 一一查找開始標(biāo)記,不帶這個(gè)符號(hào)
-----查找開始標(biāo)記,帶這個(gè)符號(hào)
@——查找結(jié)束字符,但連帶這個(gè)符號(hào) # 一一查找結(jié)束標(biāo)記,不帶這個(gè)符號(hào) + 一一沒有找到以查找結(jié)束為結(jié)束 關(guān)鍵字
查找依賴的關(guān)鍵字,可顯示字符,如果是十六進(jìn)制則標(biāo)識(shí)方法為 IOx十六進(jìn)制數(shù)1,Ox十六進(jìn)制數(shù)2,···,Ox十六進(jìn)制數(shù)η}; 邏輯關(guān)系
&一一與關(guān)系,即出現(xiàn)前一個(gè)關(guān)鍵字之后必須出現(xiàn)下一個(gè)關(guān)鍵字 一一或關(guān)系,即如果前一個(gè)關(guān)鍵字不出現(xiàn)則可以是出現(xiàn)下一個(gè)關(guān)鍵字 具體的標(biāo)識(shí)舉例
value=([$keyl])&([ &key2]) | ([&key3])&([# key4])
這一行配置表達(dá)的的意思是Value項(xiàng)的查找邏輯是先查找keyl,然后查找key2,如果 Key2也沒有找到則查找key3,然后查找key4,取key2或者key3關(guān)鍵字后面內(nèi)容作為查找 到目標(biāo)內(nèi)容的開始,key4關(guān)鍵字之前的內(nèi)容作為目標(biāo)內(nèi)容的結(jié)束。
上述內(nèi)容均可存在文件配置模具中。 其次,啟動(dòng)初始化模塊,先讀取配置文件,按照查找項(xiàng)的內(nèi)容和數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)存儲(chǔ) 數(shù)據(jù);數(shù)據(jù)采用順序單向鏈表,每個(gè)鏈表子節(jié)點(diǎn)包含了 “與”節(jié)點(diǎn)指針,“或”節(jié)點(diǎn)指針,關(guān)鍵 字內(nèi)容,關(guān)鍵字類型。這種結(jié)構(gòu)的好處是可以表達(dá)復(fù)雜的邏輯,在查找時(shí)方便實(shí)現(xiàn)數(shù)據(jù)的查 找。
初始化模塊主要負(fù)責(zé)將配置文件轉(zhuǎn)化為便于查找的鏈表結(jié)構(gòu),將查找內(nèi)容存儲(chǔ)到 內(nèi)存的關(guān)鍵字鏈表結(jié)構(gòu)。bl、讀取配置文件,確定需要讀取的查找項(xiàng); b2、分析讀取的項(xiàng)的關(guān)鍵字關(guān)系,存入查找鏈表。初始化流程圖如圖1所示,具體的初始化執(zhí)行步驟可為 步驟101,首先傳入配置文件名稱;
步驟102,檢查文件是否存在,存在執(zhí)行步驟103,不存在執(zhí)行步驟112 ; 步驟103,讀入一行文件內(nèi)容;
步驟104判斷文件是否結(jié)束,如果未結(jié)束執(zhí)行步驟105,結(jié)束則執(zhí)行步驟112 ; 步驟105,分析讀入的內(nèi)容確定查找的標(biāo)識(shí)符,申請(qǐng)節(jié)點(diǎn)緩存; 步驟106,分析獲取一個(gè)關(guān)鍵字內(nèi)容;
步驟107,判斷關(guān)鍵字是否正確,正確則執(zhí)行108,錯(cuò)誤或結(jié)束則執(zhí)行步驟103 ; 步驟108,申請(qǐng)關(guān)鍵字節(jié)點(diǎn),并賦值; 步驟109,分析邏輯關(guān)系;
步驟110,根據(jù)邏輯關(guān)系,將關(guān)鍵字節(jié)點(diǎn)掛載到“與”或“或”節(jié)點(diǎn)下; 步驟111,執(zhí)行步驟106 ; 步驟112,初始化結(jié)束,返回。;
最后,執(zhí)行查找或查詢函數(shù)模塊,根據(jù)配置項(xiàng)標(biāo)識(shí)查找數(shù)據(jù)內(nèi)容,返回查找結(jié)果和內(nèi) 容;查找或查詢函數(shù)模塊主要完成查找接口,當(dāng)用戶傳入需要查找的源字符串和查找項(xiàng)標(biāo) 識(shí)時(shí),查找或查詢函數(shù)模塊根據(jù)查找項(xiàng)的關(guān)鍵字關(guān)系進(jìn)行查找 Cl、取一個(gè)關(guān)鍵字內(nèi)容,在源字符串中查找; C2、如果找到則根據(jù)類型,記錄查找結(jié)果,取下一個(gè)關(guān)鍵字查找; C3、如果沒有找到則取同級(jí)的“或”關(guān)鍵字; C4、查找結(jié)束將結(jié)果返回。具體的搜索流程如圖2所示,搜索步驟為 步驟201,傳入查找的步驟112字符串或二進(jìn)制文件; 步驟202,獲取查找項(xiàng)指針;
步驟203,獲取查找項(xiàng)的下一個(gè)“與”關(guān)系關(guān)鍵字結(jié)構(gòu); 步驟204,如果“與”關(guān)鍵字結(jié)束執(zhí)行步驟213,否則執(zhí)行步驟205 ; 步驟205,按照當(dāng)前關(guān)鍵字對(duì)源字符串或二進(jìn)制數(shù)據(jù)進(jìn)行查找; 步驟206,如果關(guān)鍵字找到,執(zhí)行步驟207,未找到執(zhí)行步驟208 ; 步驟207,根據(jù)關(guān)鍵字的類別,設(shè)置輸出信息; 步驟208,取下一個(gè)“或”關(guān)系關(guān)鍵字;
步驟209,如果“或”關(guān)鍵字結(jié)束執(zhí)行步驟211,否則執(zhí)行步驟210 ; 步驟210,按照當(dāng)前關(guān)鍵字對(duì)源字符串或二進(jìn)制數(shù)據(jù)進(jìn)行查找; 步驟211,返回查找結(jié)果,查找失?。?br>
步驟212,如果關(guān)鍵字找到,執(zhí)行步驟207,未找到執(zhí)行步驟208 ; 步驟213,返回查找結(jié)果,查找成功。本發(fā)明未涉及部分均與現(xiàn)有技術(shù)相同或可采用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
權(quán)利要求
一種可配置方式的復(fù)雜關(guān)鍵字搜索方法,其特征是它包括以下步驟首先,在搜索引擎中配置一個(gè)配置文件,在所述配置文件中配置需查找的關(guān)鍵字的查找邏輯關(guān)系;其次,在初始化程序時(shí)先讀取配置文件,按照查找項(xiàng)的內(nèi)容和數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù);最后,執(zhí)行查找或查詢函數(shù),根據(jù)配置項(xiàng)標(biāo)識(shí)查找數(shù)據(jù)內(nèi)容,返回查找結(jié)果和內(nèi)容。
2.根據(jù)權(quán)利要求1所述的方法,其特征是所述的配置文件中可含有多個(gè)查找項(xiàng),每個(gè) 查找項(xiàng)均帶有標(biāo)識(shí)符,每個(gè)查找項(xiàng)均可由多個(gè)關(guān)鍵字組成,關(guān)鍵字?jǐn)?shù)量的上限可以設(shè)定,關(guān) 鍵字開始和結(jié)束有分割符分割,關(guān)鍵字的配置順序就是其查找時(shí)的先后順序;關(guān)鍵字的邏 輯關(guān)系包括“與”、“或”兩種;同時(shí)為關(guān)鍵字配置類別。
3.根據(jù)權(quán)利要求2所述的方法,其特征是所述的類別不查擴(kuò)充類別,它包括查詢類型, 取值開始類型,取值結(jié)束類型,返回包含關(guān)鍵字類型,返回關(guān)鍵字開始到結(jié)束類型。
4.根據(jù)權(quán)利要求2所述的方法,其特征是所述的標(biāo)識(shí)符=([類蕃關(guān)鍵字1])邏輯關(guān)系 ([類蕃關(guān)鍵字2])…邏輯關(guān)系([類蕃關(guān)鍵字n]),標(biāo)識(shí)為可見字符,“([”為關(guān)鍵字開始 分割符,“])”為關(guān)鍵字結(jié)束分割符。
5.根據(jù)權(quán)利要求1所述的方法,其特征是所述的初始化是指(1)程序啟動(dòng)或者中途需要讀入配置文件;(2)配置文件存在本地或者遠(yuǎn)程,配置項(xiàng)按照配置文件的格式讀入內(nèi)存;(3)配置內(nèi)容按照數(shù)據(jù)結(jié)構(gòu)存放每一個(gè)配置項(xiàng)。
6.根據(jù)權(quán)利要求1所述的方法,其特征是所述的執(zhí)行查找或查詢函數(shù)是指查找按照 配置項(xiàng)的標(biāo)識(shí)進(jìn)行單項(xiàng)查找,返回查找內(nèi)容,執(zhí)行查詢函數(shù)是指查找按照配置項(xiàng)的標(biāo)識(shí)進(jìn) 行單項(xiàng)查找,返回查找結(jié)果。
全文摘要
本發(fā)明涉及一種文本,網(wǎng)頁或其他二進(jìn)制內(nèi)容的搜索方法,尤其是一種具有復(fù)雜關(guān)鍵字檢索結(jié)構(gòu)的網(wǎng)絡(luò)搜索方法,主要是通過配置文件的方式,先對(duì)關(guān)鍵字進(jìn)行配置建立索引關(guān)系,實(shí)現(xiàn)對(duì)復(fù)雜邏輯關(guān)鍵字內(nèi)容的查找,從而解決關(guān)鍵字經(jīng)常變化時(shí)搜索適應(yīng)性和可移植性差的問題。這種技術(shù)的優(yōu)點(diǎn)是代碼簡單,復(fù)用性高,可實(shí)現(xiàn)復(fù)雜的邏輯關(guān)系的搜索,配置靈活,可用范圍廣。
文檔編號(hào)G06F17/30GK101916303SQ201010277130
公開日2010年12月15日 申請(qǐng)日期2010年9月9日 優(yōu)先權(quán)日2010年9月9日
發(fā)明者曹鏡云 申請(qǐng)人:南京中興特種軟件有限責(zé)任公司