两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

詞庫模糊查詢方法及詞庫模糊查詢系統(tǒng)的制作方法

文檔序號:6612767閱讀:306來源:國知局

專利名稱::詞庫模糊查詢方法及詞庫模糊查詢系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及詞庫查詢技術(shù),特別是涉及詞庫查詢方法及詞庫查詢系統(tǒng)。技術(shù)背景目前,信息檢索已經(jīng)發(fā)展到網(wǎng)絡(luò)化和智能化的階段。信息檢索的對象從相對封閉、穩(wěn)定一致、由獨立數(shù)據(jù)庫集中管理的信息內(nèi)容擴展到開放、動態(tài)、更新更快、分布廣泛、管理松散的Web內(nèi)容;信息檢索的用戶也由原來的情報專業(yè)人員擴展到包括商務(wù)人員、管理人員、教師學(xué)生、各專業(yè)人士等在內(nèi)的普通大眾,他們對信息檢索從結(jié)果到方式提出了更高、更多樣化的要求。適應(yīng)網(wǎng)絡(luò)化、智能化以及個性化的需要是目前信息檢索技術(shù)發(fā)展的新趨勢。對于大量數(shù)據(jù)的存儲和檢索,目前通常采用索引結(jié)構(gòu)來實現(xiàn),一般常用的索引結(jié)構(gòu)包括順序索引、散列(Hash)索引和分級索引。順序索引是早期經(jīng)常采用的一種靜態(tài)的索引結(jié)構(gòu),搜索數(shù)據(jù)時是按順序搜索或者折半搜索,其優(yōu)點是索引結(jié)構(gòu)簡單,占用空間小,但是順序索引查詢速度慢,且每增加一個新詞都需要重新排序,插入或刪除數(shù)據(jù)時效低。后來相關(guān)研究人員提出一種散列(Hash)索引,散列(Hash)索引是在表項的存儲位置與它的關(guān)鍵碼之間建立一個確定的對應(yīng)函數(shù)關(guān)系,使每個關(guān)鍵碼與結(jié)構(gòu)中的一個存儲位置相對應(yīng)。搜索時只需要對表項的關(guān)鍵碼進行函數(shù)計算,求得的函數(shù)值即是表項的存儲位置。避免了多次關(guān)鍵碼的比較,因此搜索速度比較快。但是在數(shù)據(jù)量比較大時,要生成一個完美的Hash函M^列表是很費時間的,并且會造成嚴(yán)重的空間浪費。分級索引是現(xiàn)在較為常用的搜索方法,它是將詞分成若干部分,為每一部分分別建立索引,Trie索引樹法是典型的分級搜索方法,它來自英文單詞"retrieval"的縮寫,Trie索引樹法可以建立有效的數(shù)據(jù);險索組織結(jié)構(gòu),雖然其結(jié)構(gòu)較為復(fù)雜,但是好的Trie索引樹法用在合適的環(huán)境下可以具有很高的查詢效率。國家專利局專利號為200510130690.3的發(fā)明專利^Hf了一種完美雙數(shù)組Trie樹詞典管理與檢索方法,它是將Trie樹轉(zhuǎn)換成兩個線性數(shù)組表示,并在構(gòu)造過程中提出了一種優(yōu)化策略。請參見圖1,其為現(xiàn)有的雙數(shù)組Trie樹的結(jié)構(gòu)示意圖。雙數(shù)組Trie樹是由兩個整數(shù)數(shù)組構(gòu)成,一個是基值數(shù)組base[],另一個是校驗值數(shù)組check[]。base[]數(shù)組中的每一個元素相當(dāng)于Trie樹的一個節(jié)點,其值做狀態(tài)轉(zhuǎn)移的基值,圖1中base[]數(shù)組的字母S、表示一個詞的第一個字,字母A、B表示以字母S作為首字的詞的第二個字,字母C、D、E表示、以字母S作為首字、字母A作為第二個字的詞的第三個字,字母F表示以字母S作為首字、字母B作為第二個字的詞的第三個字。check[]數(shù)組與base[]數(shù)組——對應(yīng),check值相當(dāng)于校驗值,用于檢查該狀態(tài)是否存在,即表示對應(yīng)狀態(tài)的前一狀態(tài),圖1中base[]數(shù)組的字母A、B對應(yīng)于check[]數(shù)組中的字母S,說明字母A所在的詞的前一字母為S,字母B所在的詞的前一字母為S。對于從狀態(tài)i到狀態(tài)t的一個轉(zhuǎn)移,必須滿足如下兩個條件1.base[i]+c=t2.check[t;|=i其中c是輸入變量。因為數(shù)組中的狀態(tài)標(biāo)志是預(yù)先進行編碼的,有其各自的序列號,因此,只需按照狀態(tài)標(biāo)志進行狀態(tài)轉(zhuǎn)移即可完成詞語的查詢。并且,該專利還提出在構(gòu)建數(shù)組時優(yōu)先處理分支較多的節(jié)點,有利于減少沖突,避免數(shù)組增長過大,減少數(shù)據(jù)稀疏。由此可以看出,運用雙數(shù)組Trie樹進行搜索對于一個詞的查詢時間只與它的長度有關(guān),與數(shù)據(jù)庫中數(shù)據(jù)量的大小無關(guān),因此其查詢速度是非常快的。但是它存在著以下的缺陷由于雙數(shù)組Trie樹搜索樹只能根據(jù)輸入狀態(tài)判斷是否為下個狀態(tài),而無法預(yù)測潛在的下個狀態(tài),因此無法實現(xiàn)模糊查詢功能,也就是說其只能判斷字母A是否是詞或詞的前面一部分,而無法給出以字母A為關(guān)鍵字得到的一系列相關(guān)的詞,例如在google中輸入"蘋果"就會出現(xiàn)"蘋果網(wǎng)"、"蘋果電腦"、"蘋果手機"等等的下拉列表,而雙數(shù)組Trie樹搜索樹卻無法實現(xiàn)這個功能,這在搜索技術(shù)日趨完善的今天是一個缺乏竟?fàn)幜Φ娜毕?。為此,現(xiàn)有技術(shù)提出了模糊查詢這個概念,也就是說,通過"蘋果"能模糊查詢到"蘋果網(wǎng)"、"蘋果電腦"、"蘋果手機"等等。這也是現(xiàn)有的百度、google等搜索引擎已實現(xiàn)的一個技術(shù),以此來方便用戶的使用?,F(xiàn)有實現(xiàn)模糊查詢功能的一種常見做法是構(gòu)建一個小型的詞庫的搜索引擎應(yīng)用,并利用倒排表來進行查詢。具體包括(1)建立搜索詞庫引擎的索引結(jié)構(gòu),所述搜索詞庫引擎的索引結(jié)構(gòu)是指對詞庫中的每個詞里面的每個字都建立索引,并且保存字所在詞中的位置信息。請參閱圖2,其為詞庫搜索引擎的索引結(jié)構(gòu)的一示例圖。(2)查詢,找到索引結(jié)構(gòu)中要求查詢的查詢語的每個字的倒排表,然后再對該些倒排表做"和"運算,得到的即為包含該查詢語的模糊查詢。舉個例子來說,如果關(guān)鍵詞為"ab",則去索引結(jié)構(gòu)中查詢第一個位置為"a,,和第二個位置為"b"的倒排表,得到二個有序列表,然后對這兩個有序列表做帶有位置比較的"和"操作,得到的即為以"ab,,開頭的所有詞,其為"ab"模糊查詢所得到的詞。上述查詢方法雖然能查詢出"ab"相關(guān)的詞,但是存在著以下的缺陷對于有一定規(guī)模的詞庫,用這種技術(shù)實現(xiàn)模糊查詢時,序列表進行"和"運算的操作將是查詢速度的瓶頸,其查詢速度非常慢。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種詞庫模糊查詢方法及詞庫模糊查詢系統(tǒng),以解決現(xiàn)有的模糊查詢速度慢的技術(shù)問題。為了達到上述目的,本發(fā)明提供了公開了一種詞庫模糊查詢方法,包括(l)建立詞條數(shù)據(jù)結(jié)構(gòu)(1-1)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(l-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的正向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng);(2)當(dāng)接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在所述詞條存儲單元找到對應(yīng)的所有詞。步驟(l-2)為建立一slot數(shù)組,slot數(shù)組的每一數(shù)組單元表示一詞綴,所述每一數(shù)組單詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息進一步為存儲每一詞綴在詞條存儲單元中本詞綴開頭的第一個詞的偏移地址信息和以本詞綴開頭的最后一個詞的偏移地址信息,所述偏移地址信息為所述詞基于詞條存儲單元首地址的偏移地址。在步驟(l)中還包括(l-3)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再將詞庫中的詞反轉(zhuǎn)后用Trie樹結(jié)構(gòu)表示,隨后構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,然后存儲每一反轉(zhuǎn)后的反轉(zhuǎn)詞綴在詞條存儲單元中以本詞綴結(jié)尾的所有詞的存儲地址信息,反轉(zhuǎn)詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元--對應(yīng)。本發(fā)明還包括當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。建立一第二slot數(shù)組,第二slot數(shù)組的每一數(shù)組單元表示一反轉(zhuǎn)后的反轉(zhuǎn)詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息、該反轉(zhuǎn)詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。一種詞庫模糊查詢系統(tǒng),它包括一詞條數(shù)據(jù)結(jié)構(gòu),包括詞條存儲單元和正向詞條索引結(jié)構(gòu),一詞條存儲單元,用于以詞條為單元順序存儲詞庫中的所有詞條;一正向詞條索引結(jié)構(gòu),其包括一編碼映射單元用于存儲所有詞條的所有字與唯一編碼的——對應(yīng);一slot數(shù)組,slot數(shù)組的每一數(shù)組單元表示一詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息、該詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值;一查詢處理器,進一步包括正向詞條查詢單元,用于接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在所述詞條存儲單元找到對應(yīng)的所有詞。詞條數(shù)據(jù)結(jié)構(gòu)還包括一反向詞條索引結(jié)構(gòu)包括一第二slot數(shù)組,第二slot數(shù)組的每一數(shù)組單元表示一反轉(zhuǎn)后的反轉(zhuǎn)詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息、該反轉(zhuǎn)詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。查詢處理器,進一步還包括反向詞條查詢單元,當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。一種詞庫模糊查詢方法,包括(l)建立詞條數(shù)據(jù)結(jié)構(gòu)(l-l)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(l-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙lt組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng);(2)當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。與現(xiàn)有技術(shù)相比,本發(fā)明具有以下的優(yōu)點首先,本發(fā)明的查詢系統(tǒng)中利用了雙數(shù)組Trie技術(shù)查詢速度快的優(yōu)勢來實現(xiàn)模糊查詢的功能,克服了現(xiàn)有技術(shù)查詢速度慢的缺陷。接著,本發(fā)明提供的正向詞條索引結(jié)構(gòu)中,僅存儲以該詞綴開始的第一個詞條的偏移地址和最后一個詞條的偏移地址,大量減少了存儲空間。最后,本發(fā)明還提供反向詞條索引功能,使本發(fā)明方案的查詢更全面。圖1為現(xiàn)有的雙數(shù)組Trie樹的結(jié)構(gòu)示意圖;圖2為現(xiàn)有的為詞庫搜索引擎的索引結(jié)構(gòu)的一示例圖;圖3為一種Trie樹的結(jié)構(gòu)示例圖;圖4為本發(fā)明一種詞庫模糊查詢方法的流程圖;圖5為詞條數(shù)據(jù)結(jié)構(gòu)示意圖;圖6為本發(fā)明的正向詞條索引結(jié)構(gòu)的一示例圖;圖7為本發(fā)明的反向詞條索引結(jié)構(gòu)的一示例圖。具體實施方式以下結(jié)合附圖,具體說明本發(fā)明。,由于本發(fā)明人吸取了雙數(shù)組Trie的精華后進行的發(fā)明創(chuàng)造,因此在具體介紹本發(fā)明的詞庫模糊查詢之前,先介紹一下雙數(shù)組Trie。如果要進行雙數(shù)組Trie的查詢,首先需要構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校纟企值數(shù)組。假定詞庫中只有"啊,阿根廷,阿膠,阿拉伯,阿拉伯人,埃及,,這幾個詞。首先,對詞庫中所有出現(xiàn)的IO個漢字進行編碼啊-1,阿-2,埃-3,根-4,膠-5,拉-6,及-7,廷-8,伯-9,人-10。這種編碼并非是唯一的,只需要將詞庫中的所有字——對應(yīng)一唯一編碼即可,可以是順序編碼,也可以是釆用計算機中本身就已存在的每個漢字的對應(yīng)編碼。如果是前者,需要重新創(chuàng)建一編碼映射單元,用于存儲漢字和編碼的一一對應(yīng)關(guān)系,如果是采用后者編碼方式,即可省略該編碼映射單元,節(jié)省存儲空間。然后,將詞庫用Trie結(jié)構(gòu)進行表示,如圖3所示。隨后,一構(gòu)建雙數(shù)組Trie,確定基值數(shù)組base[]和對應(yīng)的校驗值數(shù)組check[]。對于每一個漢字,需要確定一個base值,使得對于所有以該漢字開頭的詞,在雙數(shù)組中都能放下。例如,現(xiàn)在要確定"阿"字的base值,假設(shè)以"阿"開頭的詞的第二個字序列碼依次為al,a2,a3......an,我們必須找到一個值i,使得base[i+a1],check[i+a1],base[i+a2],check[i+a2]......base[i+an],check[i+an]均為0。一旦找到了這個i,"阿"的base值就確定為i。用這種方法構(gòu)建雙數(shù)組Trie(Doublearraytrie),經(jīng)過若干次遍歷,將所有的詞語放入雙數(shù)組中,然后還要遍歷一遍詞表,修改base值。假設(shè)用負(fù)的base值表示該位置為詞語。如果狀態(tài)i對應(yīng)某一個詞,而且Base[i]=0,那么令Base[i]=(-l)*i,如果Base[i〗的值不是0,那么令Base[i]氣-lfBase[i]。得到雙數(shù)組如下表所示。需要說明的是,表l僅一種雙數(shù)組的示例。表1<table>tableseeoriginaldocumentpage11</column></row><table>用上述方法生成的雙數(shù)組,將"啊","阿","埃","阿根","阿拉","阿膠","埃及","阿拉伯","阿拉伯人","阿根廷"這些詞綴均視為狀態(tài)。詞綴不同于傳統(tǒng)意義的詞綴概念,它可以是字"啊","阿","埃",也可以是詞"阿膠","埃及","阿拉伯","阿拉伯人","阿根廷",也可以僅僅是前綴或后綴,如"阿根"、"阿拉"。每個狀態(tài)均對應(yīng)于數(shù)組的一個下標(biāo)。例如設(shè)"阿根"的下標(biāo)為i=8,那么check[i]的內(nèi)容是"阿"的下標(biāo),而base[i]是"阿根廷"的下標(biāo)的基值。"廷"的序列碼為x=8,那么"阿根廷"的下標(biāo)為base[i]+x=base[8]+8=12。也就是說,每個詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元--對應(yīng)。最后,具體查詢過程為Do油learraytrie的查詢過程其實就是一個DFA的狀態(tài)轉(zhuǎn)移過程,在Doublearraytrie中實現(xiàn)起來比較簡單只需按照狀態(tài)標(biāo)志進行狀態(tài)轉(zhuǎn)移即可.例如查詢"阿根廷",先根據(jù)"阿"的序列碼b=2,找到狀態(tài)"阿,,的下標(biāo)2,再根據(jù)"根"的序列碼d=4找到"阿根"的下標(biāo)base[b]+d=8,同時根據(jù)check[base[b]+d]=b,表明"阿根"是某個詞的一部分,可以繼續(xù)查詢。然后再找到狀態(tài)"阿根廷"。它的下標(biāo)為y-12,此時base[y]O,check[y]=base[b]+d=8,表明"阿根廷"在詞表中,查詢完畢。查詢過程中我們可以看到,對于一個詞語的查詢時間是只與它的長度相關(guān)的,也就是說它的時間復(fù)雜度為O(l),因此其速度是極快的.本申請人經(jīng)過長期思考,可以利用該雙數(shù)組Trie查詢速度快的優(yōu)勢,并能實現(xiàn)模糊查詢的功能。請參閱圖4,其為本發(fā)明一種詞庫模糊查詢方法的流程圖。它包括S110:建立詞條數(shù)據(jù)結(jié)構(gòu)Sll:將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;S12:構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的正向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng)。請參閱圖5,其為詞條數(shù)據(jù)結(jié)構(gòu)示意圖。它包括詞庫頭11和詞庫內(nèi)容12組成。其中,詞庫頭是詞條的索引信息,而詞庫內(nèi)容保存有詞條的詳細(xì)信息。詞庫內(nèi)容即為詞條存儲單元,其存儲單元中每個詞條可以按關(guān)鍵字從小到大排序。這樣,在正向查詢時,只需要給出滿足條件的第一個詞條的存儲地址信息和最后一個詞條的存儲地址信息,即可獲得滿足條件的所有詞,從而節(jié)省了詞庫的索引空間。由于詞條是按關(guān)鍵字從小大到排序的,因此以"蘋果,,開始的關(guān)鍵字如"蘋果","蘋果汁,,,"蘋果樹"在詞庫內(nèi)容中的位置都是緊挨著的,這樣只需給出"蘋果"和"蘋果樹"的存儲地址信息,就可獲取"蘋果","蘋果汁","蘋果樹"的詳細(xì)信息。詞庫頭11至少包括正向詞條索引結(jié)構(gòu)111。請參閱圖6,其為本發(fā)明的正向詞條索引結(jié)構(gòu)的一示例圖。它包括一編碼映射單元,對詞庫中所有出現(xiàn)的每個字進行編碼。這種編碼并非是唯一的,只需要將詞庫中的所有字--對應(yīng)一唯一編碼即可,可以是順序編碼,也可以是采用計算機中本身就已存在的每個漢字的對應(yīng)編碼。如果是前者,需要重新創(chuàng)建一編碼映射單元,用于存儲漢字和編碼的——對應(yīng)關(guān)系,如果是采用后者編碼方式,即可省略該編碼映射單元,節(jié)省存儲空間。它包括一slot數(shù)組,slot數(shù)組的每一數(shù)組單元表示一詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息、該詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息進一步為存儲每一詞綴在詞條存儲單元中本詞綴開頭的第一個詞的偏移地址信息startoffset和以本詞綴開頭的最后一個詞的偏移地址信息endoffset,所述偏移地址信息為所述詞基于詞條存儲單元首地址的偏移地址。還是以圖3的詞庫為例,則生成的正向詞條索引結(jié)構(gòu)可以為表2。表2<table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage14</column></row><table>構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的正向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng)。而上述表2僅為正向詞條索引結(jié)構(gòu)的一示例圖。構(gòu)建正向詞條索引結(jié)構(gòu)的步驟具體可以如下首先,對查詢的詞的關(guān)鍵字進行編碼,每個字(中文,英文)都對應(yīng)一個唯一的編碼,設(shè)編碼后為a0,al,...,aN-l。接著,循環(huán)依次遍歷每個編碼,如果是第一個字,同時slots[aO]的check值為-1,則表示該字存在,保存slots[a0]的base值和a0值分別為preBase和preldx,繼續(xù),否則退出。(注:如果slots[i].check=-2,表示i這個位置沒有被利用;如果slots[i].check--l,表示是首字;如果slots[i].checlO-0,表述i這個位置的字的前個位置是slots[i].check表示的位置)如果不是首字,i殳該字的編碼為al,求出下個位置pos-al+abs(preBase)。如果slots[pos].check等于preldx,表示找到以ala2......al開始的串,保存slots[pos]的base值和pos值分別為preBase和preldx,繼續(xù),否則退出。隨后,獲取以編碼為a0,al,...,aN-l所表示的關(guān)鍵字開始的所有詞條的偏移量范圍。如果處理完最后一個字,獲取slots[preldx].StartOffset和slots[preldx].endOffset,這兩個值表示了以編碼為a0,al,...,aN-1所表示的關(guān)鍵字開始的所有詞條的偏移量的范圍。本發(fā)明可以通過偏移量idx定位到詞條詳細(xì)信息位置的算法得到詞條詳細(xì)信息,此時idx的值為slots[preIdx].StartOffset<=idx<=slots[preIdx].endOffset.如果中途退出,沒有處理完最后一個字,則表明沒有以al,a2,...,aN所表示的關(guān)鍵字開始的詞條。 S120:當(dāng)接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在所述詞條存儲單元找到對應(yīng)的所有詞。還是以表2為例,例如查詢"阿根",先根據(jù)"阿"的序列碼b-2,找到狀態(tài)"阿"的下標(biāo)2,再根據(jù)"根"的序列碼d=4找到"阿根"的下標(biāo)base[b]+d=8,找到slot[8]對應(yīng)的"startoffset"和"endoffset",查詢詞條存儲單元,即可獲得對應(yīng)的詞,該些詞即為"阿根"的模糊查詢結(jié)果。本發(fā)明除了提供正向查詢之外,還提供反向查詢。在詞庫頭中還包括反向詞條索引結(jié)構(gòu)。反向詞條索引結(jié)構(gòu)包括一第二slot數(shù)組,第二slot數(shù)組的每一數(shù)組單元表示一反轉(zhuǎn)后的反轉(zhuǎn)詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息、該反轉(zhuǎn)詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。請參閱圖7,其為反向詞條索引結(jié)構(gòu)的一示例圖。構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼(可以利用正向詞條索引結(jié)構(gòu)的編碼方法),再將詞庫中的詞反轉(zhuǎn)后用Trie樹結(jié)構(gòu)表示,隨后構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,然后存儲每一反轉(zhuǎn)后的反轉(zhuǎn)詞綴在詞條存儲單元中以本詞綴結(jié)尾的所有詞的存儲地址信息,反轉(zhuǎn)詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元一一對應(yīng)。當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。事實上,反向查詢和正向查詢類似,唯一的區(qū)別是由于含有共同結(jié)束部分的關(guān)鍵字的在詞庫存儲單元中的偏移量并不有序,因此不能用startOffet, endOffset來表示一段范圍,而必須窮舉每個詞綴在詞庫存儲單元中的偏移量,因此結(jié)構(gòu)稍微有些改變。此結(jié)構(gòu)也是對Doublearraytrie索51結(jié)構(gòu)的改進,在base和check的基礎(chǔ)上增加了Offset和Offset所指向的偏移量列表。其構(gòu)建、查詢過程和標(biāo)準(zhǔn)的Doublearraytrie雷同,唯一的區(qū)別是在構(gòu)建時增加了對Offset和Offset所指向的偏移量列表的賦值,查詢過程中,在完成標(biāo)準(zhǔn)的Doublearraytrie查詢以后,獲取當(dāng)前slot的Offset所指的偏移量列表(從小到大排列)為Doublearraytrie的最終查詢結(jié)果。如假設(shè)以"手機"結(jié)束的關(guān)鍵字有"手機","mp3手機","蘋果手機","諾基亞手機,,。由于含有相同結(jié)束成分的關(guān)鍵字在puredata中的位置并不連續(xù),因此其在puredata的偏移量并不連續(xù),假設(shè)為2,6,11,78。在反向詞條索引結(jié)構(gòu),"手機"的"手"字所在的slot的offset所指的偏移量列表的個數(shù)N為4,偏移量分別為2,6,11,78。另外,還需要說明的是,在構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組時,是反轉(zhuǎn)構(gòu)建的"機手"、"機手3pm"、"機手果蘋"、"機手亞基諾"這樣來用Trie樹結(jié)構(gòu)表示,進而確定基值數(shù)組和校驗值數(shù)組。因此,查詢查詢語的時,先要將查詢語反轉(zhuǎn)后,再確定查詢語中每個字對應(yīng)的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。通過上述的方式,查詢即可以是正向查詢,也可以是反向查詢,使得查詢更為全面,查詢效果更好。這種既可以正向查詢,也可以是反向查詢的方式我們稱之為雙向查詢,在雙向查詢時,可以先利用正向查詢獲得偏移量范圍,再利用反向查詢獲得對應(yīng)的偏移量列表,再根據(jù)該些偏移量信息到詞庫存儲單元中找到每一對應(yīng)的詞,所述詞即是查詢語模糊查詢到的詞。需要說明的是,由于本發(fā)明對詞(詞綴)的編碼是唯一的,因此本發(fā)明的搜索結(jié)果具有唯一性,而由于Hash算法具有一定的沖突率,通常不能保證Hash函數(shù)序列表的唯一性,因此需要有其它的措施(如開鏈、閉鏈等)來保證其搜索結(jié)果的唯一性,因此本發(fā)明的搜索方法具有更快的搜索速度。如用本發(fā)明,"蘋果"的編碼是12223,可以確定編碼為12223的只對應(yīng)關(guān)鍵字"蘋果".但用Hash算法時,"蘋果"的編碼是12223,"栗子"的編碼也可能是12223,所以這個時候得需用其它措施來保證查詢的是"蘋果,,還是"栗子",因此本發(fā)明的搜索方法更有更快的速度。本發(fā)明除了僅支持正向查詢、雙向查詢之外,還可以僅支持詞庫反向查詢。一種詞庫模糊查詢方法,包括(1)建立詞條數(shù)據(jù)結(jié)構(gòu)(1-1)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(l-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng);(2)當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。反向查詢上述已公開,在此就不再贅述。以上公開的僅為本發(fā)明的幾個具體實施例,但本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化,都應(yīng)落在本發(fā)明的保護范圍內(nèi)。權(quán)利要求1、一種詞庫模糊查詢方法,其特征在于,包括(1)建立詞條數(shù)據(jù)結(jié)構(gòu)(1-1)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(1-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的正向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元一一對應(yīng);(2)當(dāng)接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在所述詞條存儲單元找到對應(yīng)的所有詞。2、如權(quán)利要求l所述的方法,其特征在于,步驟(l-2)為建立一slot數(shù)組,slot數(shù)組的每一數(shù)組單元表示一詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息、該詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。3、如權(quán)利要求1或2所述的方法,其特征在于,存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息進一步為存儲每一詞綴在詞條存儲單元中本詞綴開頭的第一個詞的偏移地址信息和以本詞綴開頭的最后一個詞的偏移地址信息,所述偏移地址信息為所述詞基于詞條存儲單元首地址的偏移地址。4、如權(quán)利要求l所述的方法,其特征在于,在步驟(l)中還包括(l-3)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有河條的所有字一一對應(yīng)一唯一編碼,再將詞庫中的詞反轉(zhuǎn)后用Trie樹結(jié)構(gòu)表示,隨后構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,然后存儲每一反轉(zhuǎn)后的反轉(zhuǎn)詞綴在詞條存儲單元中以本詞綴結(jié)尾的所有詞的存儲地址信息,反轉(zhuǎn)詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng)。5、如權(quán)利要求4所述的方法,其特征在于,還包括當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息,在所述詞條存儲單元找到所有詞。6、如權(quán)利要求5所述的方法,其特征在于,建立一第二slot數(shù)組,第二slot數(shù)組的每一數(shù)組單元表示一反轉(zhuǎn)后的反轉(zhuǎn)詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息、該反轉(zhuǎn)詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。7、一種詞庫^t糊查詢系統(tǒng),它包括一詞條數(shù)據(jù)結(jié)構(gòu),包括詞條存儲單元和正向詞條索引結(jié)構(gòu),一詞條存儲單元,用于以詞條為單元順序存儲詞庫中的所有詞條;一正向詞條索引結(jié)構(gòu),其包括一編碼映射單元用于存儲所有詞條的所有字與唯一編碼的——對應(yīng);一slot數(shù)組,slot數(shù)組的每一數(shù)組單元表示一詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息、該詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值;一查詢處理器,進一步包括正向詞條查詢單元,用于接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在所述詞條存儲單元找到對應(yīng)的所有詞。8、如權(quán)利要求7所述的系統(tǒng),其特征在于,詞條數(shù)據(jù)結(jié)構(gòu)還包括一反向詞條索引結(jié)構(gòu)包括一第二slot數(shù)組,第二slot數(shù)組的每一數(shù)組單元表示一反轉(zhuǎn)后的反轉(zhuǎn)詞綴,所述每一數(shù)組單元中存儲該詞綴在詞條存儲單元中本詞綴結(jié)尾的所有詞的存儲地址信息、該反轉(zhuǎn)詞綴對應(yīng)的基值數(shù)組數(shù)值、校驗值數(shù)組數(shù)值。9、如權(quán)利要求8所述的系統(tǒng),其特征在于,查詢處理器,進一步還包括反向詞條查詢單元,當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到址信息,在所述詞條存儲單元找到所有詞。10、一種詞庫模糊查詢方法,其特征在于,包括(1)建立詞條數(shù)據(jù)結(jié)構(gòu)(1-1)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(l-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的反向詞條索引結(jié)構(gòu)先將所有詞條的所有字一一對應(yīng)一唯一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元——對應(yīng);(2)當(dāng)接收到查詢語時,反轉(zhuǎn)查詢語,后獲得反轉(zhuǎn)后查詢語中各個字的編碼,查找反向詞條索引結(jié)構(gòu)獲得對應(yīng)的基值數(shù)組單元,后找到該基值數(shù)組單述詞條存儲單元找到所有詞。全文摘要一種詞庫模糊查詢方法,包括(1)建立詞條數(shù)據(jù)結(jié)構(gòu)(1-1)將詞庫中的所有詞條順序存儲在詞條數(shù)據(jù)結(jié)構(gòu)的詞條存儲單元;(1-2)構(gòu)建詞條數(shù)據(jù)結(jié)構(gòu)的正向詞條索引結(jié)構(gòu)先將所有詞條的所有字對應(yīng)一編碼,再構(gòu)建雙數(shù)組Trie,確定基值數(shù)組和對應(yīng)的校驗值數(shù)組,后存儲每一詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,詞綴和基值數(shù)組、校驗值數(shù)組的一數(shù)組單元對應(yīng);(2)當(dāng)接收到查詢語時,先獲得查詢語中所有字的編碼,再利用雙數(shù)組Trie找到該查詢語所在的基值數(shù)組單元,后找到該基值數(shù)組單元對應(yīng)的詞綴在詞條存儲單元中本詞綴開頭的所有詞的存儲地址信息,在詞條存儲單元找到對應(yīng)的所有詞。本方法的查詢速度非??臁N臋n編號G06F17/30GK101398830SQ20071016231公開日2009年4月1日申請日期2007年9月27日優(yōu)先權(quán)日2007年9月27日發(fā)明者孫海濤,施行向申請人:阿里巴巴集團控股有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
喜德县| 囊谦县| 丹江口市| 丰镇市| 永登县| 深州市| 勃利县| 达日县| 奉化市| 河西区| 木兰县| 清河县| 周宁县| 康平县| 巴林左旗| 渝北区| 兴隆县| 永顺县| 临沂市| 海丰县| 绥芬河市| 龙海市| 黄山市| 双柏县| 塘沽区| 玉田县| 清徐县| 大余县| 江永县| 安多县| 吴桥县| 鄂尔多斯市| 广南县| 莫力| 宁海县| 万荣县| 平原县| 石门县| 昭平县| 新密市| 达尔|