欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法與流程

文檔序號:12008860閱讀:383來源:國知局
一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法與流程
本發(fā)明涉及一種詞典檢索方法,尤其涉及一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法。

背景技術(shù):
在信息檢索和自然語言處理領(lǐng)域,特別是基于詞典的技術(shù)應(yīng)用中,詞典的規(guī)模一般都非常大,擁有成千上萬甚至上億條記錄,尤其是搜索引擎中倒排索引詞的規(guī)模最為龐大。對海量數(shù)據(jù)詞典的查找,當(dāng)前通常采用索引的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。常用的索引結(jié)構(gòu)包括線性索引表、倒排表、散列(hash)表和搜索樹等。對于一個記錄的關(guān)鍵字(key)長度為n,詞典的規(guī)模為N的情況下(其中N>>n)各索引結(jié)構(gòu)檢索的時間復(fù)雜度分析如下:線性索引結(jié)構(gòu)或倒排表一般采用順序結(jié)構(gòu)存儲詞典中的記錄,對詞典中記錄的查找一般采用順序遍歷每一個記錄,因此,每一次查找的時間復(fù)雜度為O(N)×l(n)(其中l(wèi)(n)為兩條記錄的關(guān)鍵字因比較所花費的時間)。此種方法的改進是讓詞典的每一條記錄按關(guān)鍵字(key)有序,在檢索的時候用折半查找,其時間復(fù)雜度為O(logN)×l(n)。在基于詞典的自然語言處理應(yīng)用,如基于詞典的中文分詞、基于詞典的字音轉(zhuǎn)換(漢字轉(zhuǎn)換成拼音)、基于詞典的命名實體識別、基于詞典的標(biāo)注(包括詞性標(biāo)注和語義標(biāo)注等),其中的核心部分是要進行大量的查詢操作。為了滿足此類應(yīng)用的要求,就需要一種高效的詞典檢索方法?,F(xiàn)今也有基于二維數(shù)組的Trie樹的詞典查詢方法,但是基于二維數(shù)組的這種查詢方法在Trie樹的構(gòu)建過程中會存在因插入新狀態(tài)而引起的沖突,導(dǎo)致要移動大量存在沖突的數(shù)據(jù)問題。

