一種構(gòu)建索引樹(shù)的方法、漢語(yǔ)詞匯搜索的方法及相關(guān)裝置制造方法
【專利摘要】本發(fā)明提供了一種構(gòu)建索引樹(shù)的方法及裝置,包括:建立關(guān)鍵詞及其對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;將關(guān)鍵鍵詞拆分成第一字根序列;根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;若不存在,則獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將關(guān)鍵詞與其對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中。本發(fā)明還提供一種漢語(yǔ)詞匯搜索的方法及裝置,通過(guò)將漢語(yǔ)詞匯拆分成五筆字根來(lái)構(gòu)建垂直索引樹(shù),具有構(gòu)建簡(jiǎn)單、搜索快速、哈希沖突小的優(yōu)點(diǎn)。
【專利說(shuō)明】一種構(gòu)建索引樹(shù)的方法、漢語(yǔ)詞匯搜索的方法及相關(guān)裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及搜索領(lǐng)域,尤其涉及一種構(gòu)建索引樹(shù)的方法、漢語(yǔ)詞匯搜索的方法及相關(guān)裝置。
【背景技術(shù)】
[0002]搜索引擎是根據(jù)一定的策略,運(yùn)用特定的計(jì)算機(jī)程序從互聯(lián)網(wǎng)上搜集信息,對(duì)信息進(jìn)行組織和處理后,為用戶提供檢索服務(wù),將檢索到的相關(guān)信息展示給用戶?,F(xiàn)有的搜索引擎包括全文索引、目錄索引、元搜索引擎、垂直搜索引擎等。
[0003]隨著互聯(lián)網(wǎng)的發(fā)展,信息在爆炸式增長(zhǎng),搜索技術(shù)越來(lái)越為網(wǎng)民重視,以谷歌、雅虎、百度為首的全文搜索已為大家熟知。然而全文搜索引擎,由于采用的是純關(guān)鍵詞匹配方式,信息的查全率和查準(zhǔn)率還是相當(dāng)?shù)氐停脩糨斎胍粋€(gè)關(guān)鍵詞,一般都會(huì)返回大量匹配結(jié)果,而很多結(jié)果根本不是用戶想要的,準(zhǔn)確性較差。
[0004]垂直搜索引擎是針對(duì)某一個(gè)行業(yè)的專業(yè)搜索引擎,是搜索引擎的細(xì)分和延伸,通過(guò)對(duì)網(wǎng)頁(yè)庫(kù)中的某類專門的信息進(jìn)行一次整合,定向分字段抽取出需要的數(shù)據(jù)進(jìn)行處理后再以某種形式返回給用戶。相對(duì)全文搜索引擎的信息量大、查詢不準(zhǔn)確、深度不夠等問(wèn)題,垂直搜索引擎可對(duì)某一特定領(lǐng)域、某一特定人群或某一特定需求提供“專、精、深”的信息和服務(wù)。相比較全文搜索引擎的海量信息無(wú)序化,垂直搜索引擎顯得更加專注、具體和深入。
[0005]現(xiàn)有技術(shù)中,對(duì)于表音文字,如英語(yǔ),可采用Trie樹(shù)來(lái)建立單詞索引。而漢語(yǔ)是一種意音文字或稱語(yǔ)素-音節(jié)文字、語(yǔ)詞-音節(jié)文字,是一種圖形符號(hào)既代表語(yǔ)素,又代表音節(jié)的文字系統(tǒng),如果按照拼音進(jìn)行排序搜索,其重復(fù)率太高。如果采用Hash表,由于漢語(yǔ)詞匯不斷增多,哈希沖突問(wèn)題難以解決。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明的目的在于提供一種構(gòu)建索引樹(shù)的方法、漢語(yǔ)詞匯搜索的方法及相關(guān)裝置,通過(guò)將漢語(yǔ)詞匯拆分成五筆字根來(lái)構(gòu)建垂直索引樹(shù),具有構(gòu)建簡(jiǎn)單、搜索快速、哈希沖突小的優(yōu)點(diǎn)。
[0007]為達(dá)到上述目的,本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的:
[0008]本發(fā)明的目的在于提供一種構(gòu)建索引樹(shù)的方法,包括:
[0009]建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0010]將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列;
[0011]根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0012]若不存在,則獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中;
[0013]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
[0014]本發(fā)明的目的在于提供一種構(gòu)建索引樹(shù)的裝置,包括:
[0015]關(guān)鍵詞建立模塊,用于建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0016]第一拆分模塊,用于將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列;
[0017]第一查找判斷模塊,用于根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0018]第一索引創(chuàng)建模塊,用于當(dāng)所述第一查找判斷模塊判斷為否時(shí),獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)占中.[0019]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
[0020]本發(fā)明的目的在于提供一種漢語(yǔ)詞匯搜索的方法,包括:
[0021]獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0022]將關(guān)鍵詞按照五筆字根拆分成第三字根序列;
[0023]根據(jù)第三字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0024]若存在,則獲取第三字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),并獲取所述最后匹配節(jié)點(diǎn)內(nèi)存儲(chǔ)的所述關(guān)鍵詞對(duì)應(yīng)的索引信息;
[0025]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
[0026]本發(fā)明的目的在于提供一種漢語(yǔ)詞匯搜索的裝置,包括:
[0027]關(guān)鍵詞獲取模塊,用于獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0028]第二拆分模塊,用于將關(guān)鍵詞按照五筆字根拆分成第三字根序列;
[0029]第二查找判斷模塊,用于根據(jù)所述第三字根序列在索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0030]信息獲取模塊,用于當(dāng)所述第二查找判斷模塊判斷為是時(shí),獲取所述第三字根序列在所述索引樹(shù)中的最后一個(gè)匹配節(jié)點(diǎn),并獲取所述節(jié)點(diǎn)內(nèi)所述關(guān)鍵詞對(duì)應(yīng)的索引信息;
[0031]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
[0032]由上述的技術(shù)方案可見(jiàn),本發(fā)明在構(gòu)建索引樹(shù)時(shí),將包含漢字的關(guān)鍵詞拆分成五筆字根序列,按照五筆字根的分類建立對(duì)應(yīng)的索引樹(shù)。在搜索時(shí),將待搜索的關(guān)鍵詞拆分成五筆字根序列,從索引樹(shù)根節(jié)點(diǎn)開(kāi)始搜索。本發(fā)明針對(duì)漢語(yǔ)詞匯提供一種全新的構(gòu)建索引樹(shù)的方法及其搜索方法,具有構(gòu)建簡(jiǎn)單、搜索快速、哈希沖突小的優(yōu)點(diǎn)。
【專利附圖】
【附圖說(shuō)明】
[0033]圖1為本發(fā)明提供的一種構(gòu)建索引樹(shù)的方法的實(shí)施例一的流程圖;[0034]圖2為本發(fā)明實(shí)施例提供一種五叉索引樹(shù)的第一示意圖;
[0035]圖3為本發(fā)明實(shí)施例提供一種五叉索引樹(shù)的第二示意圖;
[0036]圖4為本發(fā)明提供的一種構(gòu)建索引樹(shù)的方法的實(shí)施例二的流程圖;
[0037]圖5為本發(fā)明實(shí)施例提供的一種判斷索引樹(shù)中是否存在關(guān)鍵詞字根序列對(duì)應(yīng)的路徑的方法流程示意圖;
[0038]圖6為本發(fā)明實(shí)施例提供的一種根據(jù)字根序列構(gòu)建索引樹(shù)的方法流程示意圖;
[0039]圖7為本發(fā)明提供的一種構(gòu)建索引樹(shù)的裝置的實(shí)施例一的結(jié)構(gòu)圖;
[0040]圖8為本發(fā)明提供的一種構(gòu)建索引樹(shù)的裝置的實(shí)施例二的結(jié)構(gòu)圖;
[0041]圖9為本發(fā)明實(shí)施例提供的第一查找判斷模塊的結(jié)構(gòu)圖;
[0042]圖10為本發(fā)明實(shí)施例提供的第一索引創(chuàng)建模塊的結(jié)構(gòu)圖;
[0043]圖11為本發(fā)明實(shí)施例提供的一種漢語(yǔ)詞匯搜索的方法的流程圖;
[0044]圖12為本發(fā)明實(shí)施例提供一種判斷索引樹(shù)中是否存在字根序列對(duì)應(yīng)的路徑的方法流程圖;
[0045]圖13為本發(fā)明實(shí)施例提供的一種漢語(yǔ)詞匯搜索的裝置的結(jié)構(gòu)圖;
[0046]圖14為本發(fā)明實(shí)施例提供的第二查找判斷模塊的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0047]為使本發(fā)明的目的、技術(shù)方案、及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
[0048]如圖1所示,本發(fā)明提供的一種構(gòu)建索引樹(shù)的方法的實(shí)施例一的流程圖,包括:
[0049]步驟S101,建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字。
[0050]具體的,在構(gòu)建某個(gè)專業(yè)領(lǐng)域的垂直搜索引擎時(shí),需要從網(wǎng)絡(luò)中采集元數(shù)據(jù),并對(duì)元數(shù)據(jù)進(jìn)行分析,獲取元數(shù)據(jù)中的原始關(guān)鍵詞。為了實(shí)現(xiàn)模糊搜索,可對(duì)原始關(guān)鍵詞進(jìn)行擴(kuò)展和拆分,生成一個(gè)關(guān)鍵詞集合,在該關(guān)鍵詞集合中的每個(gè)關(guān)鍵詞都是原始關(guān)鍵詞的近似詞,每個(gè)關(guān)鍵詞的索引信息都與原始關(guān)鍵詞的索引信息相同。最后,針對(duì)關(guān)鍵詞集合中的每個(gè)關(guān)鍵詞分別建立索引樹(shù)。
[0051]如采集視頻領(lǐng)域的元數(shù)據(jù),該元數(shù)據(jù)包括視頻名稱、類型、主演、導(dǎo)演等數(shù)據(jù)。通過(guò)元數(shù)據(jù)進(jìn)行解析,可以將一個(gè)視頻的具體信息分析出來(lái),如將電影名稱為《ABCD》作為原始關(guān)鍵詞,對(duì)其進(jìn)行擴(kuò)展,則可能擴(kuò)展成《AB》、《⑶》、《AB⑶》、((ABC))等其中一個(gè)或多個(gè)。
[0052]索引信息可以是關(guān)鍵詞對(duì)應(yīng)的URL地址、標(biāo)識(shí)、名稱或序列號(hào)的哈希值。
[0053]步驟S102,將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列。
[0054]五筆字根是五筆字型輸入法的基本單元,現(xiàn)有的五筆字根版本有86版和98版本。字根序列是由關(guān)鍵詞拆分而成的多個(gè)字根的組合,例如,關(guān)鍵詞為“明天”,其可拆分成“日、月、一、大”的字根序列。
[0055]步驟S103,根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)的且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑,若不存在,進(jìn)入步驟S104。
[0056]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)?,F(xiàn)有的五筆字根至少可以分成起筆為橫豎撇捺(或點(diǎn))折的五種不同的類型,優(yōu)選地,N為5的整數(shù)倍。
[0057]一種可選的實(shí)施例是,該索引樹(shù)為五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折的字根。
[0058]另一種可選的實(shí)施例是,該索引樹(shù)為二十五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折對(duì)應(yīng)的25個(gè)區(qū)的字根。25區(qū)的分類參見(jiàn)86版或98版
五筆字根表。
[0059]需要說(shuō)明的是,本發(fā)明不限于上述兩種構(gòu)造索引樹(shù)的方式,本領(lǐng)域技術(shù)人員可以根據(jù)該原理將五筆字根按照其他的方式進(jìn)行分類,再根據(jù)分類的結(jié)果建立對(duì)應(yīng)的索引樹(shù)即可。
[0060]具體的,索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
[0061]以五叉索引樹(shù)為例,根節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)為〈K0,null, <Kj, Pj》,非根節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)為 <Ki,Map〈R(i,m),Map〈W(m,n),索引》,〈Kj,Pj>>。其中,
[0062]K1:節(jié)點(diǎn)的五筆序號(hào),值對(duì)應(yīng)“橫豎撇捺折”,0〈i〈6 ;
[0063]R(i,m):字根序號(hào),以Ki對(duì)應(yīng)的五筆起筆的第m個(gè)五筆字根,m>0 ;
[0064]W(m, η):第m個(gè)五筆字根在當(dāng)前節(jié)點(diǎn)組成的第η個(gè)關(guān)鍵詞,η>0 ;
[0065]Map<ff (m, η),索引 >:關(guān)鍵詞W (m, η)對(duì)應(yīng)的索引表,通過(guò)該索引表可以獲取到關(guān)鍵詞對(duì)應(yīng)的URL地址、標(biāo)識(shí)、名稱或序列號(hào);
[0066]Map<R(i, m), Map<ff (m, η),索引 >>:字根R(i, m)與當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表;
[0067]Kj:Ki節(jié)點(diǎn)的第j個(gè)子節(jié)點(diǎn)的序號(hào),0〈j〈6 ;
[0068]Pj:Ki節(jié)點(diǎn)的第j個(gè)子節(jié)點(diǎn)的指針;
[0069]i, j, m, η均為正整數(shù),null,表示為空指針。
[0070]由于每個(gè)節(jié)點(diǎn)內(nèi)包含一字根集,在判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑時(shí),如果路徑經(jīng)過(guò)的每個(gè)節(jié)點(diǎn)的字根集里包含了與第一字根序列一一對(duì)應(yīng)的字根,則判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑。如圖2所示,本發(fā)明實(shí)施例提供一種五叉索引樹(shù)的第一示意圖,在該索引樹(shù)中查找關(guān)鍵詞“明天”的字根序列“日、月、一、大”對(duì)應(yīng)的路徑,從根節(jié)點(diǎn)root開(kāi)始查找,在root的子節(jié)點(diǎn)n2中的字根表中包含“日”的字根,繼續(xù)在n2節(jié)點(diǎn)的子節(jié)點(diǎn)查找包含“月”的字跟的節(jié)點(diǎn),找到n6節(jié)點(diǎn),依次類推,最后,在索引樹(shù)中找到一條從根節(jié)點(diǎn)觸發(fā)的路徑,root-n2-n6-n8-n9,該路徑經(jīng)過(guò)的節(jié)點(diǎn)組成的字根序列與第一字根序列匹配。
[0071]步驟S104,獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中。
[0072]在圖3中查找關(guān)鍵詞“明天”的字根序列“日、月、一、大”對(duì)應(yīng)的路徑時(shí),未找到與字根序列匹配的路徑,獲取其在該索引樹(shù)中的最后匹配節(jié)點(diǎn)n6,在n6節(jié)點(diǎn)下為尚未匹配成功的字根序列“一、大”創(chuàng)建子索引樹(shù),建好的索引樹(shù)如圖2所示。
[0073]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0074]如圖4所示,本發(fā)明提供的一種構(gòu)建索引樹(shù)的方法的實(shí)施例二的流程圖,包括:
[0075]步驟S101,建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0076]步驟S102,將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列;
[0077]步驟S103,根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)的且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;若不存在,進(jìn)入步驟S104,若存在,進(jìn)入步驟S105 ;
[0078]步驟S104,獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中。
[0079]其中,步驟SlOl至步驟S104同圖1中實(shí)施例一,在此不再贅述。
[0080]步驟S105,獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn)。
[0081]參見(jiàn)圖2,關(guān)鍵詞“明天”在索引樹(shù)中的最后匹配節(jié)點(diǎn)為n9。
[0082]步驟S106,判斷所述最后匹配節(jié)點(diǎn)中是否存儲(chǔ)有所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息,若不存在,進(jìn)入步驟S107。
[0083]關(guān)鍵詞在索引樹(shù)中最后匹配的節(jié)點(diǎn)中可能包括多個(gè)詞語(yǔ),例如:信息、令牌、住處、停牌等。先判斷該最后匹配節(jié)點(diǎn)是否存儲(chǔ)有該關(guān)鍵詞,然后再判斷是否存儲(chǔ)有該關(guān)鍵詞對(duì)應(yīng)的索引信息。同樣的關(guān)鍵詞可對(duì)應(yīng)不同的索引信息。
[0084]步驟S107,將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
[0085]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0086]如圖5所示,本發(fā)明實(shí)施例提供的一種判斷索引樹(shù)中是否存在關(guān)鍵詞字根序列對(duì)應(yīng)的路徑的方法流程示意圖,包括:
[0087]步驟S1031,將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0088]步驟S1032,從第一字根序列中取出第一個(gè)字根作為查找字根;
[0089]如,關(guān)鍵詞“明天”的第一字根序列為“日、月、一、大”,將“日”取出來(lái)作為查找字根。
[0090]步驟S1033,判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根;若是,則進(jìn)入步驟S1034,若否,則進(jìn)入步驟S1038 ;
[0091]具體的,先判斷查找字根對(duì)應(yīng)的五筆序號(hào),如“日”對(duì)應(yīng)的五筆序號(hào)為豎,則判斷查找節(jié)點(diǎn)中子節(jié)點(diǎn)鏈表中是否包含“豎”的子節(jié)點(diǎn),如包含,則進(jìn)一步判斷該子節(jié)點(diǎn)的字根表中是否包含字根“日”。
[0092]優(yōu)選地,預(yù)設(shè)索引樹(shù)的最大層數(shù)為M,則步驟S1033進(jìn)一步包括:
[0093]判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ;
[0094]若是,則將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;若否,則判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根。
[0095]為了降低字根序列較長(zhǎng)的關(guān)鍵詞的搜索復(fù)雜度,一種優(yōu)選的方式是,建立字根序列的前序部分的索引樹(shù)作為全部關(guān)鍵詞的索引樹(shù)。如,關(guān)鍵詞為“ABCDEFGH”,可以只對(duì)“ABCDE”建立索引樹(shù),并在最后一個(gè)節(jié)點(diǎn)內(nèi)保存關(guān)鍵詞“ABCDEFGH”及其對(duì)應(yīng)的索引信息。
[0096]步驟S1034,將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0097]將查找字根在索引樹(shù)中找到的節(jié)點(diǎn)設(shè)為新的查找節(jié)點(diǎn)。
[0098]步驟S1035,判斷第一字根序列是否為空,若不為空,進(jìn)入步驟S1036,若為空,進(jìn)入步驟S1037 ;
[0099]步驟S1036,從第一字根序列中取出下一個(gè)字根作為查找字根,返回步驟S1033 ;
[0100]如,當(dāng)字根“日”在索引樹(shù)中找到后,獲取下一個(gè)字根“月”作為查找字根。
[0101]步驟S1037,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0102]當(dāng)?shù)谝蛔指蛄兄兴凶指荚谒饕龢?shù)中找到后,將最后查找到的節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn)。
[0103]步驟S1038,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑。
[0104]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0105]如圖6所示,本發(fā)明實(shí)施例提供的一種根據(jù)字根序列構(gòu)建索引樹(shù)的方法流程示意圖,包括:
[0106]步驟S1041,獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn);
[0107]參見(jiàn)圖3,關(guān)鍵詞“明天”在索引樹(shù)中查找到的最后匹配節(jié)點(diǎn)為n6。
[0108]步驟S1042,將尚未匹配成功的字根序列設(shè)為第二字根序列;
[0109]參見(jiàn)圖3,尚未匹配成功的字根序列為“一、大”。
[0110]步驟S1043,從第二字根序列中取出第一個(gè)字根作為新增字根;
[0111]參見(jiàn)圖3,從第二字根序列“一、大”中取出第一個(gè)字根“一”作為新增字根。
[0112]步驟S1044,判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào);若是,則進(jìn)入步驟S1045,若否,則進(jìn)入步驟S1046 ;
[0113]新增字根“一”的五筆序號(hào)為“橫”,判斷最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在“橫”的第二子節(jié)點(diǎn)。
[0114]優(yōu)選地,預(yù)設(shè)索引樹(shù)的最大層數(shù)為M,則步驟S1044進(jìn)一步包括:
[0115]判斷所述最后匹配節(jié)點(diǎn)所在層數(shù)是否等于M ;
[0116]若是,則將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后匹配節(jié)點(diǎn)中;若否,則判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào)。
[0117]步驟S1045,將所述新增字根添加到所述第二子節(jié)點(diǎn)的字根表中,將所述第二子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn);
[0118]如果存在“橫”的第二子節(jié)點(diǎn),直接將“一”添加到該子節(jié)點(diǎn)的字根表中。
[0119]步驟S1046,在所述最后匹配節(jié)點(diǎn)下創(chuàng)建第三子節(jié)點(diǎn),所述第三子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)的五筆序號(hào),并將所述新增字根添加到所述第三子節(jié)點(diǎn)的字根表中,將所述第三子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn);
[0120]如果不存在“橫”的第二子節(jié)點(diǎn),在最后匹配節(jié)點(diǎn)下創(chuàng)建一個(gè)新節(jié)點(diǎn),將新節(jié)點(diǎn)的五筆序號(hào)設(shè)為“橫”,并將“一”添加到該子節(jié)點(diǎn)的字根表中。
[0121]步驟S1047,判斷第二字根序列是否為空;若不為空,則進(jìn)入步驟S1048,若為空,則進(jìn)入步驟S1049 ;
[0122]步驟S1048,從第二字根序列中取出下一個(gè)字根作為新增字根,返回步驟S1044 ;
[0123]步驟S1049,將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
[0124]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0125]如圖7所示,本發(fā)明提供的一種構(gòu)建索引樹(shù)的裝置的實(shí)施例一的結(jié)構(gòu)圖,包括:
[0126]關(guān)鍵詞建立模塊11,用于建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0127]具體的,在構(gòu)建某個(gè)專業(yè)領(lǐng)域的垂直搜索引擎時(shí),需要從網(wǎng)絡(luò)中采集元數(shù)據(jù),并對(duì)元數(shù)據(jù)進(jìn)行分析,獲取元數(shù)據(jù)中的原始關(guān)鍵詞。為了實(shí)現(xiàn)模糊搜索,可對(duì)原始關(guān)鍵詞進(jìn)行擴(kuò)展和拆分,生成一個(gè)關(guān)鍵詞集合,在該關(guān)鍵詞集合中的每個(gè)關(guān)鍵詞都是原始關(guān)鍵詞的近似詞,每個(gè)關(guān)鍵詞的索引信息都與原始關(guān)鍵詞的索引信息相同。最后,針對(duì)關(guān)鍵詞集合中的每個(gè)關(guān)鍵詞分別建立索引樹(shù)。
[0128]如采集視頻領(lǐng)域的元數(shù)據(jù),該元數(shù)據(jù)包括視頻名稱、類型、主演、導(dǎo)演等數(shù)據(jù)。通過(guò)元數(shù)據(jù)進(jìn)行解析,可以將一個(gè)視頻的具體信息分析出來(lái),如將電影名稱為《ABCD》作為原始關(guān)鍵詞,對(duì)其進(jìn)行擴(kuò)展,則可能擴(kuò)展成《AB》、《⑶》、《AB⑶》、((ABC))等其中一個(gè)或多個(gè)。
[0129]索引信息可以是關(guān)鍵詞對(duì)應(yīng)的URL地址、標(biāo)識(shí)、名稱或序列號(hào)的哈希值。
[0130]第一拆分模塊12,用于將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列;[0131]五筆字根是五筆字型輸入法的基本單元,現(xiàn)有的五筆字根版本有86版和98版本。例如,關(guān)鍵詞為“明天”,其可拆分成“日、月、一、大”的字根序列。
[0132]第一查找判斷模塊13,用于根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0133]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。由于現(xiàn)有的五筆字根至少可以分成起筆為橫豎撇捺(或點(diǎn))折的五種不同的類型,優(yōu)選地,N為5的整數(shù)倍。
[0134]一種可選的實(shí)施例是,該索引樹(shù)為五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折的字根。
[0135]另一種可選的實(shí)施例是,該索引樹(shù)為二十五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折對(duì)應(yīng)的25個(gè)區(qū)的字根。25區(qū)的分類參見(jiàn)86版或98版
五筆字根表。
[0136]需要說(shuō)明的是,本發(fā)明不限于上述兩種構(gòu)造索引樹(shù)的方式,本領(lǐng)域技術(shù)人員可以根據(jù)該原理將五筆字根按照其他的方式進(jìn)行分類,再根據(jù)分類的結(jié)果建立對(duì)應(yīng)的索引樹(shù)即可。
[0137]具體的,索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
[0138]第一索引創(chuàng)建模塊14,用于當(dāng)?shù)谝徊檎遗袛嗄K13判斷為否時(shí),獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索弓I樹(shù)的最后一個(gè)節(jié)點(diǎn)中。
[0139]在圖3中查找關(guān)鍵詞“明天”的字根序列“日、月、一、大”對(duì)應(yīng)的路徑時(shí),未找到與字根序列匹配的路徑,獲取其在該索引樹(shù)中的最后匹配節(jié)點(diǎn)n6,在n6節(jié)點(diǎn)下為尚未匹配成功的字根序列“一、大”創(chuàng)建子索引樹(shù),建好的索引樹(shù)如圖2所示。
[0140]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0141]如圖8所示,本發(fā)明提供的一種構(gòu)建索引樹(shù)的裝置的實(shí)施例二的結(jié)構(gòu)圖,包括:
[0142]關(guān)鍵詞建立模塊11,用于建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0143]第一拆分模塊12,用于將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列;
[0144]第一查找判斷模塊13,用于根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;[0145]第一索引創(chuàng)建模塊14,用于當(dāng)?shù)谝徊檎遗袛嗄K13判斷為否時(shí),獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索弓I樹(shù)的最后一個(gè)節(jié)占中.[0146]當(dāng)?shù)谝徊檎遗袛嗄K13判斷為是時(shí),該裝置還包括第二索引創(chuàng)建模塊15,第二索引創(chuàng)建模塊15包括:
[0147]第二節(jié)點(diǎn)獲取單元151,用于獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn);
[0148]參見(jiàn)圖2,關(guān)鍵詞“明天”在索引樹(shù)中的最后匹配節(jié)點(diǎn)為五筆序號(hào)為“橫”,字根表包含“大”的節(jié)點(diǎn)。
[0149]索引判斷單元152,用于判斷所述最后匹配節(jié)點(diǎn)中是否存儲(chǔ)有所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息;
[0150]關(guān)鍵詞在索引樹(shù)中最后匹配的節(jié)點(diǎn)中可能包括多個(gè)詞語(yǔ),例如:信息、令牌、住處、停牌等等。先判斷該最后匹配節(jié)點(diǎn)是否存儲(chǔ)有該關(guān)鍵詞,然后再判斷是否存儲(chǔ)有該關(guān)鍵詞對(duì)應(yīng)的索引信息。同樣的關(guān)鍵詞可對(duì)應(yīng)不同的索引信息。
[0151]第二索引存儲(chǔ)單元153,用于當(dāng)索引判斷單元152判斷為否時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
[0152]關(guān)鍵詞建立模塊11,第一拆分模塊12,第一查找判斷模塊13,第一索引創(chuàng)建模塊14同圖7中實(shí)施例一,在此不再贅述。
[0153]參見(jiàn)圖9,本發(fā)明實(shí)施例提供的第一查找判斷模塊的結(jié)構(gòu)圖,包括:
[0154]第一查找設(shè)置單元131,用于將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0155]第一查找獲取單兀132,用于從第一字根序列中取出第一個(gè)字根作為查找字根;
[0156]第一查找判斷單元133,用于判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根;
[0157]第一查找處理單元134,用于當(dāng)?shù)谝徊檎遗袛鄦卧?33判斷為是時(shí),將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第一字根序列是否為空,若不為空,從第一字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0158]第二查找處理單元135,用于當(dāng)?shù)谝徊檎遗袛鄦卧?33判斷為否時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑。
[0159]參見(jiàn)圖10,本發(fā)明實(shí)施例提供的第一索引創(chuàng)建模塊的結(jié)構(gòu)圖,包括:
[0160]第一節(jié)點(diǎn)獲取單元141,用于獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn);
[0161]創(chuàng)建設(shè)置單元142,用于將尚未匹配成功的字根序列設(shè)為第二字根序列;
[0162]字根獲取單元143,用于從第二字根序列中取出第一個(gè)字根作為新增字根;
[0163]字根判斷單元144,用于判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào);
[0164]第一字根添加單元145,用于當(dāng)字根判斷單元144判斷為是時(shí),將所述新增字根添加到所述第二子節(jié)點(diǎn)的字根表中,將所述第二子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn);
[0165]第二字根添加單元146,用于當(dāng)字根判斷單元144判斷為否時(shí),在所述最后匹配節(jié)點(diǎn)下創(chuàng)建第三子節(jié)點(diǎn),所述第三子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)的五筆序號(hào),并將所述新增字根添加到所述第三子節(jié)點(diǎn)的字根表中,將所述第三子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn);
[0166]循環(huán)判斷單元147,用于判斷第二字根序列是否為空,若不為空,則從第二字根序列中取出下一個(gè)字根作為新增字根;
[0167]第一索引存儲(chǔ)單元148,用于根據(jù)循環(huán)判斷單元147判斷為是時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
[0168]優(yōu)選地,本發(fā)明實(shí)施例提供的裝置還包括:
[0169]預(yù)設(shè)值模塊,用于設(shè)置索引樹(shù)的最大層數(shù)為M ;
[0170]所述第一查找判斷模塊13還包括:
[0171]第一層數(shù)判斷單元,用于判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ;
[0172]第三查找處理單元,用于當(dāng)所述第一層數(shù)判斷單元判斷為是時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑;
[0173]所述第一查找判斷單元,還用于當(dāng)所述第一層數(shù)判斷單元判斷為否時(shí),判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根;
[0174]所述第一索引創(chuàng)建模塊14還包括:
[0175]第二層數(shù)判斷單元,用于判斷所述最后匹配節(jié)點(diǎn)所在層數(shù)是否等于M ;
[0176]所述第一索引存儲(chǔ)單元,還用于當(dāng)所述第二層數(shù)判斷單元判斷為是時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中;
[0177]所述字根判斷單元,用于當(dāng)所述第二層數(shù)判斷單元判斷為否時(shí),判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào)。
[0178]本發(fā)明提供的實(shí)施例,通過(guò)將包含漢字的關(guān)鍵詞按照五筆字根的方式拆分成字根序列,再按照該字根序列依次構(gòu)建索引樹(shù)的節(jié)點(diǎn),使得構(gòu)建后的索引樹(shù)包含一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上每個(gè)節(jié)點(diǎn)包含有與該字根序列一一對(duì)應(yīng)的字根,最后,將該關(guān)鍵詞和關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后一個(gè)節(jié)點(diǎn)中。采用本發(fā)明實(shí)施例,提供一種全新的漢字索引樹(shù)的構(gòu)建方法,具有構(gòu)建簡(jiǎn)單、哈希沖突小的優(yōu)點(diǎn)。
[0179]如圖11所示,本發(fā)明實(shí)施例提供的一種漢語(yǔ)詞匯搜索的方法的流程圖,包括:
[0180]步驟S201,獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0181]用戶在搜索窗口輸入要檢索的關(guān)鍵詞,進(jìn)一步地,搜索系統(tǒng)可對(duì)關(guān)鍵詞進(jìn)行拆分、模糊匹配等得到最終用來(lái)來(lái)搜索樹(shù)中檢索的關(guān)鍵詞或關(guān)鍵詞組合。
[0182]步驟S202,將所述關(guān)鍵詞按照五筆字根拆分成第三字根序列;
[0183]步驟S203,根據(jù)第三字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑,若存在,進(jìn)入步驟S204 ;
[0184]步驟S204,獲取第三字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),并獲取所述最后匹配節(jié)點(diǎn)內(nèi)存儲(chǔ)的所述關(guān)鍵詞對(duì)應(yīng)的索引信息;
[0185]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。由于現(xiàn)有的五筆字根至少可以分成起筆為橫豎撇捺(或點(diǎn))折的五種不同的類型,優(yōu)選地,N為5的整數(shù)倍。
[0186]一種可選的實(shí)施例是,該索引樹(shù)為五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折的字根。
[0187]另一種可選的實(shí)施例是,該索引樹(shù)為二十五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折對(duì)應(yīng)的25個(gè)區(qū)的字根。25區(qū)的分類參見(jiàn)86版或98版
五筆字根表。
[0188]需要說(shuō)明的是,本發(fā)明不限于上述兩種構(gòu)造索引樹(shù)的方式,本領(lǐng)域技術(shù)人員可以根據(jù)該原理將五筆字根按照其他的方式進(jìn)行分類,再根據(jù)分類的結(jié)果建立對(duì)應(yīng)的索引樹(shù)即可。
[0189]具體的,索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
[0190]參見(jiàn)圖12,本發(fā)明實(shí)施例提供一種判斷索引樹(shù)中是否存在字根序列對(duì)應(yīng)的路徑的方法流程圖,包括:
[0191]步驟S2031,將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0192]步驟S2032,從第三字根序列中取出第一個(gè)字根作為查找字根;
[0193]步驟S2033,判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根,若判斷為是,進(jìn)入步驟S20234,否則,進(jìn)入步驟S2035 ;
[0194]步驟S2034,將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0195]步驟S2036,判斷第三字根序列是否為空,若不為空,進(jìn)入步驟S2027,否則,進(jìn)入步驟S2038 ;
[0196]步驟S2037,從第三字根序列中取出下一個(gè)字根作為查找字根,返回步驟S2023 ;
[0197]步驟S2038,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑。
[0198]步驟S2035,判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑。
[0199]優(yōu)選地,若所述索引樹(shù)的最大層數(shù)為M,則步驟S2033進(jìn)一步包括:
[0200]判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ;
[0201]若是,則將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0202]若否,則判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根。
[0203]本發(fā)明提供的實(shí)施例,只需將關(guān)鍵詞按照五筆字根的方式拆分成字根序列,根據(jù)該字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上經(jīng)過(guò)的字根可組成該字根序列,如果存在,則獲取最后匹配節(jié)點(diǎn)內(nèi)的索引信息。采用本發(fā)明實(shí)施例,提供一種全新的適應(yīng)于漢字的垂直搜索的方法,這種搜索方法的搜索復(fù)雜度僅取決于關(guān)鍵詞對(duì)應(yīng)的字根序列的長(zhǎng)度,與索引樹(shù)本身的大小無(wú)關(guān),具有搜索快、哈希沖突小的優(yōu)點(diǎn)。
[0204]如圖13所示,本發(fā)明實(shí)施例提供的一種漢語(yǔ)詞匯搜索的裝置的結(jié)構(gòu)圖,包括:
[0205]關(guān)鍵詞獲取模塊21,用于獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字;
[0206]用戶在搜索窗口輸入要檢索的關(guān)鍵詞,進(jìn)一步地,搜索系統(tǒng)可對(duì)關(guān)鍵詞進(jìn)行拆分、模糊匹配等得到最終用來(lái)來(lái)搜索樹(shù)中檢索的關(guān)鍵詞或關(guān)鍵詞組合。
[0207]第二拆分模塊22,用于將關(guān)鍵詞按照五筆字根拆分成第三字根序列;
[0208]第二查找判斷模塊23,用于根據(jù)所述第三字根序列在索引樹(shù)中查找,判斷所述索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0209]信息獲取模塊24,用于當(dāng)?shù)诙檎遗袛嗄K23判斷為是時(shí),獲取所述第三字根序列在所述索引樹(shù)中的最后一個(gè)匹配節(jié)點(diǎn),并獲取所述節(jié)點(diǎn)內(nèi)所述關(guān)鍵詞對(duì)應(yīng)的索引信息;
[0210]所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。由于現(xiàn)有的五筆字根至少可以分成起筆為橫豎撇捺(或點(diǎn))折的五種不同的類型,優(yōu)選地,N為5的整數(shù)倍。
[0211]一種可選的實(shí)施例是,該索引樹(shù)為五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折的字根。
[0212]另一種可選的實(shí)施例是,該索引樹(shù)為二十五叉索引樹(shù),索引樹(shù)中每個(gè)子節(jié)點(diǎn)分別包含起筆為橫、豎、撇、捺(或點(diǎn))、折對(duì)應(yīng)的25個(gè)區(qū)的字根。25區(qū)的分類參見(jiàn)86版或98版
五筆字根表。
[0213]需要說(shuō)明的是,本發(fā)明不限于上述兩種構(gòu)造索引樹(shù)的方式,本領(lǐng)域技術(shù)人員可以根據(jù)該原理將五筆字根按照其他的方式進(jìn)行分類,再根據(jù)分類的結(jié)果建立對(duì)應(yīng)的索引樹(shù)即可。
[0214]具體的,索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
[0215]參見(jiàn)圖14,第二查找判斷模塊23包括:
[0216]第二查找設(shè)置單231,用于將所述索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn);
[0217]第二查找獲取單元232,用于從第三字根序列中取出第一個(gè)字根作為查找字根;
[0218]第二查找判斷單元233,用于判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根;
[0219]第四查找處理單元234,用于當(dāng)?shù)诙檎遗袛鄦卧?33判斷為是時(shí),將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第一字根序列是否為空,若不為空,從第一字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0220]第五查找處理單元235,用于當(dāng)?shù)诙檎遗袛鄦卧?33判斷為否時(shí),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑。
[0221]優(yōu)選地,若所述索引樹(shù)的最大層數(shù)為M,則第二查找判斷模塊23還包括:
[0222]第三層數(shù)判斷單元,用于判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ;[0223]第六查找處理單元,用于當(dāng)所述第三層數(shù)判斷單元判斷為是時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;
[0224]所述第二查找判斷單元,還用于當(dāng)所述第三層數(shù)判斷單元判斷為否時(shí),判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根。
[0225]本發(fā)明提供的實(shí)施例,只需將關(guān)鍵詞按照五筆字根的方式拆分成字根序列,根據(jù)該字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在一條從根節(jié)點(diǎn)出發(fā)的路徑,該路徑上經(jīng)過(guò)的字根可組成該字根序列,如果存在,則獲取最后匹配節(jié)點(diǎn)內(nèi)的索引信息。采用本發(fā)明實(shí)施例,提供一種全新的適應(yīng)于漢字的垂直搜索的方法,這種搜索方法的搜索復(fù)雜度僅取決于關(guān)鍵詞對(duì)應(yīng)的字根序列的長(zhǎng)度,與索引樹(shù)本身的大小無(wú)關(guān),具有搜索快、哈希沖突小的優(yōu)點(diǎn)。
[0226]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種構(gòu)建索引樹(shù)的方法,其特征在于, 建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字; 將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列; 根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 若不存在,則獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中; 所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
2.如權(quán)利要求1所述的方法,其特征在于,當(dāng)判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑,則所述方法還包括: 獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn); 判斷所述最后匹配節(jié)點(diǎn)中是否存儲(chǔ)有所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息; 若否,則將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
3.如權(quán)利要求1或2所述的方法,其特征在于,所述索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根 在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
4.如權(quán)利要求3所述的方法,其特征在于,所述根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑包括: 將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn); 從第一字根序列中取出第一個(gè)字根作為查找字根; 判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根; 若是,將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第一字根序列是否為空,若不為空,從第一字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 若否,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑。
5.如權(quán)利要求4所述的方法,其特征在于,所述獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中包括: 獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn); 將尚未匹配成功的字根序列設(shè)為第二字根序列; 從第二字根序列中取出第一個(gè)字根作為新增字根; 判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào); 若是,將所述新增字根添加到所述第二子節(jié)點(diǎn)的字根表中,將所述第二子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn); 若否,在所述最后匹配節(jié)點(diǎn)下創(chuàng)建第三子節(jié)點(diǎn),所述第三子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)的五筆序號(hào),并將所述新增字根添加到所述第三子節(jié)點(diǎn)的字根表中,將所述第三子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn); 判斷第二字根序列是否為空; 若不為空,則從第二字根序列中取出下一個(gè)字根作為新增字根,以此類推; 若為空,則將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
6.如權(quán)利要求5所述的方法,其特征在于,所述方法還包括: 預(yù)設(shè)索引樹(shù)的最大層數(shù)為M ; 所述判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根的步驟進(jìn)一步包括: 判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ; 若是,則將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 若否,則判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根;` 所述判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào)的步驟進(jìn)一步包括: 判斷所述最后匹配節(jié)點(diǎn)所在層數(shù)是否等于M ; 若是,則將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到最后匹配節(jié)點(diǎn)中; 若否,則判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào)。
7.—種構(gòu)建索引樹(shù)的裝置,其特征在于,包括: 關(guān)鍵詞建立模塊,用于建立關(guān)鍵詞及所述關(guān)鍵詞對(duì)應(yīng)的索引信息,所述關(guān)鍵詞包含至少一個(gè)漢字; 第一拆分模塊,用于將所述關(guān)鍵詞按照五筆字根拆分成第一字根序列; 第一查找判斷模塊,用于根據(jù)第一字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 第一索引創(chuàng)建模塊,用于當(dāng)所述第一查找判斷模塊判斷為否時(shí),獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),在所述最后匹配節(jié)點(diǎn)下為尚未匹配成功的字根序列創(chuàng)建對(duì)應(yīng)的子索引樹(shù),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到子索引樹(shù)的最后一個(gè)節(jié)點(diǎn)中; 所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
8.如權(quán)利要求7所述的裝置,其特征在于,當(dāng)所述第一查找判斷模塊判斷為是時(shí),所述裝置還包括第二索引創(chuàng)建模塊,所述第二索引創(chuàng)建模塊包括: 第二節(jié)點(diǎn)獲取單元,用于獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn); 索引判斷單元,用于判斷所述最后匹配節(jié)點(diǎn)中是否存儲(chǔ)有所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息; 第二索引存儲(chǔ)單元,用于當(dāng)所述索引判斷單元判斷為否時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
9.如權(quán)利要求7或8所述的裝置,其特征在于,所述索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
10.如權(quán)利要求9所述的裝置,其特征在于,所述第一查找判斷模塊包括: 第一查找設(shè)置單元,用于將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn); 第一查找獲取單兀,用于從第一字根序列中取出第一個(gè)字根作為查找字根; 第一查找判斷單元,用于判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根; 第一查找處理單元,用于當(dāng)所述第一查找判斷單元判斷為是時(shí),將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第一字根序列是否為空,若不為空,從第一字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 第二查找處理單元,用于當(dāng)所述第一查找判斷單元判斷為否時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑。
11.如權(quán)利要求9所述的裝置,其特征在于,所述第一索引創(chuàng)建模塊包括: 第一節(jié)點(diǎn)獲取單元,用于獲取第一字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn); 創(chuàng)建設(shè)置單元,用于將尚未匹配成功的字根序列設(shè)為第二字根序列; 字根獲取單元,用于從第二字根序列中取出第一個(gè)字根作為新增字根; 字根判斷單元,用于判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào); 第一字根添加單元,用于當(dāng)所述字根判斷單元判斷為是時(shí),將所述新增字根添加到所述第二子節(jié)點(diǎn)的字根表中,將所述第二子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn); 第二字根添加單元,用于當(dāng)所述字根判斷單元判斷為否時(shí),在所述最后匹配節(jié)點(diǎn)下創(chuàng)建第三子節(jié)點(diǎn),所述第三子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)的五筆序號(hào),并將所述新增字根添加到所述第三子節(jié)點(diǎn)的字根表中,將所述第三子節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn); 循環(huán)判斷單元,用于判斷第二字根序列是否為空,若不為空,則從第二字根序列中取出下一個(gè)字根作為新增字根; 第一索引存儲(chǔ)單元,用于根據(jù)所述循環(huán)判斷單元判斷為是時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中。
12.如權(quán)利要求11所述的裝置,其特征在于,所述裝置還包括: 預(yù)設(shè)值模塊,用于設(shè)置索引樹(shù)的最大層數(shù)為M ;所述第一查找判斷模塊還包括: 第一層數(shù)判斷單元,用于判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ; 第三查找處理單元,用于當(dāng)所述第一層數(shù)判斷單元判斷為是時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第一字根序列相匹配的路徑; 所述第一查找判斷單元,還用于當(dāng)所述第一層數(shù)判斷單元判斷為否時(shí),判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根; 所述第一索引創(chuàng)建模塊還包括: 第二層數(shù)判斷單元,用于判斷所述最后匹配節(jié)點(diǎn)所在層數(shù)是否等于M ; 所述第一索引存儲(chǔ)單元,還用于當(dāng)所述第二層數(shù)判斷單元判斷為是時(shí),將所述關(guān)鍵詞與所述關(guān)鍵詞對(duì)應(yīng)的索引信息存儲(chǔ)到所述最后匹配節(jié)點(diǎn)中; 所述字根判斷單元,用于當(dāng)所述第二層數(shù)判斷單元判斷為否時(shí),判斷所述最后匹配節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否第二子節(jié)點(diǎn),所述第二子節(jié)點(diǎn)的五筆序號(hào)為所述新增字根對(duì)應(yīng)五筆序號(hào)。
13.—種漢語(yǔ)詞匯搜 索的方法,其特征在于,所述方法包括: 獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字; 將所述關(guān)鍵詞按照五筆字根拆分成第三字根序列; 根據(jù)第三字根序列在預(yù)先創(chuàng)建的索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑; 若存在,則獲取第三字根序列在索引樹(shù)中的最后匹配節(jié)點(diǎn),并獲取所述最后匹配節(jié)點(diǎn)內(nèi)存儲(chǔ)的所述關(guān)鍵詞對(duì)應(yīng)的索引信息; 所述索引樹(shù)為N叉樹(shù),除根節(jié)點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
14.如權(quán)利要求13所述的方法,其特征在于,所述索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
15.如權(quán)利要求14所述的方法,其特征在于,所述判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑的步驟包括: 將索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn); 從第三字根序列中取出第一個(gè)字根作為查找字根; 判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根; 若是,將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第三字根序列是否為空,若不為空,從第三字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑; 若否,判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑。
16.如權(quán)利要求15所述的方法,其特征在于,若所述索引樹(shù)的最大層數(shù)為M,則 所述判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根的步驟進(jìn)一步包括: 判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ; 若是,則將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑; 若否,則判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根。
17.—種漢語(yǔ)詞匯搜索的裝置,其特征在于,所述裝置包括: 關(guān)鍵詞獲取模塊,用于獲取關(guān)鍵詞,所述關(guān)鍵詞包含至少一個(gè)漢字; 第二拆分模塊,用于將所述關(guān)鍵詞按照五筆字根拆分成第三字根序列; 第二查找判斷模塊,用于根據(jù)所述第三字根序列在索引樹(shù)中查找,判斷索引樹(shù)中是否存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑; 信息獲取模塊,用于當(dāng)所述第二查找判斷模塊判斷為是時(shí),獲取所述第三字根序列在所述索引樹(shù)中的最后一個(gè)匹配節(jié)點(diǎn),并獲取所述節(jié)點(diǎn)內(nèi)所述關(guān)鍵詞對(duì)應(yīng)的索引信息; 所述索引樹(shù)為N叉樹(shù),除根節(jié) 點(diǎn)外的每個(gè)節(jié)點(diǎn)包含一字根集,所述字根集內(nèi)的字根具有相同的五筆序號(hào)。
18.如權(quán)利要求17所述的方法,其特征在于,所述索引樹(shù)的節(jié)點(diǎn)包含五筆序號(hào)、字根表以及子節(jié)點(diǎn)鏈接表,其中,五筆序號(hào)為字根表中包含的字根對(duì)應(yīng)的序號(hào),字根表為字根序號(hào)和所述字根序號(hào)對(duì)應(yīng)的字根在當(dāng)前節(jié)點(diǎn)組成的關(guān)鍵詞對(duì)應(yīng)的索引表的映射表,子節(jié)點(diǎn)鏈接表為子節(jié)點(diǎn)的五筆序號(hào)和所述子節(jié)點(diǎn)的五筆序號(hào)對(duì)應(yīng)的子節(jié)點(diǎn)鏈接地址的映射表。
19.如權(quán)利要求18所述的裝置,其特征在于,所述第二查找判斷模塊包括: 第二查找設(shè)置單元,用于將所述索引樹(shù)的根節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn); 第二查找獲取單元,用于從第三字根序列中取出第一個(gè)字根作為查找字根; 第二查找判斷單元,用于判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根; 第四查找處理單元,用于當(dāng)所述第二查找判斷單元判斷為是時(shí),將所述第一子節(jié)點(diǎn)設(shè)為查找節(jié)點(diǎn),判斷第一字根序列是否為空,若不為空,從第一字根序列中取出下一個(gè)字根作為查找字根,以此類推;若為空,將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑; 第五查找處理單元,用于當(dāng)所述第二查找判斷單元判斷為否時(shí),判斷索引樹(shù)中不存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑。
20.如權(quán)利要求19所述的裝置,其特征在于,若所述索引樹(shù)的最大層數(shù)為M,則 所述第二查找判斷模塊還包括: 第三層數(shù)判斷單元,用于判斷所述查找節(jié)點(diǎn)所在層數(shù)是否等于M ; 第六查找處理單元,用于當(dāng)所述第三層數(shù)判斷單元判斷為是時(shí),將所述查找節(jié)點(diǎn)設(shè)為最后匹配節(jié)點(diǎn),判斷索引樹(shù)中存在從根節(jié)點(diǎn)出發(fā)且經(jīng)過(guò)的節(jié)點(diǎn)所組成的字根序列與第三字根序列相匹配的路徑;所述第二查找判斷單元,還用于當(dāng)所述第三層數(shù)判斷單元判斷為否時(shí),判斷所述查找節(jié)點(diǎn)的子節(jié)點(diǎn)鏈表中是否存在第一子節(jié)點(diǎn),所述第一子節(jié)點(diǎn)的字根表中包含所述查找字根。`
【文檔編號(hào)】G06F17/30GK103514287SQ201310459945
【公開(kāi)日】2014年1月15日 申請(qǐng)日期:2013年9月29日 優(yōu)先權(quán)日:2013年9月29日
【發(fā)明者】李勇 申請(qǐng)人:深圳市龍視傳媒有限公司