專利名稱:完美雙數(shù)組trie樹詞典管理與檢索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及自然語言處理領(lǐng)域和信息檢索領(lǐng)域,特別是一種完美雙數(shù)組TRIE樹詞典管理與檢索方法。
背景技術(shù):
對(duì)于大量數(shù)據(jù)的存儲(chǔ)和搜索,目前通常都采用索引結(jié)構(gòu)來實(shí)現(xiàn)。一般常用的索引結(jié)構(gòu)包括線性索引表、倒排表、散列(Hash)表以及各種搜索樹。
線性索引是一種靜態(tài)的索引結(jié)構(gòu),不利于更新,每當(dāng)做依次更新時(shí)需要改變索引表中各個(gè)索引項(xiàng)的位置。倒排表也是靜態(tài)索引,它與線性索引表一樣,搜索其中數(shù)據(jù)的時(shí)候都只能順序搜索或者折半搜索。
散列(Hash)方法則是在表項(xiàng)的存儲(chǔ)位置與它的關(guān)鍵碼之間建立一個(gè)確定的對(duì)應(yīng)函數(shù)關(guān)系Hash(),使每個(gè)關(guān)鍵碼與結(jié)構(gòu)中的一個(gè)存儲(chǔ)位置相對(duì)應(yīng)。搜索時(shí)只需要對(duì)表項(xiàng)的關(guān)鍵碼進(jìn)行函數(shù)計(jì)算,求得的函數(shù)值即是表項(xiàng)的存儲(chǔ)位置,避免了多次關(guān)鍵碼比較,因此搜索速度比較快。由于有可能經(jīng)過散列函數(shù)的計(jì)算,把不同的關(guān)鍵碼映射到同一個(gè)散列地址上,也就是產(chǎn)生沖突(一般較常用的解決沖突的辦法是利用Hash桶,將地址相同的關(guān)鍵碼放入一個(gè)桶內(nèi),然后再在桶內(nèi)進(jìn)行查找)。所以對(duì)于散列方法來說,散列函數(shù)的設(shè)計(jì)很關(guān)鍵,應(yīng)該選擇一個(gè)計(jì)算簡(jiǎn)單并且地址分布比較均勻的散列函數(shù),盡量減少?zèng)_突。Douglas C.Schmidt提出過一種完美Hash函數(shù)(Perfect Hash Function)生成方法,該方法生成的Hash函數(shù)能保證得到的Hash值沒有沖突,也就是說每一個(gè)Hash值都是唯一的。但是這種方法目前來說還有缺陷,實(shí)驗(yàn)顯示,關(guān)鍵詞總數(shù)為300時(shí)生成的Hash表大小為1042,還只是關(guān)鍵詞總數(shù)的3倍多一點(diǎn);當(dāng)關(guān)鍵詞增長(zhǎng)到685時(shí),Hash表大小會(huì)增長(zhǎng)到3833,是關(guān)鍵詞總數(shù)的5倍還不止。由此可知,當(dāng)數(shù)據(jù)量較大時(shí)用該方法生成的Hash表會(huì)很大,空間浪費(fèi)會(huì)很嚴(yán)重。并且數(shù)據(jù)量較大時(shí),生成一個(gè)完美Hash函數(shù)極費(fèi)時(shí)間。
搜索樹包括B樹、B+樹、Trie樹等以及它們的各種變形。不同的樹根據(jù)自身的特點(diǎn)應(yīng)用于不同的數(shù)據(jù)環(huán)境中。索引樹的數(shù)據(jù)結(jié)構(gòu)相對(duì)來說比其他索引結(jié)構(gòu)要復(fù)雜,但是好的搜索樹方法用在合適的環(huán)境下可以具有很高的查詢效率。
Trie樹的查詢效率就比較高,用Trie樹搜索一個(gè)關(guān)鍵碼的時(shí)間與關(guān)鍵碼自身及其長(zhǎng)度有關(guān),最快是O(1),即在樹的第一層即可判斷是否搜索到,最壞的情況是O(n),n為Trie樹的層數(shù)。由于很多時(shí)候Trie樹的大多數(shù)結(jié)點(diǎn)分支很少,因此Trie樹結(jié)構(gòu)空間浪費(fèi)比較多。而當(dāng)Trie樹結(jié)點(diǎn)分支數(shù)非常多時(shí),進(jìn)行折半查找又會(huì)增加更多的時(shí)間開銷。
對(duì)于一個(gè)詞典來說,最重要的功能就是查找,尤其是像自然語言處理這類應(yīng)用中,需要頻繁的在詞典中進(jìn)行查詢以獲取詞語信息。所以數(shù)據(jù)查找的效率對(duì)詞典方法來說是非常重要的。
目前用于組織詞典最常用的索引方法主要有兩種,一種是Trie索引樹,一種是散列(Hash)表結(jié)構(gòu)。
基于Trie索引樹的詞典機(jī)制一般是對(duì)詞的首字計(jì)算hash值,建立首字hash表,然后建立Trie索引樹。檢索時(shí)只需沿樹鏈進(jìn)行逐字匹配,不需預(yù)知待查詞的長(zhǎng)度,查找一個(gè)詞所需的時(shí)間只與該詞的長(zhǎng)度有關(guān)。但是由于單詞樹枝比較多,所以Trie索引樹的空間浪費(fèi)比較嚴(yán)重。有實(shí)驗(yàn)結(jié)果表明,Trie樹結(jié)構(gòu)的詞典占用空間要比基于Hash索引的詞典占用空間大上將近一倍。
基于Hash索引的詞典機(jī)制就是構(gòu)造一種Hash函數(shù)來計(jì)算詞語的Hash值,將Hash值相同的詞語放入一個(gè)桶內(nèi),檢索時(shí)先計(jì)算待查詞的Hash值,然后進(jìn)入相應(yīng)的Hash桶內(nèi)進(jìn)行二分查找。常用的有首字Hash和兩字Hash法。首字Hash是利用首字生成Hash值,將Hash值相同的詞放在同一個(gè)Hash桶中,然后在桶中進(jìn)行二分查找。兩字Hash則是在首字Hash基礎(chǔ)上的一種改進(jìn)。目前兩字Hash有兩種方法,一是對(duì)詞語的前兩個(gè)字依次順次建立Hash索引,構(gòu)成深度為2的Trie子樹,對(duì)剩余的字符串再進(jìn)入相應(yīng)的Hash桶內(nèi)進(jìn)行二分查找;二是根據(jù)前兩字內(nèi)碼計(jì)算Hash值,建立一級(jí)Hash索引表,然后進(jìn)入Hash值相同的表中進(jìn)行二分查找。采用Hash索引機(jī)制的詞典查找時(shí)間復(fù)雜度為O(log2N),N為Hash值相同的詞條數(shù)最大值。
發(fā)明內(nèi)容
本發(fā)明提出一種基于完美雙數(shù)組TRIE樹結(jié)構(gòu)的詞典管理和檢索方法。將Trie樹結(jié)構(gòu)轉(zhuǎn)換成兩個(gè)線性數(shù)組表示,并在構(gòu)造過程中提出了一種優(yōu)化策略,在處理Trie樹結(jié)點(diǎn)時(shí),對(duì)當(dāng)前活動(dòng)結(jié)點(diǎn)按分支結(jié)點(diǎn)數(shù)進(jìn)行排序,優(yōu)先處理分支結(jié)點(diǎn)數(shù)最多的結(jié)點(diǎn),以降低數(shù)組稀疏程度。同時(shí)提出一種自適應(yīng)編碼方案,以字節(jié)為編碼單位對(duì)字符進(jìn)行自動(dòng)編碼,使本發(fā)明不僅可以支持各種編碼體系,而且能進(jìn)一步提高空間利用率。基于完美雙數(shù)組TRIE樹結(jié)構(gòu)的詞典首先將詞典中的詞項(xiàng)用Trie樹表示,然后轉(zhuǎn)換成相應(yīng)的數(shù)組。對(duì)該詞典中詞項(xiàng)的檢索在數(shù)組的結(jié)構(gòu)上進(jìn)行。檢索一個(gè)長(zhǎng)度為n個(gè)字符的詞最多只需進(jìn)行n-1次整數(shù)相加即可獲得結(jié)果。檢索時(shí)間復(fù)雜度為O(n)。
本發(fā)明的目的是為了解決Trie樹結(jié)構(gòu)現(xiàn)有的缺點(diǎn),提供一種比現(xiàn)有詞典方法查詢效率更高,占用空間更少的詞典管理和檢索方法。
1.雙數(shù)組TRIE樹結(jié)構(gòu)本發(fā)明將Trie樹結(jié)構(gòu)簡(jiǎn)化成兩個(gè)線性數(shù)組,如圖1所示。
base數(shù)組和check數(shù)組中的元素是一一對(duì)應(yīng)的,base數(shù)組中的每一個(gè)元素相當(dāng)于Trie樹的一個(gè)節(jié)點(diǎn),其值做狀態(tài)轉(zhuǎn)移的基值,check數(shù)組中相應(yīng)位置的值相當(dāng)于校驗(yàn)值,用于檢查該狀態(tài)是否存在。對(duì)于從狀態(tài)s到狀態(tài)t的一個(gè)轉(zhuǎn)移,必須滿足如下兩個(gè)條件1.base[s]+c=t2.check[t]=s其中c是輸入變量。
令i為數(shù)組下標(biāo),base[i]和check[i]均為0時(shí)表示該位置為空,base[i]為負(fù)值時(shí)表示該狀態(tài)為一個(gè)可結(jié)束狀態(tài)。兩個(gè)數(shù)組的構(gòu)造方法如下假定有狀態(tài)AB1、AB2、AB3…ABn,狀態(tài)A在數(shù)組中下標(biāo)為i。對(duì)于正整數(shù)k,如果base[k+B1]=0,check[k+B1]=0,base[k+B2]=0,check[k+B2]=0,…,base[k+Bn]=0,check[k+Bn]=0,則A的base值base[i]=k。
也就是說,k只要能使A的直接子結(jié)點(diǎn)都能放入數(shù)組即可。base[i]值確定以后,狀態(tài)AB1、AB2、AB3…ABn在數(shù)組中的下標(biāo)隨即確定,分別為k+B1,k+B2,k+B3,...,k+Bn,且check[k+B1]=check[k+B2]=...=check[k+Bn]=i。
數(shù)組構(gòu)造完成之后,要查找一個(gè)關(guān)鍵碼Ab,只需判斷check[base[A]+b]是否等于A,如果是,則表示Ab在Trie樹中搜索到,否則,搜索返回失敗。
雙數(shù)組Trie樹(Double-Array Trie)方法有效的降低了Trie樹結(jié)構(gòu)的空間浪費(fèi),但是利用該方法生成的數(shù)組中仍然還會(huì)存在較大的數(shù)據(jù)稀疏。為了進(jìn)一步減少數(shù)組空間浪費(fèi),本發(fā)明對(duì)構(gòu)造數(shù)組的方法進(jìn)行了優(yōu)化,在構(gòu)造數(shù)組的時(shí)候加入一種排序策略,即每一次都先處理當(dāng)前分支結(jié)點(diǎn)最多的結(jié)點(diǎn)。
2.完美雙數(shù)組TRIE樹的優(yōu)化訪問策略考慮到在雙數(shù)組Trie樹方法中,每一個(gè)結(jié)點(diǎn)在數(shù)組中的位置,都是由其父親結(jié)點(diǎn)也就是上一狀態(tài)的base值決定。而一個(gè)結(jié)點(diǎn)其base值的確定取決于數(shù)組的當(dāng)前空閑位置以及該結(jié)點(diǎn)的直接子結(jié)點(diǎn)。一個(gè)結(jié)點(diǎn)的直接子結(jié)點(diǎn)越多,該結(jié)點(diǎn)在找base值時(shí)所遇到的沖突也就越多。因此優(yōu)先處理分支較多的結(jié)點(diǎn),有利于減少?zèng)_突,避免數(shù)組增長(zhǎng)過大,減少數(shù)據(jù)稀疏。
設(shè)一個(gè)詞表為“aa,aab,aad,bc,be,bed,cd”,則該詞表對(duì)應(yīng)的Trie樹如圖2。
采用優(yōu)化策略后的構(gòu)造方法如下1.讀入詞典文件,構(gòu)造Trie樹;2.初始化活動(dòng)結(jié)點(diǎn)列表,把第一層結(jié)點(diǎn)加入該列表。
3.如果活動(dòng)結(jié)點(diǎn)列表不為空,則在活動(dòng)結(jié)點(diǎn)列表中選取直接子結(jié)點(diǎn)數(shù)最多的結(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn)。否則方法結(jié)束,數(shù)組構(gòu)造完成。
4.訪問當(dāng)前結(jié)點(diǎn),決定其在base數(shù)組中的值,確定各直接子結(jié)點(diǎn)在兩個(gè)數(shù)組中的位置,令各直接子結(jié)點(diǎn)在check數(shù)組中的值為當(dāng)前結(jié)點(diǎn)的數(shù)組下標(biāo)。
5.將當(dāng)前結(jié)點(diǎn)的直接子結(jié)點(diǎn)加入活動(dòng)結(jié)點(diǎn)列表。重復(fù)步驟2。
構(gòu)造完后相應(yīng)的檢索方法如下1.令x等于首字符序列號(hào)。
2.讀入輸入變量c,c的序列號(hào)為y。
3.t=base[x]+yIf check[t]==x thenx=telse failendif4.若base[t]不為負(fù),重復(fù)步驟2。否則,t為一個(gè)可結(jié)束狀態(tài)。
檢索一個(gè)詞只需要進(jìn)行幾次簡(jiǎn)單的整數(shù)相加即可。檢索開銷只與檢索詞長(zhǎng)度有關(guān),方法時(shí)間復(fù)雜度為O(n),n為檢索詞的詞長(zhǎng)。
3.完美雙數(shù)組TRIE樹的自適應(yīng)字符編碼優(yōu)化可以看到,在將詞典構(gòu)造為雙數(shù)組Trie樹之前,必須確定字符在雙數(shù)組Trie樹結(jié)構(gòu)中的表示方式。TRIE樹以及雙數(shù)組TRIE樹中轉(zhuǎn)移狀態(tài)的輸入為字符,通常的做法是直接采用字符的值進(jìn)行檢索定位,比如直接采用ASCII碼,對(duì)于漢字計(jì)算其內(nèi)碼,最終作為狀態(tài)轉(zhuǎn)移的輸入值。由于當(dāng)前的文本編碼種類繁多,本發(fā)明提出了一種自適應(yīng)字符編碼的優(yōu)化策略,可以支持各種語言和編碼體系。其基本思路為為了減少高頻字符狀態(tài)轉(zhuǎn)移的偏移量,使用頻率越高的字符編碼值越小。具體的方法為1.掃描詞表中的字符,統(tǒng)計(jì)字頻;2.按照字頻從高往低排序;3.字符編碼值為其排序的序列號(hào)。
設(shè)一個(gè)詞表為“aa,aab,aad,bc,be,bed,cd”,則字頻表如下
因此每個(gè)輸入變量值即為輸入字符的序列號(hào)。為了適應(yīng)雙字節(jié)字符編碼(如GB2312、BIG5),我們引入了一個(gè)64K的整數(shù)數(shù)組Charset存儲(chǔ)字符的編碼值。計(jì)算公式為Code=Charset[Char],其中Char為字符對(duì)應(yīng)的整數(shù)值,即單字節(jié)字符的Byte值或者雙字節(jié)字符的高位*256+雙字節(jié)字符的低位。Code為存儲(chǔ)出來的編碼值。
這種編碼方案在輸入文本編碼方案不同的情況下,無需修改詞典方法的代碼。而且還能進(jìn)一步減少數(shù)組稀疏,提高空間利用率。
4.完美雙數(shù)組TRIE樹的性能測(cè)試對(duì)于80283詞條的漢語詞典,我們采用完美雙數(shù)組TRIE樹方法,空間利用率為91.71%,每秒平均可檢索各種隨機(jī)詞條163.5萬條,利用該詞典進(jìn)行最大匹配分詞,單機(jī)(CPU3.0G,內(nèi)存1G)速度為23.81MB/s。
一種完美雙數(shù)組TRIE樹詞典管理與檢索方法,包括步驟(1)將詞典用Trie樹結(jié)構(gòu)表示;(2)將Trie樹轉(zhuǎn)換成兩個(gè)線性數(shù)組;(3)根據(jù)用戶的輸入,利用生成的兩個(gè)數(shù)組實(shí)現(xiàn)對(duì)詞典的檢索。
所述的方法,對(duì)詞典中的詞項(xiàng)以字節(jié)為單位進(jìn)行編碼,統(tǒng)計(jì)詞典中各編碼單位出現(xiàn)的頻率,按照頻率大小賦予不同編碼單位不同的序列號(hào);對(duì)頻率越大的編碼單位,賦予的序列號(hào)越小。
所述的方法,Trie樹轉(zhuǎn)換成的兩個(gè)線性數(shù)組一個(gè)為基值數(shù)組,一個(gè)為校驗(yàn)值數(shù)組,兩個(gè)數(shù)組中的元素一一對(duì)應(yīng);基值數(shù)組中的一個(gè)元素對(duì)應(yīng)于Trie樹的一個(gè)結(jié)點(diǎn),該元素值作為狀態(tài)轉(zhuǎn)移的基值;校驗(yàn)值數(shù)組中對(duì)應(yīng)位置的元素值作為校驗(yàn)值,用于檢查該狀態(tài)是否存在。
所述的方法,將Trie樹結(jié)構(gòu)轉(zhuǎn)換成雙數(shù)組結(jié)構(gòu)的構(gòu)造過程中,對(duì)當(dāng)前活動(dòng)結(jié)點(diǎn)進(jìn)行排序,每一次都先處理當(dāng)前分支結(jié)點(diǎn)最多的結(jié)點(diǎn)。
所述所述的檢索方法,一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài),表現(xiàn)為前一狀態(tài)在基值數(shù)組中對(duì)應(yīng)位置的元素值加上輸入字符的序列號(hào),作為下一個(gè)狀態(tài)在兩個(gè)數(shù)組中的對(duì)應(yīng)位置;下一狀態(tài)在校驗(yàn)值數(shù)組中相應(yīng)位置的校驗(yàn)值應(yīng)該等于前一狀態(tài)的數(shù)組位置。
本發(fā)明使用雙數(shù)組TRIE樹結(jié)構(gòu),將詞典用Trie樹結(jié)構(gòu)表示,Trie樹轉(zhuǎn)換成兩個(gè)線性數(shù)組,再對(duì)詞典中的詞項(xiàng)以字節(jié)為單位進(jìn)行編碼的數(shù)字方法和手段,克服現(xiàn)有的詞典方法查詢?nèi)秉c(diǎn),解決詞典管理和檢索的問題。達(dá)到提高查詢效率,減少空間的效果。
圖1是本發(fā)明將Trie樹結(jié)構(gòu)簡(jiǎn)化成兩個(gè)線性數(shù)組圖。
圖2是詞表對(duì)應(yīng)的Trie樹示意圖。
圖3是本發(fā)明的完美雙數(shù)組TRIE樹詞典管理與檢索方法的流程圖。
具體實(shí)施例方式
圖1是Trie樹結(jié)構(gòu)轉(zhuǎn)化為雙數(shù)組Trie樹結(jié)構(gòu)的示意圖。
圖2是將詞典中的所有詞用Trie樹結(jié)構(gòu)表示。
圖3是本發(fā)明的完美雙數(shù)組TRIE樹詞典管理與檢索方法的流程,其步驟步驟1,對(duì)詞典中的詞條以兩個(gè)字節(jié)為一個(gè)編碼單位,統(tǒng)計(jì)詞典中各編碼單位出現(xiàn)的頻率,按照頻率大小賦予不同編碼單位不同的序列碼;對(duì)在詞典中出現(xiàn)頻率越大的編碼單位,賦予的序列碼越小,最后將所有的編碼單位和相應(yīng)的序列碼保存在序列碼文件中;步驟2,讀入詞典所有詞條,用Trie樹表示,讀入序列碼文件,按照分支結(jié)點(diǎn)數(shù)較多的結(jié)點(diǎn)優(yōu)先處理的策略,依次處理所有Trie樹結(jié)點(diǎn),最終將整個(gè)Trie樹轉(zhuǎn)換成兩個(gè)整數(shù)數(shù)組,一個(gè)是基值數(shù)組,一個(gè)是校驗(yàn)值數(shù)組,并將兩個(gè)數(shù)組保存為文件;步驟3,以用戶提交的檢索詞第一個(gè)編碼單位的序列碼為基值數(shù)組下標(biāo),后續(xù)的編碼單位依次作為輸入變量,當(dāng)前狀態(tài)的基值加上輸入變量作為下一個(gè)狀態(tài)在數(shù)組中的下標(biāo)。如果當(dāng)前狀態(tài)的校驗(yàn)值等于上一狀態(tài)的數(shù)組下標(biāo),則繼續(xù)判斷下一狀態(tài),最終返回檢索成功或者失敗。
權(quán)利要求
1.一種完美雙數(shù)組TRIE樹詞典管理與檢索方法,包括步驟(1)將詞典用Trie樹結(jié)構(gòu)表示;(2)將Trie樹轉(zhuǎn)換成兩個(gè)線性數(shù)組;(3)根據(jù)用戶的輸入,利用生成的兩個(gè)數(shù)組實(shí)現(xiàn)對(duì)詞典的檢索。
2.如權(quán)利要求1所述的方法,其特征在于對(duì)詞典中的詞項(xiàng)以字節(jié)為單位進(jìn)行編碼,統(tǒng)計(jì)詞典中各編碼單位出現(xiàn)的頻率,按照頻率大小賦予不同編碼單位不同的序列號(hào);對(duì)頻率越大的編碼單位,賦予的序列號(hào)越小。
3.如權(quán)利要求1所述的方法,其特征在于Trie樹轉(zhuǎn)換成的兩個(gè)線性數(shù)組一個(gè)為基值數(shù)組,一個(gè)為校驗(yàn)值數(shù)組,兩個(gè)數(shù)組中的元素一一對(duì)應(yīng);基值數(shù)組中的一個(gè)元素對(duì)應(yīng)于Trie樹的一個(gè)結(jié)點(diǎn),該元素值作為狀態(tài)轉(zhuǎn)移的基值;校驗(yàn)值數(shù)組中對(duì)應(yīng)位置的元素值作為校驗(yàn)值,用于檢查該狀態(tài)是否存在。
4.如權(quán)利要求1所述的方法,其特征在于將Trie樹結(jié)構(gòu)轉(zhuǎn)換成雙數(shù)組結(jié)構(gòu)的構(gòu)造過程中,對(duì)當(dāng)前活動(dòng)結(jié)點(diǎn)進(jìn)行排序,每一次都先處理當(dāng)前分支結(jié)點(diǎn)最多的結(jié)點(diǎn)。
5.如權(quán)利要求3所述所述的檢索方法,其特征在于一個(gè)狀態(tài)轉(zhuǎn)移到另一個(gè)狀態(tài),表現(xiàn)為前一狀態(tài)在基值數(shù)組中對(duì)應(yīng)位置的元素值加上輸入字符的序列號(hào),作為下一個(gè)狀態(tài)在兩個(gè)數(shù)組中的對(duì)應(yīng)位置;下一狀態(tài)在校驗(yàn)值數(shù)組中相應(yīng)位置的校驗(yàn)值應(yīng)該等于前一狀態(tài)的數(shù)組位置。
6.如權(quán)利要求1或2或3所述的方法,其特征在于其具體步驟步驟1,對(duì)詞典中的詞條以兩個(gè)字節(jié)為一個(gè)編碼單位,統(tǒng)計(jì)詞典中各編碼單位出現(xiàn)的頻率,按照頻率大小賦予不同編碼單位不同的序列碼;對(duì)在詞典中出現(xiàn)頻率越大的編碼單位,賦予的序列碼越小,最后將所有的編碼單位和相應(yīng)的序列碼保存在序列碼文件中;步驟2,讀入詞典所有詞條,用Trie樹表示,讀入序列碼文件,按照分支結(jié)點(diǎn)數(shù)較多的結(jié)點(diǎn)優(yōu)先處理的策略,依次處理所有Trie樹結(jié)點(diǎn),最終將整個(gè)Trie樹轉(zhuǎn)換成兩個(gè)整數(shù)數(shù)組,一個(gè)是基值數(shù)組,一個(gè)是校驗(yàn)值數(shù)組,并將兩個(gè)數(shù)組保存為文件;步驟3,以用戶提交的檢索詞第一個(gè)編碼單位的序列碼為基值數(shù)組下標(biāo),后續(xù)的編碼單位依次作為輸入變量,當(dāng)前狀態(tài)的基值加上輸入變量作為下一個(gè)狀態(tài)在數(shù)組中的下標(biāo),如果當(dāng)前狀態(tài)的校驗(yàn)值等于上一狀態(tài)的數(shù)組下標(biāo),則繼續(xù)判斷下一狀態(tài),最終返回檢索成功或者失敗。
全文摘要
本發(fā)明涉及自然語言處理領(lǐng)域和信息檢索領(lǐng)域,特別是一種完美雙數(shù)組TRIE樹詞典管理與檢索方法。將Trie樹結(jié)構(gòu)轉(zhuǎn)換成兩個(gè)線性數(shù)組表示,并在構(gòu)造過程中提出了一種優(yōu)化策略。同時(shí)提出一種自適應(yīng)編碼方案,以字節(jié)為編碼單位對(duì)字符進(jìn)行自動(dòng)編碼。包括步驟(1)將詞典用Trie樹結(jié)構(gòu)表示;(2)將Trie樹轉(zhuǎn)換成兩個(gè)線性數(shù)組;(3)根據(jù)用戶的輸入,利用生成的兩個(gè)數(shù)組實(shí)現(xiàn)對(duì)詞典的檢索。其具體步驟包括步驟1,對(duì)詞典以字節(jié)為單位進(jìn)行自動(dòng)編碼生成序列碼文件;步驟2,將詞典用Trie樹表示,利用序列碼文件將Trie樹轉(zhuǎn)換成兩個(gè)數(shù)組來表示;步驟3,在生成的兩個(gè)線性數(shù)組中檢索用戶提交的詞。
文檔編號(hào)G06F17/30GK1786962SQ200510130690
公開日2006年6月14日 申請(qǐng)日期2005年12月21日 優(yōu)先權(quán)日2005年12月21日
發(fā)明者張華平, 王思力 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所