技術(shù)實現(xiàn)要素:
本發(fā)明旨在解決上述缺陷之一。因此,本發(fā)明提供一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法,通過生成一維線性空間的Trie樹詞典數(shù)據(jù);根據(jù)用戶輸入確定待查詢詞條key;根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢。在一維線性空間下構(gòu)建Trie樹的詞典數(shù)據(jù)下,提高了詞典加載和檢索速度,并且能夠快速檢索到詞條的所有前綴詞,另外,基于一維線性空間實現(xiàn)Trie樹的詞典檢索能夠解決傳統(tǒng)Trie樹詞典數(shù)據(jù)檢索在Tire樹的構(gòu)建過程中存在的因插入新狀態(tài)而引起的沖突問題,并能避免該沖突導(dǎo)致的大量詞典數(shù)據(jù)的移動問題。為此,本發(fā)明公開了一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法,該方法包括以下步驟:生成一維線性空間Trie樹的詞典數(shù)據(jù);根據(jù)用戶輸入確定待查詢詞條key;根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢。優(yōu)選地,詞典數(shù)據(jù)的key轉(zhuǎn)化為節(jié)點后存儲在一維數(shù)組中,所述一維數(shù)組的值用來標(biāo)識base值是否唯一。優(yōu)選地,所述一維線性空間的Trie樹中將所有終端結(jié)點變?yōu)榉墙K端結(jié)點,在所述終端結(jié)點后面增加一個葉子節(jié)點,并將葉子節(jié)點的check值賦上其存儲位置。優(yōu)選地,所述葉子節(jié)點還包括:葉子節(jié)點的base值用以標(biāo)識其是否為終端結(jié)點。優(yōu)選地,所述查詢包括以下步驟:把當(dāng)前結(jié)點指向根節(jié)點;根據(jù)當(dāng)前輸入的字符做出狀態(tài)轉(zhuǎn)移,獲取其直接后繼狀態(tài)的位置;校驗當(dāng)前狀態(tài)的前驅(qū),確定當(dāng)前狀態(tài)由哪一狀態(tài)轉(zhuǎn)移而來;獲取詞條key對應(yīng)的value值。優(yōu)選地,所述查詢包括:詞條key的查詢可以獲得其所有前綴詞的結(jié)果。本發(fā)明提供的一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法,通過生成一維線性空間的Trie樹詞典數(shù)據(jù);根據(jù)用戶輸入確定待查詢詞條key;根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢。在一維線性空間下構(gòu)建Trie樹的詞典數(shù)據(jù)下,提高了詞典加載和檢索速度,并且能夠快速檢索到詞條的所有前綴詞。同時,在Trie樹的構(gòu)建過程中通過調(diào)整base值,使得其所有直接后繼均不會發(fā)生沖突,因此避免了數(shù)據(jù)移動或存儲空間分配的回溯問題。應(yīng)當(dāng)理解,以上總體說明和以下詳細說明都是說明性和實例性的,旨在提供對所要求的本發(fā)明的進一步說明。附圖說明圖1是本發(fā)明實施例一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法的流程圖。圖2是本發(fā)明實施例根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢的流程框架圖。具體實施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步的詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用于解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實施例提供的一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法。如圖1所示,是本發(fā)明實施例一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法的流程圖。步驟S110:生成一維線性空間Trie樹的詞典數(shù)據(jù)。獲取詞典數(shù)據(jù),要生成一維線性空間Trie樹的詞典數(shù)據(jù)包括以下具體步驟:步驟S111:將所有詞條和屬性信息以key為中心按詞典順序排序,合并擁有相同key值的values,要保證key不存在重復(fù)。遍歷_Keys和_values中存儲的元素,按詞典順序?qū)eys和_values以key為中心排序,并合并相同key的value值,將有序的key序列和value序列存儲到List<String>keys和Collection<String>attributes中;該步驟的偽代碼如下:步驟S112:定義起始狀態(tài),編號為0,其包含的信息值為[code=0,depth=0,start=0,end=N],其中N為詞典的規(guī)模,即key的數(shù)量。步驟S113:將起始狀態(tài)放入雙數(shù)組第0位置,將其base[0]=1(array[2*0]=array[0]=1),并標(biāo)識base為1的值已經(jīng)被占用(保證所有狀態(tài)的base值唯—),check[0]=0(array[2*0+1]=array[1]=0)步驟S114:以起始狀態(tài)作為當(dāng)前狀態(tài)。步驟S115:獲取當(dāng)前狀態(tài)的所有直接后繼狀態(tài)的信息,若直接后繼結(jié)點列表為空,即當(dāng)前結(jié)點為終端結(jié)點“$”,表示從起始結(jié)點到當(dāng)前結(jié)點構(gòu)成的key恰好是詞典中的一個完整詞條,將當(dāng)前結(jié)點(終端結(jié)點)的base值賦上當(dāng)前key詞典順序序號的相反數(shù),該路徑上執(zhí)行完畢;否則執(zhí)行步驟S116。該步驟的偽代碼如下:步驟S116:為當(dāng)前結(jié)點尋找一個合適的base值,使得base值唯一,且不會導(dǎo)致所有直接后繼結(jié)點與現(xiàn)有Trie樹存儲的結(jié)點沖突。依次將當(dāng)前結(jié)點的直接后繼結(jié)點插入Trie樹中,并將其check值賦上當(dāng)前結(jié)點的base值,再依次把當(dāng)前結(jié)點的直接后繼結(jié)點作為當(dāng)前結(jié)點,跳轉(zhuǎn)到步驟S115。該步驟的偽代碼如下:所述一維線性空間的Trie樹中將所有終端結(jié)點變?yōu)榉墙K端結(jié)點,在所述終端結(jié)點后面增加一個葉子節(jié)點,并將葉子節(jié)點的check值賦上其存儲位置。將所有的終端結(jié)點變?yōu)榉墙K端結(jié)點,并在其后面增加一個葉子結(jié)點,葉子結(jié)點的check值賦上自己的存儲位置,葉子結(jié)點的base值賦上從初始結(jié)點(0結(jié)點)到當(dāng)前葉子結(jié)點路徑上的輸入字符組成的完整詞條在整個有序詞條集合中位置的相反數(shù)(即葉子結(jié)點所處的key中在所有按詞典排序的詞條集中序號的相反數(shù)),因此結(jié)點的base值的符號用于標(biāo)識是否是終端結(jié)點(葉子結(jié)點,其base值小于0)。步驟S120:根據(jù)用戶輸入待查詢詞條key。Trie樹構(gòu)建好之后,接下來就是查詢用戶輸入的詞條是否存在Trie樹,即是否是從根結(jié)點到葉子結(jié)點的一條完整路徑。步驟S130:根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢。如圖2所示,是根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢的流程框架圖,具體步驟如下:步驟S131:把當(dāng)前結(jié)點指向根節(jié)點。步驟S132:根據(jù)當(dāng)前輸入的字符做出狀態(tài)轉(zhuǎn)移,獲取其直接后繼狀態(tài)的位置。步驟S133:校驗當(dāng)前狀態(tài)的前驅(qū),確定當(dāng)前狀態(tài)由哪一狀態(tài)轉(zhuǎn)移而來。步驟S134:獲取詞條key對應(yīng)的value值。在當(dāng)前狀態(tài)為s,輸入的字符為c,下一狀態(tài)為t的條件下,其本方法的查詢過程的約束條件修改為:check[base[s]+c]=base[s];base[s]+c=t;每個狀態(tài)的base[s]值唯一。若當(dāng)前狀態(tài)s可以轉(zhuǎn)移到葉子結(jié)點t中,則其約束條件為:base[s]=t;t=check[t]。base[t]<0且base[t]的值為DFA的初始結(jié)點0到當(dāng)前葉子結(jié)點經(jīng)過的字符組成的詞條在所有按詞典順序排序的詞條集中位置的相反數(shù)。本發(fā)明實施例中可以獲取詞條key的所有前綴詞,并可以將檢索到的每條結(jié)果信息保存在一個對象TrieResult中,該表存儲的變量作如下描述:Length表示當(dāng)前key的長度;Index當(dāng)前key在詞典中的存儲序號-1,即當(dāng)前key對應(yīng)屬性的存儲位置。本發(fā)明實施例一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法的查詢速度18.3MB/s。因此,本發(fā)明提供一種基于一維線性空間實現(xiàn)Trie樹的詞典檢索方法,通過生成一維線性空間的Trie樹詞典數(shù)據(jù);根據(jù)用戶輸入確定待查詢詞條key;根據(jù)詞條key的當(dāng)前狀態(tài)實現(xiàn)查詢。在一維線性空間下構(gòu)建Trie樹的詞典數(shù)據(jù)下,提高了詞典加載和檢索速度,并且能夠快速檢索到詞條的所有前綴詞,同時,在Trie樹的構(gòu)建過程中通過調(diào)整base值,使得其所有直接后繼均不會發(fā)生沖突,因此避免了數(shù)據(jù)移動或存儲空間分配的回溯問題。
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大庆市| 晋宁县| 遵义县| 五峰| 三河市| 佛坪县| 樟树市| 锦州市| 望奎县| 启东市| 茌平县| 大理市| 普宁市| 沭阳县| 渭南市| 宝兴县| 江都市| 张家港市| 东丽区| 庐江县| 晋宁县| 天门市| 紫金县| 南丹县| 山东| 宜兰市| 元谋县| 荥阳市| 山东省| 耿马| 宜宾市| 湘阴县| 宁陵县| 循化| 佛冈县| 洛川县| 师宗县| 津市市| 绥中县| 兴隆县| 德州市|