專利名稱:一種利用字母索引表查詢電子詞典單詞的方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種電子詞典單詞的快速查詢方法及其系統(tǒng)。
背景技術(shù):
一般地,詞典查詢采用索引結(jié)構(gòu)進(jìn)行單詞查詢,即在用戶輸入單詞的過(guò)程中通過(guò)單詞的部分或全部?jī)?nèi)容(如前幾個(gè)字母),在詞典的索引中來(lái)查詢單詞的相關(guān)內(nèi)容。
請(qǐng)參見圖1,是現(xiàn)有技術(shù)電子詞典索引數(shù)據(jù)結(jié)構(gòu)示意圖,其包括詞典數(shù)據(jù)庫(kù),存儲(chǔ)有每個(gè)單詞的數(shù)據(jù);地址索引表,包含指向每個(gè)單詞數(shù)據(jù)的地址。數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和索引表中的地址是按相同順序連續(xù)存儲(chǔ)的。用戶在輸入單詞后,采用折半查找法從地址索引表中取出一個(gè)單詞的地址,依照該地址從詞典數(shù)據(jù)庫(kù)取出該單詞的主題詞,然后把取出的主題詞與輸入的字符串進(jìn)行比較,判斷是否是與輸入字符串相同或最接近輸入字符串的單詞,若是則結(jié)束查詢;否則按折半查找法繼續(xù)查詢。
這種查詢方法的最大次數(shù)為log2N,N為詞典數(shù)據(jù)庫(kù)包含的單詞總數(shù)。這樣,即便我們輸入很簡(jiǎn)單的單詞也需要對(duì)整個(gè)單詞數(shù)據(jù)進(jìn)行多次重復(fù)查詢后才能獲得最終的查找結(jié)果。而且通常情況下,為了節(jié)省空間,詞典中的單詞數(shù)據(jù)都是經(jīng)過(guò)壓縮的,在取主題詞進(jìn)行比較時(shí),需要先進(jìn)行解壓縮。這樣在查詢過(guò)程中需要經(jīng)過(guò)多次解壓縮動(dòng)作。按該索引查詢比較次數(shù)公式log2N,以N=100,000為例,則計(jì)算得到其解壓次數(shù)為17次。因此,該現(xiàn)有查詢方法實(shí)際上制約了單詞的查詢速度。
申請(qǐng)?zhí)枮?9123297的中國(guó)專利公開了一種使用快速查詢索引結(jié)構(gòu)的電子詞典單詞查詢方法,它是在上述傳統(tǒng)的索引結(jié)構(gòu)基礎(chǔ)上增加了一個(gè)二次索引結(jié)構(gòu),該二次索引結(jié)構(gòu)中包含了單詞前兩個(gè)字母的排列組合,對(duì)于字母為一個(gè)或者兩個(gè)的單詞,只需要根據(jù)該二次索引結(jié)構(gòu)即直接找到其對(duì)應(yīng)的單詞數(shù)據(jù)地址從而找到要查詢的單詞,提高了查詢速度;對(duì)于字母數(shù)更多的單詞,再在該二次索引結(jié)構(gòu)查詢結(jié)果的基礎(chǔ)上,利用折半法進(jìn)行查詢。
然而,以不同字母起始的單詞其分布是不均勻的,例如,以st和su開頭的單詞在一個(gè)10萬(wàn)詞條的詞典中均超過(guò)2000個(gè),查詢時(shí)的解壓縮次數(shù)平均為11次。因此,由于不同起始字母的單詞的密度不同,該方法的查詢速度不均衡,對(duì)于起始字母相同的密度大的單詞,查詢時(shí)的重復(fù)查詢和解壓次數(shù)仍然偏多,進(jìn)而影響了整體的查詢速度。
此外,在電子詞典系統(tǒng)內(nèi)存資源十分緊張的情況下,可能無(wú)法為地址索引表提供足夠的空間,即無(wú)法在內(nèi)存中創(chuàng)建地址索引表。此時(shí),要是按傳統(tǒng)的查詢方法,要查詢單詞的話,只能依序一個(gè)一個(gè)的對(duì)比,這實(shí)際是不可能實(shí)現(xiàn)的。而即使采用中國(guó)專利99123297公開的二級(jí)索引結(jié)構(gòu),由于查詢到的第二層索引項(xiàng)仍然可能分布了很大的單詞數(shù),因此其查詢速度也是不可以接受的。如何能夠在資源緊張的情況下,提高其查詢速度,使得可能實(shí)現(xiàn)單詞查詢功能,也是急待解決的一個(gè)問(wèn)題。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種電子詞典單詞的快速查詢方法,能夠顯著地提高查詢速度。
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種利用字母索引表查詢電子詞典單詞的方法,包括以下步驟(a)根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)具有多層樹狀邏輯結(jié)構(gòu)的字母索引表,樹中每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母,同時(shí)還對(duì)應(yīng)于從第一層索引項(xiàng)到該索引項(xiàng)的路徑上所有索引項(xiàng)對(duì)應(yīng)字母按序組成的一字母序列,每一索引項(xiàng)中記錄有單詞索引信息,非底層的索引項(xiàng)還記錄有其下層索引項(xiàng)的首地址;其中,當(dāng)所述字母索引表中一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)大于一設(shè)定值時(shí),建立該索引項(xiàng)的下層索引項(xiàng),其中至少包括在單詞中實(shí)際存在的字母序列對(duì)應(yīng)的各個(gè)索引項(xiàng);
(b)依次讀取用戶輸入字母序列中的一個(gè)字母,根據(jù)所述字母索引表逐層查詢,獲取與該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與該輸入字母序列中前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng);(c)將步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì),獲取查詢結(jié)果,其中,當(dāng)該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同時(shí),則根據(jù)該索引項(xiàng)中記錄的單詞索引信息從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù)并顯示該單詞,否則,根據(jù)該索引項(xiàng)中記錄的單詞索引信息進(jìn)行重復(fù)查找和比較,獲取查詢結(jié)果并顯示。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述步驟(a)中對(duì)一索引項(xiàng)建立下層索引項(xiàng)時(shí),是建立一組26個(gè)索引項(xiàng),按順序分別對(duì)應(yīng)26個(gè)字母a~z,且每一索引項(xiàng)占用相同的字節(jié)數(shù);所述步驟(b)進(jìn)一步分為以下步驟(b1)讀取所述輸入字母序列中的第一個(gè)字母,根據(jù)系統(tǒng)記錄的字母索引表第一層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),在字母索引表的第一層中找到對(duì)應(yīng)的索引項(xiàng);(b2)判斷當(dāng)前找到的索引項(xiàng)是否已是底層索引項(xiàng),如果是,執(zhí)行步驟(c),否則執(zhí)行步驟(b3);(b3)判斷所述輸入字母序列的所有字母是否均已讀取,如果是,則以最后一個(gè)字母對(duì)應(yīng)的索引項(xiàng)為找到的索引項(xiàng),執(zhí)行步驟(c);否則,執(zhí)行步驟(b4);(b4)讀取輸入字母序列還未讀取的字母中的第一個(gè)字母,根據(jù)其前一字母對(duì)應(yīng)索引項(xiàng)中記錄的下層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),在該組索引項(xiàng)中找到該字母對(duì)應(yīng)的索引項(xiàng),然后返回步驟(b2)。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述步驟(a)中單詞數(shù)的設(shè)定值為64、128或256。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述步驟(a)中還根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建了一地址索引表,所述詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);且所述索引項(xiàng)記錄的單詞索引信息為單詞序號(hào),該單詞序號(hào)是該索引項(xiàng)對(duì)應(yīng)字母序列構(gòu)成的單詞的序號(hào),或者是以該字母序列為首的單詞中排序第一的單詞的序號(hào);所述步驟(c)中,當(dāng)步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同時(shí),則根據(jù)該索引項(xiàng)記錄的單詞序號(hào)在地址索引表中所對(duì)應(yīng)的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞序號(hào),按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述步驟(a)中還根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建了一地址索引表,所述詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);所述索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述步驟(c)中,當(dāng)步驟b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰下一索引項(xiàng)中記錄的單詞地址,按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述步驟(c)中,當(dāng)步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,以該索引項(xiàng)中記錄的單詞地址為起始地址,在詞典數(shù)據(jù)庫(kù)中向后逐一查找相應(yīng)的單詞數(shù)據(jù)并進(jìn)行對(duì)比,以獲取與輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
進(jìn)一步地,上述方法還可具有以下特點(diǎn)所述詞典數(shù)據(jù)庫(kù)中保存的單詞數(shù)據(jù)經(jīng)過(guò)壓縮處理,在所述步驟(c)中顯示輸入單詞和將步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì)之前還包括解壓縮處理。
本發(fā)明要解決的另一技術(shù)問(wèn)題是提供一種電子詞典單詞的快速查詢系統(tǒng),能夠顯著地提高查詢速度。
為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種利用字母索引表查詢電子詞典單詞的系統(tǒng),包括接收輸入字母序列的單詞輸入單元,用于緩存該輸入字母序列碼值的緩存單元,存儲(chǔ)了詞典數(shù)據(jù)庫(kù)的存儲(chǔ)單元,單詞查詢單元,以及用于顯示查詢結(jié)果的顯示單元,其特征在于,還包括索引項(xiàng)查詢單元,其中所述存儲(chǔ)單元還存儲(chǔ)了根據(jù)該詞典數(shù)據(jù)庫(kù)創(chuàng)建的一字母索引表,該字母索引表具有多層樹狀邏輯結(jié)構(gòu),樹中每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母,同時(shí)還對(duì)應(yīng)于從第一層索引項(xiàng)到該索引項(xiàng)的路徑上所有索引項(xiàng)對(duì)應(yīng)字母按序組成的一字母序列,每一索引項(xiàng)中記錄有單詞索引信息,非底層的索引項(xiàng)還記錄有其下層索引項(xiàng)的首地址;其中,當(dāng)所述字母索引表中一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)大于一設(shè)定值時(shí),該索引項(xiàng)還包括一組下層索引項(xiàng),其中至少包括在單詞中實(shí)際存在的字母序列對(duì)應(yīng)的各個(gè)索引項(xiàng);所述索引項(xiàng)查詢單元用于根據(jù)緩存的輸入字母序列,依次讀取其中的一個(gè)字母,根據(jù)所述字母索引表逐層查詢,獲取與該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與該輸入字母序列中前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng),然后輸出;所述單詞查詢單元用于將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì),獲取單詞查詢結(jié)果,其中,如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)中記錄的單詞索引信息從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù),否則,根據(jù)該索引項(xiàng)中記錄的單詞索引信息進(jìn)行重復(fù)查找和比較以獲取查詢結(jié)果。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn)所述存儲(chǔ)單元中的字母索引表的邏輯結(jié)構(gòu)為一多層的26叉樹,每一索引項(xiàng)的下層索引項(xiàng)包括一組26個(gè)索引項(xiàng),且按順序分別對(duì)應(yīng)26個(gè)字母a~z;所述索引項(xiàng)查詢單元進(jìn)一步包括讀取子單元、查詢子單元和判斷子單元讀取子單元,用于依次從所述輸入字母序列中讀取一個(gè)字母,如判斷出所有字母均已讀取過(guò),則輸出最后一個(gè)字母對(duì)應(yīng)的索引項(xiàng);否則,輸出該讀取的字母至查詢子單元;查詢子單元,用于接收所述讀取子單元輸出的字母,根據(jù)系統(tǒng)記錄的或前一字母對(duì)應(yīng)索引項(xiàng)中記錄的下層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),獲取該字母對(duì)應(yīng)的索引項(xiàng),并輸出至判斷子單元;判斷子單元,用于判斷查詢子單元所獲取的索引項(xiàng)是否為底層索引項(xiàng),如果是,則輸出該索引項(xiàng);否則,輸出至讀取子單元。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn)所述存儲(chǔ)單元中還保存了一地址索引表,存儲(chǔ)的詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);所述字母索引表中索引項(xiàng)記錄的單詞索引信息為單詞序號(hào),該單詞序號(hào)是該索引項(xiàng)對(duì)應(yīng)字母序列構(gòu)成的單詞的序號(hào),或者是以該字母序列為首的單詞中排序第一的單詞的序號(hào);所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞序號(hào)在地址索引表中所對(duì)應(yīng)的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞序號(hào),按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,以獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn)所述存儲(chǔ)單元中還保存了一地址索引表,存儲(chǔ)的詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);且所述字母索引表中索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞地址,按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,以獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
進(jìn)一步地,上述系統(tǒng)還可具有以下特點(diǎn)所述存儲(chǔ)單元存儲(chǔ)的字母索引表中記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,以該索引項(xiàng)中記錄的單詞地址為起始地址,在詞典數(shù)據(jù)庫(kù)中向后逐一查找相應(yīng)的單詞數(shù)據(jù)并進(jìn)行對(duì)比,以獲取與輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
由上可知,本發(fā)明利用字母索引表,且根據(jù)單詞分布密度的不同而動(dòng)態(tài)的調(diào)整索引深度,在不同起始字母的單詞分布不均勻的情況下仍能保持均衡的查詢速度,并在此基礎(chǔ)上降低了重復(fù)查詢和解壓的次數(shù),極大的提高了查詢的速度。并且,對(duì)于資源緊張無(wú)法創(chuàng)建地址索引表的環(huán)境下,也能夠?qū)崿F(xiàn)較快的單詞查詢。
圖1是現(xiàn)有技術(shù)電子詞典索引數(shù)據(jù)結(jié)構(gòu)示意圖。
圖2是本發(fā)明第一實(shí)施例查詢系統(tǒng)的功能框圖。
圖3是本發(fā)明第一實(shí)施例索引數(shù)據(jù)結(jié)構(gòu)的示意圖。
圖4是本發(fā)明第一實(shí)施例單詞查詢方法的流程圖。
圖5是采用本發(fā)明第一實(shí)施例方法的一應(yīng)用實(shí)例查詢過(guò)程的示意圖。
圖6是采用本發(fā)明第一實(shí)施例方法的另一應(yīng)用實(shí)例查詢過(guò)程的示意圖。
圖7是本發(fā)明第二實(shí)施例索引數(shù)據(jù)結(jié)構(gòu)的示意圖。
具體實(shí)施例方式
第一實(shí)施例圖2是本實(shí)施例查詢系統(tǒng)的功能框圖,其包括單詞輸入單元用于接收用戶輸入用于查詢單詞的字母序列并將其輸出到緩存單元,該字母序列可能是一個(gè)完整的單詞,也可能只是單詞的前幾個(gè)字母。
緩存單元用于緩存輸入字母序列中各字母的ASCII碼。
存儲(chǔ)單元用于存儲(chǔ)一電子詞典數(shù)據(jù)庫(kù),對(duì)應(yīng)于該數(shù)據(jù)庫(kù)的一地址索引表,以及一字母索引表。
圖3示出了索引數(shù)據(jù)結(jié)構(gòu)的示意圖。與現(xiàn)有技術(shù)一樣,數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ),由地址索引表中的一地址即可找到數(shù)據(jù)庫(kù)中同一序號(hào)的單詞數(shù)據(jù)。而字母索引表是根據(jù)該詞典數(shù)據(jù)庫(kù)創(chuàng)建的,其邏輯結(jié)構(gòu)為一多層的26叉樹,請(qǐng)同時(shí)參照?qǐng)D6,樹中的每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母,同時(shí)還對(duì)應(yīng)于一個(gè)字母序列,該字母序列是由從第一層索引項(xiàng)到該索引項(xiàng)的路徑上包含的所有索引項(xiàng)對(duì)應(yīng)的字母按序組成的。每一索引項(xiàng)中都記錄了一單詞序號(hào),非底層的索引項(xiàng)還記錄有其下層索引項(xiàng)的首地址。
第一層索引項(xiàng)共有26個(gè),按順序分別對(duì)應(yīng)26個(gè)字母a~z。為了保證查詢速度的均衡,要求以每個(gè)索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)小于一設(shè)定值,如果大于該值,則需建立該索引項(xiàng)的下層索引項(xiàng),每一索引項(xiàng)的下層索引項(xiàng)包括一組26個(gè)索引項(xiàng),也是按順序分別對(duì)應(yīng)26個(gè)字母a~z。索引項(xiàng)間單詞最大個(gè)數(shù)設(shè)定得越小則索引速度越快,但是其占用的空間也會(huì)越大。該設(shè)定值較佳取64、128或256,本實(shí)施例取128,經(jīng)驗(yàn)證是比較合理的。
任一字母序列都可以得到其組成字母的ASCII碼字符串。在詞典數(shù)據(jù)庫(kù)中,單詞就是按其ASCII碼字符串來(lái)排序的。而索引項(xiàng)記錄的單詞序號(hào)即為其對(duì)應(yīng)字母序列構(gòu)成的單詞的序號(hào),或以該字母序列為首的單詞中排序第一的單詞的序號(hào)。
索引項(xiàng)查詢單元所述索引項(xiàng)查詢單元用于根據(jù)緩存的輸入字母序列,依次讀取其中的一個(gè)字母,根據(jù)所述字母索引表逐層查詢,獲取與該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與該輸入字母序列中前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng),然后輸出到單詞查詢單元;該單元進(jìn)一步包括以下子單元讀取子單元,依序每次從所述輸入字母序列中讀取一個(gè)字母,如發(fā)現(xiàn)所有字母均已讀取過(guò),則輸出最后一個(gè)字母對(duì)應(yīng)的索引項(xiàng);否則,將此次讀取的字母交查詢子單元處理。
查詢子單元,用于對(duì)此次讀出的字母,根據(jù)其系統(tǒng)記錄的或前一字母對(duì)應(yīng)索引項(xiàng)中記錄的其下層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),在該組索引項(xiàng)中找到該字母對(duì)應(yīng)的索引項(xiàng),然后交判斷子單元處理;判斷子單元,用于判斷當(dāng)前找到的索引項(xiàng)是否已是底層索引項(xiàng),如果是,則輸出該索引項(xiàng);否則,交讀取子單元繼續(xù)處理。
單詞查詢單元用于將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì),獲取單詞查詢結(jié)果。其中,如果索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,直接按該索引項(xiàng)記錄的單詞序號(hào)所對(duì)應(yīng)的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)記錄的單詞序號(hào),按折半查找法利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,直到找到與輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
顯示單元用于根據(jù)查到的單詞數(shù)據(jù),顯示相應(yīng)的單詞和相關(guān)內(nèi)容。
索引項(xiàng)查詢單元和單詞查詢單元所執(zhí)行的具體查詢操作將在流程中詳細(xì)介紹。
基于以上系統(tǒng),本實(shí)施例單詞查詢方法如圖4所示,包括以下步驟步驟1接收用戶輸入的字母序列;步驟2讀取輸入字母序列中的第一個(gè)字母,根據(jù)字母索引表第一層索引項(xiàng)的首地址,在字母索引表的第一層中找到對(duì)應(yīng)的索引項(xiàng);本實(shí)施例中,每一個(gè)索引項(xiàng)占用的字節(jié)數(shù)相同,因此有某字母對(duì)應(yīng)的索引項(xiàng)的地址=該字母所在的一組索引項(xiàng)的首地址+(該小寫或大寫字母的ASCII碼值-字母a或A的ASCII碼值)×一個(gè)索引項(xiàng)占用的字節(jié)數(shù)。
式中的ASCII碼值也可以用其它的碼值來(lái)代替,只要能正確計(jì)算出該字母和字母a之間的偏移量即可。根據(jù)該地址即可找到對(duì)應(yīng)的索引項(xiàng)。字母索引表第一層索引項(xiàng)的首地址可以由系統(tǒng)在生成字母索引表時(shí)加以記錄,也可以認(rèn)為該字母索引表存在第0層節(jié)點(diǎn),該節(jié)點(diǎn)對(duì)應(yīng)的索引項(xiàng)記錄了第一層索引項(xiàng)的首地址,但不對(duì)應(yīng)于任何一個(gè)字母。
步驟3判斷當(dāng)前找到的索引項(xiàng)是否已是底層索引項(xiàng),如果是,執(zhí)行步驟4,否則執(zhí)行步驟5;步驟4,如此時(shí)輸入字母序列的所有字母已讀取,則根據(jù)該底層索引項(xiàng)記錄的單詞序號(hào)從地址索引表中找到對(duì)應(yīng)的地址,由該地址找到對(duì)應(yīng)單詞的數(shù)據(jù),否則,根據(jù)該底層索引項(xiàng)記錄的單詞序號(hào)和該底層索引項(xiàng)相鄰的下一索引項(xiàng)記錄的單詞序號(hào),按折半查找法找到對(duì)應(yīng)單詞的數(shù)據(jù),將單詞數(shù)據(jù)解壓縮后向用戶顯示查詢結(jié)果,可能是與輸入字母序列相同的單詞或與其最接近的單詞或查找不到的提示,結(jié)束;在本文中,某一層中同組的索引項(xiàng)是根據(jù)其對(duì)應(yīng)字母按從小到大的順序排列的,各組索引項(xiàng)之間則是根據(jù)其上一層索引項(xiàng)對(duì)應(yīng)字母按從小到小的順序排列的。因此,對(duì)于對(duì)應(yīng)字母為a~y的索引項(xiàng),其相鄰的下一索引項(xiàng)均為同組的索引項(xiàng),而對(duì)應(yīng)字母為z的索引項(xiàng),其相鄰的下一索引項(xiàng)則為下一組索引項(xiàng)中的第一個(gè)索引項(xiàng),本實(shí)施例即對(duì)應(yīng)字母為a的索引項(xiàng)。
按折半查找法查找時(shí),從兩個(gè)單詞序號(hào)開始,假定為單詞序號(hào)A和單詞序號(hào)B,其中單詞序號(hào)B較大,先計(jì)算出位于該兩個(gè)單詞序號(hào)中間的單詞序號(hào)C(將兩者相加除以2即可),然后通過(guò)該單詞序號(hào)C對(duì)應(yīng)的地址找到相應(yīng)的單詞數(shù)據(jù),將輸入字母序列與解壓縮后的該單詞數(shù)據(jù)進(jìn)行比較,如兩者相等則輸出查詢到的單詞;如輸入字母序列的ASCII碼字符串大于該單詞的ASCII碼字符串,則對(duì)在單詞序號(hào)C和單詞序號(hào)B之間的單詞進(jìn)行下一次的查詢;如輸入字母序列的ASCII碼字符串小于該單詞的ASCII碼字符串,則對(duì)在單詞序號(hào)A和單詞序號(hào)C之間的單詞進(jìn)行下一次的查詢,直到查到相應(yīng)的單詞為止,如果找不到,可以輸出最接近的單詞作為查詢結(jié)果或者顯示單詞不存在。確定最接近的單詞時(shí)可以采用現(xiàn)有的各種算法,不是本發(fā)明要限定的內(nèi)容。
步驟5,判斷輸入字母序列的所有字母是否均已讀取,如果是,執(zhí)行步驟7,否則,執(zhí)行步驟6;步驟6,讀取輸入字母序列還未讀取的字母中的第一個(gè)字母,根據(jù)其前一字母對(duì)應(yīng)索引項(xiàng)中記錄的其下層索引項(xiàng)的首地址,在該組索引項(xiàng)中找到該字母對(duì)應(yīng)的索引項(xiàng),然后返回步驟3;步驟7,根據(jù)找到的最后一個(gè)索引項(xiàng)記錄的單詞序號(hào),從地址索引表中找到對(duì)應(yīng)的地址,然后根據(jù)該地址即可找到要查詢的單詞數(shù)據(jù),解壓縮后將查詢結(jié)果顯示給用戶,結(jié)束。
因?yàn)樵诘刂匪饕碇忻總€(gè)地址占用的字節(jié)數(shù)是相同的,根據(jù)索引項(xiàng)中記錄的單詞序號(hào)與初始序號(hào)的偏移可以容易地找到在地址索引表中對(duì)應(yīng)的地址,具體地某個(gè)單詞序號(hào)對(duì)應(yīng)的地址=地址索引表的首地址+(該單詞序號(hào)-單詞的初始序號(hào))×一個(gè)地址占用的字節(jié)數(shù)。
下面再以幾個(gè)查詢的實(shí)例對(duì)本發(fā)明進(jìn)行說(shuō)明。
請(qǐng)參考圖5,是一個(gè)實(shí)例的查詢過(guò)程的示意圖。圖中字母索引表中給出了一級(jí)索引a至z以及對(duì)a和b的二級(jí)索引示例。每個(gè)索引項(xiàng)除了對(duì)應(yīng)的字母外,還記錄了單詞序號(hào)和其下層索引項(xiàng)的首地址。只要以某一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞個(gè)數(shù)超過(guò)128,則為該索引項(xiàng)創(chuàng)建一組共26個(gè)下層索引項(xiàng)。下面描述一下輸入字母序列為aa時(shí)的查詢過(guò)程先取出輸入單詞的第一個(gè)字母a,在字母索引表的第一層找到字母a對(duì)應(yīng)的索引項(xiàng),發(fā)現(xiàn)以a字母開頭的單詞還有下一級(jí)索引,且輸入單詞未結(jié)束,于是取出輸入單詞的第二個(gè)字母a,在a的下一級(jí)索引中找到第一個(gè)索引項(xiàng),此時(shí)輸入單詞已經(jīng)結(jié)束,因此直接取出該索引項(xiàng)中單詞序號(hào),根據(jù)此序號(hào)對(duì)應(yīng)的地址,即單詞3的地址從詞典數(shù)據(jù)庫(kù)中取出單詞aa的數(shù)據(jù),解壓縮后顯示查詢結(jié)果。
圖6示出了用26叉樹所表示的字母索引表的邏輯結(jié)構(gòu),其中每一節(jié)點(diǎn)對(duì)應(yīng)一索引項(xiàng)。例如,要查找單詞star,可以沿著26叉樹讀取每一個(gè)字母對(duì)應(yīng)的索引項(xiàng)。當(dāng)查到第4個(gè)字母r后,輸入字母已經(jīng)結(jié)束,則直接從字母r對(duì)應(yīng)的索引項(xiàng)中讀取單詞star的序號(hào),再通過(guò)該序號(hào)對(duì)應(yīng)的地址讀取詞典數(shù)據(jù)庫(kù)中該單詞的相關(guān)內(nèi)容。
如果是查詢單詞stare,而且在查詢字母r后沒有下一級(jí)索引,則表明以“star”為首的單詞數(shù)未超過(guò)128,因此,將r對(duì)應(yīng)索引項(xiàng)中的單詞序號(hào)作為起始單詞序號(hào),并將r的下一索引項(xiàng)(即字母s對(duì)應(yīng)的索引項(xiàng))中的單詞序號(hào)作為結(jié)束單詞序號(hào)進(jìn)行折半查找,這樣,由于該兩個(gè)單詞序號(hào)之間的單詞最大個(gè)數(shù)是128,因此根據(jù)折半查找公式log2128=7,其最大查找次數(shù)不超過(guò)7次。因此,相對(duì)于現(xiàn)有技術(shù)的固定折半查找方法來(lái)看,本發(fā)明的動(dòng)態(tài)索引查找方法不僅大大降低了查找平均次數(shù),而且即使對(duì)于不同首字母開頭但單詞量不同的情況,也能夠做到查詢速度的均衡,且重復(fù)查詢和解壓縮次數(shù)大大減少。
為了更加清楚本發(fā)明之優(yōu)勢(shì)所在,再將本發(fā)明與中國(guó)專利99123297做一對(duì)比。中國(guó)專利99123297是在針對(duì)詞典數(shù)據(jù)庫(kù)索引地址折半查找的基礎(chǔ)上增加一個(gè)二級(jí)索引結(jié)構(gòu),如果以該二級(jí)索引結(jié)構(gòu)對(duì)應(yīng)的字母為首的單詞過(guò)多,則仍然無(wú)法避免因?yàn)檎郯氩樵兌霈F(xiàn)的重復(fù)查詢和解壓的問(wèn)題。
假定詞典數(shù)據(jù)庫(kù)的詞匯量均為100,000,請(qǐng)參見表1對(duì)幾個(gè)單詞的查詢次數(shù)的統(tǒng)計(jì)。
表1
由此可知,本發(fā)明查詢方法是先根據(jù)輸入字母序列中的字母逐次找到對(duì)應(yīng)層次的索引項(xiàng),如果包含某索引項(xiàng)對(duì)應(yīng)字母序列的單詞個(gè)數(shù)超過(guò)一個(gè)設(shè)定的值,如128個(gè),則為該索引項(xiàng)建立一組下層索引,依次類推。其索引深度根據(jù)單詞分布密度的不同而動(dòng)態(tài)調(diào)整,實(shí)現(xiàn)了在不同起始字母的單詞分布不均勻的情況下仍能保持均衡的查詢速度,降低了重復(fù)查詢和解壓的次數(shù),極大的提高了查詢的速度,特別適用于CPU速度較低的產(chǎn)品。
在上述實(shí)施例的基礎(chǔ)上還可以有各種變換。
例如,在另一實(shí)施例中,在每一索引項(xiàng)的記錄中,用單詞地址替換原實(shí)施例中的單詞序號(hào),該單詞地址即為該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址。這樣,在查找到與輸入字母序列對(duì)應(yīng)的索引項(xiàng)后,就可以直接根據(jù)該索引項(xiàng)記錄的單詞地址找到對(duì)應(yīng)的單詞數(shù)據(jù),或者根據(jù)該索引項(xiàng)及其相鄰下一索引項(xiàng)記錄的兩個(gè)單詞地址,根據(jù)地址索引表和詞典數(shù)據(jù)庫(kù)采用折半查找法找到對(duì)應(yīng)的單詞數(shù)據(jù)。這種方式不用再根據(jù)單詞序號(hào)去找對(duì)應(yīng)的地址,查詢更為快速。不過(guò),單詞序號(hào)對(duì)于單詞查詢也有其作用,比如可以提供查找當(dāng)前單詞的上一個(gè)單詞或下一個(gè)單詞的功能,等等。當(dāng)然,在其它實(shí)施例中,按上述規(guī)則在索引項(xiàng)中同時(shí)記錄單詞序號(hào)和單詞地址也是可以的。
例如,在另一實(shí)施例中,字母索引表中一個(gè)索引項(xiàng)的下層索引項(xiàng)也可以小于26個(gè),因?yàn)橛胁簧俳M合是不存在的,可以只包含單詞中實(shí)際存在的字母序列對(duì)應(yīng)的索引項(xiàng),這時(shí)需要在索引項(xiàng)中記錄對(duì)應(yīng)的字母,如果查詢索引項(xiàng)時(shí),還沒有查詢到底層索引項(xiàng)就找不到對(duì)應(yīng)索引項(xiàng),可以根據(jù)最后查到的該索引項(xiàng)中的單詞序號(hào)或單詞地址,從數(shù)據(jù)庫(kù)中找出最接近的單詞或顯示單詞不存在即可。這樣可以節(jié)約一些存儲(chǔ)空間。但是,在確定某字母對(duì)應(yīng)的索引項(xiàng)時(shí)就必須一個(gè)一個(gè)索引項(xiàng)的查找,會(huì)降低查詢的速度。
例如,在另一實(shí)施例中,電子詞典的數(shù)據(jù)也可以是不壓縮的,顯然,采用本發(fā)明方法同樣可以提高查詢速度,降低查詢次數(shù)。
第二實(shí)施例在電子詞典系統(tǒng)內(nèi)存資源十分緊張的情況下,可能無(wú)法為地址索引表提供足夠的空間,即無(wú)法在內(nèi)存中創(chuàng)建地址索引表。此時(shí),要是按傳統(tǒng)的查詢方法,要查詢單詞的話,只能依序一個(gè)一個(gè)的對(duì)比,這實(shí)際是不可能實(shí)現(xiàn)的。而即使采用中國(guó)專利99123297公開的二級(jí)索引結(jié)構(gòu),由于查詢到的第二層索引項(xiàng)仍然可能分布了很大的單詞數(shù),因此其查詢速度也是不可以接受的,而采用本發(fā)明的字母索引表,因?yàn)槊恳凰饕?xiàng)分布的單詞數(shù)是均衡的,因而使得查詢成為可能,即在因內(nèi)存資源不足而不創(chuàng)建地址索引表的同等條件下,本發(fā)明的查詢速度遠(yuǎn)遠(yuǎn)超過(guò)了上述現(xiàn)有的方法。
本實(shí)施例查詢系統(tǒng)的功能框圖包含的功能單元與第一實(shí)施例是完全一樣的,包括單詞輸入單元、緩存單元、存儲(chǔ)單元、索引項(xiàng)查詢單元、單詞查詢單元和顯示單元。其差別在于存儲(chǔ)單元中沒有存儲(chǔ)地址索引表,而存儲(chǔ)的字母索引表與第一實(shí)施例基本是相同的,差別僅在于每一索引項(xiàng)記錄的信息增加了單詞地址,即包括單詞序號(hào)、單詞地址和下層索引項(xiàng)首地址。其中的單詞地址即為該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址。單詞序號(hào)是可選的。
單詞查詢單元用于查詢出所要的單詞,如果索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,直接按該索引項(xiàng)記錄的單詞地址找到所要的單詞數(shù)據(jù);否則,從該索引項(xiàng)記錄的單詞地址開始逐一查找相應(yīng)的單詞數(shù)據(jù),將其解壓縮后進(jìn)行對(duì)比,直到找到與輸入字母序列相同的單詞,找不到相同單詞時(shí),可以顯示最接近的單詞或者顯示單詞不存在。
由于單詞數(shù)據(jù)有長(zhǎng)有短,因此每一單詞的起始地址并不能夠根據(jù)單詞序號(hào)進(jìn)行準(zhǔn)確推算,如果采用折半查找法,則折半得到的地址可能并非單詞的起始地址,從而出錯(cuò)。
其它的單元與第一實(shí)施例都是相同的,這里不再贅述。其索引數(shù)據(jù)結(jié)構(gòu)如圖7所示,與第一實(shí)施例相比,少了地址索引表。
基于以上系統(tǒng),本實(shí)施例單詞查詢方法的步驟與第一實(shí)施例基本相同,需作的修改為將原步驟4修改為以該最后一個(gè)索引項(xiàng)記錄的單詞地址為起始地址,在詞典數(shù)據(jù)庫(kù)中向后逐一查找相應(yīng)的單詞數(shù)據(jù),將其解壓縮后進(jìn)行對(duì)比,直到找到與輸入字母序列相同的單詞并顯示,找不到相同的單詞時(shí),顯示最接近的單詞或顯示單詞不存在,結(jié)束。
將原步驟7修改為根據(jù)找到的最后一個(gè)索引項(xiàng)記錄的單詞地址,直接找到要查詢的單詞數(shù)據(jù),解壓縮后將查詢到的單詞顯示給用戶,結(jié)束。
其它的步驟與第一實(shí)施例完全相同,這里不再贅述??偟膩?lái)說(shuō),第二實(shí)施例與第一實(shí)施例在索引項(xiàng)查詢階段是完全相同的,只是在后續(xù)的單詞查找階段有所不同。
同樣,該實(shí)施例也可以做一些變換,如字母索引表中一個(gè)索引項(xiàng)的下層索引項(xiàng)也可以小于26個(gè),只包含單詞中實(shí)際存在的字母序列對(duì)應(yīng)的索引項(xiàng)。或者,電子詞典的數(shù)據(jù)也可以是不壓縮的,等等。
權(quán)利要求
1.一種利用字母索引表查詢電子詞典單詞的方法,包括以下步驟(a)根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)具有多層樹狀邏輯結(jié)構(gòu)的字母索引表,樹中每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母,同時(shí)還對(duì)應(yīng)于從第一層索引項(xiàng)到該索引項(xiàng)的路徑上所有索引項(xiàng)對(duì)應(yīng)字母按序組成的一字母序列,每一索引項(xiàng)中記錄有單詞索引信息,非底層的索引項(xiàng)還記錄有其下層索引項(xiàng)的首地址;其中,當(dāng)所述字母索引表中一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)大于一設(shè)定值時(shí),建立該索引項(xiàng)的下層索引項(xiàng),其中至少包括在單詞中實(shí)際存在的字母序列對(duì)應(yīng)的各個(gè)索引項(xiàng);(b)依次讀取用戶輸入字母序列中的一個(gè)字母,根據(jù)所述字母索引表逐層查詢,獲取與該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與該輸入字母序列中前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng);(c)將步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì),獲取查詢結(jié)果,其中,當(dāng)該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同時(shí),則根據(jù)該索引項(xiàng)中記錄的單詞索引信息從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù)并顯示該單詞,否則,根據(jù)該索引項(xiàng)中記錄的單詞索引信息進(jìn)行重復(fù)查找和比較,獲取查詢結(jié)果并顯示。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟(a)中對(duì)一索引項(xiàng)建立下層索引項(xiàng)時(shí),是建立一組26個(gè)索引項(xiàng),按順序分別對(duì)應(yīng)26個(gè)字母a~z,且每一索引項(xiàng)占用相同的字節(jié)數(shù);所述步驟(b)進(jìn)一步分為以下步驟(b1)讀取所述輸入字母序列中的第一個(gè)字母,根據(jù)系統(tǒng)記錄的字母索引表第一層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),在字母索引表的第一層中找到對(duì)應(yīng)的索引項(xiàng);(b2)判斷當(dāng)前找到的索引項(xiàng)是否已是底層索引項(xiàng),如果是,執(zhí)行步驟(c),否則執(zhí)行步驟(b3);(b3)判斷所述輸入字母序列的所有字母是否均已讀取,如果是,則以最后一個(gè)字母對(duì)應(yīng)的索引項(xiàng)為找到的索引項(xiàng),執(zhí)行步驟(c);否則,執(zhí)行步驟(b4);(b4)讀取輸入字母序列還未讀取的字母中的第一個(gè)字母,根據(jù)其前一字母對(duì)應(yīng)索引項(xiàng)中記錄的下層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),在該組索引項(xiàng)中找到該字母對(duì)應(yīng)的索引項(xiàng),然后返回步驟(b2)。
3.如權(quán)利要求1所述的方法,其特征在于,所述步驟(a)中單詞數(shù)的設(shè)定值為64、128或256。
4.如權(quán)利要求1所述的方法,其特征在于所述步驟(a)中還根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建了一地址索引表,所述詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);且所述索引項(xiàng)記錄的單詞索引信息為單詞序號(hào),該單詞序號(hào)是該索引項(xiàng)對(duì)應(yīng)字母序列構(gòu)成的單詞的序號(hào),或者是以該字母序列為首的單詞中排序第一的單詞的序號(hào);所述步驟(c)中,當(dāng)步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同時(shí),則根據(jù)該索引項(xiàng)記錄的單詞序號(hào)在地址索引表中所對(duì)應(yīng)的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞序號(hào),按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
5.如權(quán)利要求1所述的方法,其特征在于所述步驟(a)中還根據(jù)詞典數(shù)據(jù)庫(kù)創(chuàng)建了一地址索引表,所述詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);所述索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述步驟(c)中,當(dāng)步驟b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰下一索引項(xiàng)中記錄的單詞地址,按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其特征在于所述索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述步驟(c)中,當(dāng)步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,以該索引項(xiàng)中記錄的單詞地址為起始地址,在詞典數(shù)據(jù)庫(kù)中向后逐一查找相應(yīng)的單詞數(shù)據(jù)并進(jìn)行對(duì)比,以獲取與輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
7.如權(quán)利要求1至6中任一權(quán)利要求所述的方法,其特征在于,所述詞典數(shù)據(jù)庫(kù)中保存的單詞數(shù)據(jù)經(jīng)過(guò)壓縮處理,在所述步驟(c)中顯示輸入單詞和將步驟(b)獲取的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì)之前還包括解壓縮處理。
8.一種利用字母索引表查詢電子詞典單詞的系統(tǒng),包括接收輸入字母序列的單詞輸入單元,用于緩存該輸入字母序列碼值的緩存單元,存儲(chǔ)了詞典數(shù)據(jù)庫(kù)的存儲(chǔ)單元,單詞查詢單元,以及用于顯示查詢結(jié)果的顯示單元,其特征在于,還包括索引項(xiàng)查詢單元,其中所述存儲(chǔ)單元還存儲(chǔ)了根據(jù)該詞典數(shù)據(jù)庫(kù)創(chuàng)建的一字母索引表,該字母索引表具有多層樹狀邏輯結(jié)構(gòu),樹中每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母,同時(shí)還對(duì)應(yīng)于從第一層索引項(xiàng)到該索引項(xiàng)的路徑上所有索引項(xiàng)對(duì)應(yīng)字母按序組成的一字母序列,每一索引項(xiàng)中記錄有單詞索引信息,非底層的索引項(xiàng)還記錄有其下層索引項(xiàng)的首地址;其中,當(dāng)所述字母索引表中一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)大于一設(shè)定值時(shí),該索引項(xiàng)還包括一組下層索引項(xiàng),其中至少包括在單詞中實(shí)際存在的字母序列對(duì)應(yīng)的各個(gè)索引項(xiàng);所述索引項(xiàng)查詢單元用于根據(jù)緩存的輸入字母序列,依次讀取其中的一個(gè)字母,根據(jù)所述字母索引表逐層查詢,獲取與該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與該輸入字母序列中前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng),然后輸出;所述單詞查詢單元用于將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入單詞比對(duì),獲取單詞查詢結(jié)果,其中,如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)中記錄的單詞索引信息從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù),否則,根據(jù)該索引項(xiàng)中記錄的單詞索引信息進(jìn)行重復(fù)查找和比較以獲取查詢結(jié)果。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述存儲(chǔ)單元中的字母索引表的邏輯結(jié)構(gòu)為一多層的26叉樹,每一索引項(xiàng)的下層索引項(xiàng)包括一組26個(gè)索引項(xiàng),且按順序分別對(duì)應(yīng)26個(gè)字母a~z;所述索引項(xiàng)查詢單元進(jìn)一步包括讀取子單元、查詢子單元和判斷子單元讀取子單元,用于依次從所述輸入字母序列中讀取一個(gè)字母,如判斷出所有字母均已讀取過(guò),則輸出最后一個(gè)字母對(duì)應(yīng)的索引項(xiàng);否則,輸出該讀取的字母至查詢子單元;查詢子單元,用于接收所述讀取子單元輸出的字母,根據(jù)系統(tǒng)記錄的或前一字母對(duì)應(yīng)索引項(xiàng)中記錄的下層索引項(xiàng)的首地址、該字母與字母a的偏移量和每一索引項(xiàng)占用的字節(jié)數(shù),獲取該字母對(duì)應(yīng)的索引項(xiàng),并輸出至判斷子單元;判斷子單元,用于判斷查詢子單元所獲取的索引項(xiàng)是否為底層索引項(xiàng),如果是,則輸出該索引項(xiàng);否則,輸出至讀取子單元。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于所述存儲(chǔ)單元中還保存了一地址索引表,存儲(chǔ)的詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);所述字母索引表中索引項(xiàng)記錄的單詞索引信息為單詞序號(hào),該單詞序號(hào)是該索引項(xiàng)對(duì)應(yīng)字母序列構(gòu)成的單詞的序號(hào),或者是以該字母序列為首的單詞中排序第一的單詞的序號(hào);所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞序號(hào)在地址索引表中所對(duì)應(yīng)的單詞地址從詞典數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞序號(hào),按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,以獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
11.如權(quán)利要求8所述的系統(tǒng),其特征在于所述存儲(chǔ)單元中還保存了一地址索引表,存儲(chǔ)的詞典數(shù)據(jù)庫(kù)中的單詞數(shù)據(jù)和該地址索引表中的地址一一對(duì)應(yīng),且按同一順序連續(xù)存儲(chǔ);且所述字母索引表中索引項(xiàng)記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,根據(jù)該索引項(xiàng)及其相鄰的下一索引項(xiàng)中記錄的單詞地址,按折半查找法,利用所述地址索引表和詞典數(shù)據(jù)庫(kù)進(jìn)行重復(fù)查找和對(duì)比,以獲取與所述輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
12.如權(quán)利要求8所述的系統(tǒng),其特征在于所述存儲(chǔ)單元存儲(chǔ)的字母索引表中記錄的單詞索引信息包括單詞地址,該單詞地址是該索引項(xiàng)對(duì)應(yīng)字母序列所構(gòu)成單詞的地址,或者是以該字母序列為首的單詞中排序第一的單詞的地址;所述單詞查詢單元將索引項(xiàng)查詢單元輸出的索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列比對(duì),如果該索引項(xiàng)對(duì)應(yīng)的字母序列與輸入字母序列相同,則根據(jù)該索引項(xiàng)記錄的單詞地址獲取對(duì)應(yīng)單詞的數(shù)據(jù);否則,以該索引項(xiàng)中記錄的單詞地址為起始地址,在詞典數(shù)據(jù)庫(kù)中向后逐一查找相應(yīng)的單詞數(shù)據(jù)并進(jìn)行對(duì)比,以獲取與輸入字母序列相同或最接近的單詞的數(shù)據(jù)。
全文摘要
一種利用字母索引表查詢電子詞典單詞的系統(tǒng)及方法,該系統(tǒng)包括單詞輸入單元、緩存單元、存儲(chǔ)了詞典數(shù)據(jù)庫(kù)的存儲(chǔ)單元、索引項(xiàng)查詢單元、單詞查詢單元和顯示單元,先創(chuàng)建一樹狀字母索引表,樹中每一節(jié)點(diǎn)為一索引項(xiàng),每一索引項(xiàng)對(duì)應(yīng)于一字母和一字母序列且記錄有單詞索引信息,非底層的索引項(xiàng)記錄有下層索引項(xiàng)首地址;每一索引項(xiàng)對(duì)應(yīng)字母序列為首的單詞數(shù)大于設(shè)定值時(shí),建立其下層索引項(xiàng);依次讀取輸入字母序列中的一個(gè)字母,在字母索引表逐層查詢,獲取該輸入字母序列對(duì)應(yīng)的索引項(xiàng),或者與前面部分字母序列對(duì)應(yīng)的底層索引項(xiàng);然后再根據(jù)獲取的索引項(xiàng)中的單詞索引信息從詞典數(shù)據(jù)庫(kù)中獲取查詢結(jié)果并顯示。本發(fā)明可提高單詞的查詢速度。
文檔編號(hào)G06F17/30GK101082918SQ20061008333
公開日2007年12月5日 申請(qǐng)日期2006年6月2日 優(yōu)先權(quán)日2006年6月2日
發(fā)明者張后鼎 申請(qǐng)人:凌陽(yáng)科技股份有限公司, 北京北陽(yáng)電子技術(shù)有限公司