專利名稱:通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法及搜索引擎分詞裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域,特別涉及一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法及搜索引擎分詞裝置。
背景技術(shù):
分詞是搜索引擎最基本的功能,是搜索引擎根據(jù)用戶提交的關(guān)鍵詞串用各種方法進(jìn)行匹配的一種技術(shù)?,F(xiàn)有搜索引擎為了達(dá)到較好的分詞效果,分詞詞典容量一般都比較大,并且采用明文分詞詞典,通過線上計(jì)算的方式生成內(nèi)部的數(shù)據(jù)結(jié)構(gòu)?,F(xiàn)有搜索引擎一般采用線性索引表、倒排表、散列(hash)和搜索樹等數(shù)據(jù)結(jié)構(gòu)。線性索引表和倒排表都是靜態(tài)索引結(jié)構(gòu)。散列(Hash)是通過特定的散列函數(shù)和與之配套的處理沖突方法,將字符映射到某個(gè)存儲(chǔ)位置,在搜索時(shí)只要對(duì)字符進(jìn)行Hash計(jì)算就能得到存儲(chǔ)位置?,F(xiàn)有技術(shù)的缺點(diǎn)如下(I)、靜態(tài)搜索搜索時(shí)間與分詞詞典的大小相關(guān),當(dāng)詞典容量大的時(shí)候響應(yīng)時(shí)間長,難以達(dá)到0(1)的量級(jí),并且靜態(tài)搜索在詞典變更時(shí)需要做的改動(dòng)較大。(2)、散列搜索速度快,時(shí)間復(fù)雜度能夠優(yōu)化到0(1),但是空間利用率低,內(nèi)存占用大,并且查詢時(shí)間也依賴于Hash沖突處理機(jī)制的設(shè)計(jì)。(3)、分詞詞典大導(dǎo)致載入時(shí)間長,使得搜索產(chǎn)品應(yīng)對(duì)故障的響應(yīng)不夠敏捷,容易造成流量的大規(guī)模損失,同時(shí)模塊啟動(dòng)時(shí)間長也會(huì)影響到日常產(chǎn)品運(yùn)維的效率。(4)、載入過程中大量的計(jì)算和頻繁的IO操作,容易給線上服務(wù)的穩(wěn)定性造成沖擊。
發(fā)明內(nèi)容
本發(fā)明的目的旨在至少解決上述技術(shù)缺陷之一。為此,本發(fā)明的目的在于提出一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,通過優(yōu)先考慮Trie樹子節(jié)點(diǎn)數(shù)目較多節(jié)點(diǎn)的轉(zhuǎn)移字符以及空閑碎片的有效利用,提高了空間利用率,并通過進(jìn)行線下的預(yù)計(jì)算,提高了搜索引擎線上分詞模塊的載入速度,不需要耗費(fèi)大量計(jì)算資源和頻繁10,不會(huì)對(duì)線上服務(wù)的穩(wěn)定性造成沖擊。通過簽名還能夠有效避免詞典文件格式錯(cuò)誤或者內(nèi)容缺失對(duì)分詞效果的影響。本發(fā)明的第二個(gè)目的在于提供一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的系統(tǒng)。為達(dá)到上述目的,本發(fā)明第一方面的實(shí)施例公開了一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法。該方法包括以下步驟按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)所述Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼;根據(jù)所述序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;根據(jù)所述序列碼、所述第一數(shù)組和所述第二數(shù)組在所述分詞詞典中進(jìn)行分詞查詢。由于序列碼是優(yōu)先考慮Trie樹子節(jié)點(diǎn)數(shù)目較多節(jié)點(diǎn)的轉(zhuǎn)移字符,因此這部分子節(jié)點(diǎn)最后在雙數(shù)組存儲(chǔ)的時(shí)候一般都是連續(xù)的,從而在查詢時(shí)間保持0(1)的量級(jí)的同時(shí)提高了空間利用率,降低了內(nèi)存占用。在本發(fā)明的一個(gè)實(shí)施例中,還包括將所述序列碼、所述第一數(shù)組和所述第二數(shù)組轉(zhuǎn)換為二進(jìn)制文件,并生成相應(yīng)的簽名。在搜索引擎線上服務(wù)時(shí),分詞模塊能直接從二進(jìn)制文件進(jìn)行載入,載入速度快,避免了大量的計(jì)算和頻繁的IO操作,并且不會(huì)對(duì)線上服務(wù)的穩(wěn)定性造成沖擊。生成的相應(yīng)簽名能夠預(yù)防文件格式和內(nèi)容的錯(cuò)誤。在本發(fā)明的一個(gè)實(shí)施例中,還包括將所述序列碼、所述第一數(shù)組和所述第二數(shù)組進(jìn)行尾部位置空間截?cái)唷N膊课恢每臻g截?cái)嗄軌蛴行Ч?jié)省內(nèi)存。 在本發(fā)明的一個(gè)實(shí)施例中,所述按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼進(jìn)一步包括計(jì)算每個(gè)字符的Trie樹子節(jié)點(diǎn)的數(shù)目;根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次對(duì)所述字符的內(nèi)碼進(jìn)行哈希計(jì)算以生成所述序列碼,并根據(jù)所述字符在所述分詞詞典中詞語中的位置確定所述字符的節(jié)點(diǎn)位置。在本發(fā)明的一個(gè)實(shí)施例中,所述根據(jù)序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組進(jìn)一步包括根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次將所述序列碼中的字符填入所述第一數(shù)組和所述第二數(shù)組。在本發(fā)明的一個(gè)實(shí)施例中,其中,如果所述字符所代表的詞屬于所述分詞詞典,則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為0,或者所述字符在所述第二數(shù)組中對(duì)應(yīng)的值為負(fù)值;如果所述字符為中間節(jié)點(diǎn),則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值非O。在本發(fā)明的一個(gè)實(shí)施例中,其中,如果所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為負(fù)值,則表示向前查找空閑位置。對(duì)于子節(jié)點(diǎn)數(shù)較少節(jié)點(diǎn)的轉(zhuǎn)移字符,在填充數(shù)組的時(shí)候采用從前向后回溯的方式來填補(bǔ)前面產(chǎn)生的空隙,將之前閑置的零散節(jié)點(diǎn)回收利用,從而更進(jìn)一步提高了空間利用率。本發(fā)明第一方面的實(shí)施例公開了一種搜索引擎分詞裝置,包括序列碼生成模塊,用于按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)所述Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼;數(shù)組生成模塊,用于根據(jù)所述序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;以及分詞查詢模塊,用于根據(jù)所述序列碼、所述第一數(shù)組和所述第二數(shù)組在所述分詞詞典中進(jìn)行分詞查詢。搜索引擎分詞裝置中,由于序列碼是優(yōu)先考慮Trie樹子節(jié)點(diǎn)數(shù)目較多節(jié)點(diǎn)的轉(zhuǎn)移字符,因此這部分子節(jié)點(diǎn)最后在雙數(shù)組存儲(chǔ)的時(shí)候一般都是連續(xù)的,從而在查詢時(shí)間保持0(1)的量級(jí)的同時(shí)提高了空間利用率,降低了內(nèi)存占用。在本發(fā)明的一個(gè)實(shí)施例中,還包括轉(zhuǎn)換模塊,用于將所述序列碼、所述第一數(shù)組和所述第二數(shù)組轉(zhuǎn)換為二進(jìn)制文件,并生成相應(yīng)的簽名。在搜索引擎線上服務(wù)時(shí),分詞模塊能直接從二進(jìn)制文件進(jìn)行載入,載入速度快,避免了大量的計(jì)算和頻繁的IO操作,并且不會(huì)對(duì)線上服務(wù)的穩(wěn)定性造成沖擊。生成的相應(yīng)簽名能夠預(yù)防文件格式和內(nèi)容的錯(cuò)誤。在本發(fā)明的一個(gè)實(shí)施例中,所述轉(zhuǎn)換模塊還用于將所述序列碼、所述第一數(shù)組和所述第二數(shù)組進(jìn)行尾部位置空間截?cái)?。尾部位置空間截?cái)嗄軌蛴行Ч?jié)省內(nèi)存。在本發(fā)明的一個(gè)實(shí)施例中,所述序列碼生成模塊進(jìn)一步包括計(jì)算子模塊,用 于計(jì)算每個(gè)字符的Trie樹子節(jié)點(diǎn)的數(shù)目;以及生成子模塊,用于根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次對(duì)所述字符的內(nèi)碼進(jìn)行哈希計(jì)算以生成所述序列碼,并根據(jù)所述字符在所述分詞詞典中詞語中的位置確定所述字符的節(jié)點(diǎn)位置。在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)組生成模塊根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次將所述序列碼中的字符填入所述第一數(shù)組和所述第二數(shù)組。在本發(fā)明的一個(gè)實(shí)施例中,其中,如果所述字符所代表的詞屬于所述分詞詞典,則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為0,或者所述字符在所述第二數(shù)組中對(duì)應(yīng)的值為負(fù)值;如果所述字符為中間節(jié)點(diǎn),則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值非O。在本發(fā)明的一個(gè)實(shí)施例中,其中,如果所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為負(fù)值,則表示向前查找空閑位置。本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
本發(fā)明上述的和/或附加的方面和優(yōu)點(diǎn)從下面結(jié)合附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中圖I為根據(jù)本發(fā)明實(shí)施例的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法的流程框圖;圖2為本發(fā)明具體實(shí)施例的Trie樹示意圖;圖3為根據(jù)本發(fā)明實(shí)施例的雙數(shù)組內(nèi)容示意圖;以及圖4為根據(jù)本發(fā)明實(shí)施例的搜索引擎分詞裝置的結(jié)構(gòu)圖。
具體實(shí)施例方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。下面參考圖I至圖3描述根據(jù)本發(fā)明實(shí)施例的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法。在本發(fā)明的一個(gè)實(shí)施例中,分詞詞典里內(nèi)容包括啊、阿根廷、阿膠、阿拉伯、阿拉伯人、埃及。根據(jù)分詞詞典生成的Trie樹如圖2所示??梢岳斫獾氖?,上述分詞詞典以及Trie樹僅出于示例的目的,本發(fā)明實(shí)施例并不限于此。步驟SllO :按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼。
按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼進(jìn)一步包括步驟Slll :計(jì)算每個(gè)字符的Trie樹子節(jié)點(diǎn)的數(shù)目。步驟S112 :根據(jù)Trie樹子節(jié)點(diǎn)的數(shù)目依次對(duì)字符的內(nèi)碼進(jìn)行哈希計(jì)算以生成序列碼,并根據(jù)字符在分詞詞典中詞語中的位置確定字符的節(jié)點(diǎn)位置。(例如為中間節(jié)點(diǎn)或葉子節(jié)點(diǎn))在本發(fā)明的一個(gè)實(shí)施例中,漢字的內(nèi)碼由兩個(gè)字節(jié)組成,共計(jì)65536個(gè),一般分詞詞典中出現(xiàn)的字符小于內(nèi)碼總數(shù),設(shè)計(jì) 時(shí)將序列碼為連續(xù)的。按照?qǐng)D2所示的Trie樹對(duì)分詞詞典中字符按照Trie樹子節(jié)點(diǎn)的數(shù)目遞減的順序進(jìn)行編碼,生成序列碼如表I所示,
~W\阿I埃I根卜·膠I拉I及I SI伯I人
~ 2 35 6 7 8 9 θ~表I表I中第一行存儲(chǔ)字符,第二行存儲(chǔ)與該字符對(duì)應(yīng)的序列碼,例如,“啊”的序列碼為1,“阿”的序列碼為2。采用code數(shù)組來表示序列表,選擇適當(dāng)?shù)膆ash函數(shù),使得hash計(jì)算量小,并且序列碼表的長度和出現(xiàn)過的字符數(shù)差距較小。當(dāng)給定一個(gè)字符時(shí),將其內(nèi)碼通過hash函數(shù)進(jìn)行轉(zhuǎn)換,能夠在O (I)的時(shí)間內(nèi)得到該字符對(duì)應(yīng)的序列碼??梢岳斫獾氖?,上述序列碼以及code數(shù)組僅出于示例的目的,本發(fā)明實(shí)施例并不限于此。步驟S120 :根據(jù)序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;根據(jù)序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組進(jìn)一步包括步驟S121 :根據(jù)Trie樹子節(jié)點(diǎn)的數(shù)目依次將序列碼中的字符填入第一數(shù)組和第二數(shù)組。在本發(fā)明的一個(gè)實(shí)施例中,將第一數(shù)組記作數(shù)組base□,將第二數(shù)組記作數(shù)組check[]0從Trie樹子節(jié)點(diǎn)數(shù)最多的節(jié)點(diǎn)開始,選擇圖2中第一層的轉(zhuǎn)移條件“啊”、“阿”和“埃”,根據(jù)表I得到對(duì)應(yīng)的序列碼分別為1、2、3,如圖3所示,依次放入雙數(shù)組對(duì)應(yīng)的I、2、3的位置上,再繼續(xù)選擇子節(jié)點(diǎn)最多的節(jié)點(diǎn)3,轉(zhuǎn)移條件分別為“根”、“膠”和“拉”,根據(jù)表I查出對(duì)應(yīng)的序列碼分別為4、5、6。由于序列碼是優(yōu)先考慮Trie樹子節(jié)點(diǎn)數(shù)目較多節(jié)點(diǎn)的轉(zhuǎn)移字符,因此這部分子節(jié)點(diǎn)最后在雙數(shù)組存儲(chǔ)的時(shí)候一般都是連續(xù)的,從而提高了空間利用率。對(duì)于子節(jié)點(diǎn)數(shù)較少節(jié)點(diǎn)的轉(zhuǎn)移字符,在填充數(shù)組的時(shí)候采用從前向后回溯的方式來填補(bǔ)前面產(chǎn)生的空隙,將之前閑置的零散節(jié)點(diǎn)回收利用,尤其對(duì)于含有大量專有名字的分詞詞典,能夠更進(jìn)一步提高了空間利用率。如圖3所示,“阿拉”在雙數(shù)組對(duì)應(yīng)的7的位置上,“埃及”在雙數(shù)組對(duì)應(yīng)的8的位置上等。步驟S122 :如果字符所代表的詞屬于分詞詞典,則字符在第一數(shù)組中對(duì)應(yīng)的值為0,或者字符在第二數(shù)組中對(duì)應(yīng)的值為負(fù)值。在本發(fā)明的一個(gè)實(shí)施例中,由于Trie樹中節(jié)點(diǎn)2是葉子節(jié)點(diǎn),因此“啊”對(duì)應(yīng)的base [I]標(biāo)記為0,Check值標(biāo)記為0,check值標(biāo)記為O表示對(duì)應(yīng)的節(jié)點(diǎn)父節(jié)點(diǎn)為根節(jié)點(diǎn);由于“阿膠”是一個(gè)分詞詞典中的詞,因此“阿膠”對(duì)應(yīng)的base[6] = O, check[6] = -check[6]。
步驟S123 :如果字符為中間節(jié)點(diǎn),則字符在第一數(shù)組中對(duì)應(yīng)的值非O?!鞍ⅰ睘橹虚g節(jié)點(diǎn),設(shè)置“阿”對(duì)應(yīng)的base[2] = I。在本發(fā)明的一個(gè)實(shí)施例中,每次為序列碼中的字符查找存儲(chǔ)空間時(shí),不能使用字符的序列碼所對(duì)應(yīng)的數(shù)組的位置,必須向前或者向后移動(dòng)I個(gè)單位及以上。例如“根”的序列碼是4,那么即使base[4]和check[4]這兩個(gè)位置目前是空閑的也不可以使用,需要向前或者向后移動(dòng)I個(gè)單位及以上。此處設(shè)置單位為數(shù)組的一個(gè)位置??梢岳斫獾氖?,上述單位僅出于示例目的,本發(fā)明不限于此。具體設(shè)置“阿”對(duì)應(yīng)的base[2] = I過程如下詞典中以“阿”為前綴的詞有“阿根廷”、“阿膠”和“阿拉伯”三個(gè)。“根”,“膠”和“拉”是“阿”的子節(jié)點(diǎn),需要在數(shù)組中為這些子節(jié)點(diǎn)找到合適的存儲(chǔ)空間。根據(jù)表I得出“根”、“膠”和“拉”的編碼分別是4、5和6,首先從第一數(shù)組 base[]和第二數(shù)組check[]中向數(shù)組后方移動(dòng)I個(gè)單位,得出存在連續(xù)的三個(gè)空位可以放入“根”,“膠”和“拉”三個(gè)子節(jié)點(diǎn),即能滿足base[1+4] = check[1+4] = O ;base[1+5] = check[l+5] = 0 ;base[1+6] = check[l+6]=O0 因此設(shè)置 base[2] = I。設(shè)置check[5] = check[6] = check[7] = 2,表示5、6、7這三個(gè)位置對(duì)應(yīng)的節(jié)點(diǎn)的父節(jié)點(diǎn)是數(shù)組的第二個(gè)位置上對(duì)應(yīng)的結(jié)點(diǎn),即“阿根”、“阿膠”、“阿拉”的父節(jié)點(diǎn)為“阿”。步驟S124 :如果字符在第一數(shù)組中對(duì)應(yīng)的值為負(fù)值,則表示向前查找空閑位置。例如,“阿拉伯”對(duì)應(yīng)的base[10] = _6。步驟S130 :根據(jù)序列碼、第一數(shù)組和第二數(shù)組在分詞詞典中進(jìn)行分詞查詢。在本發(fā)明的一個(gè)實(shí)施例中,具體的查詢過程為s表示上一個(gè)狀態(tài)時(shí)字符在數(shù)組中的位置,c表示當(dāng)前狀態(tài)時(shí)字符的序列碼,t表示下一狀態(tài)轉(zhuǎn)移后字符在數(shù)組中的位置,查詢過程的偽代碼如下
權(quán)利要求
1.一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在于,包括以下步驟 按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)所述Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼; 根據(jù)所述序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;以及 根據(jù)所述序列碼、所述第一數(shù)組和所述第二數(shù)組在所述分詞詞典中進(jìn)行分詞查詢。
2.如權(quán)利要求I所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在于,還包括 將所述序列碼、所述第一數(shù)組和所述第二數(shù)組轉(zhuǎn)換為ニ進(jìn)制文件,并生成相應(yīng)的簽名。
3.如權(quán)利要求2所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在于,還包括 將所述序列碼、所述第一數(shù)組和所述第二數(shù)組進(jìn)行尾部位置空間截?cái)唷?br>
4.如權(quán)利要求1-3任一項(xiàng)所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在干,所述按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼進(jìn)一歩包括 計(jì)算姆個(gè)字符的Trie樹子節(jié)點(diǎn)的數(shù)目; 根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次對(duì)所述字符的內(nèi)碼進(jìn)行哈希計(jì)算以生成所述序列碼,井根據(jù)所述字符在所述分詞詞典中詞語中的位置確定所述字符的節(jié)點(diǎn)位置。
5.如權(quán)利要求4所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在于,所述根據(jù)序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組進(jìn)一歩包括 根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次將所述序列碼中的字符填入所述第一數(shù)組和所述第二數(shù)組。
6.如權(quán)利要求5所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在于,其中, 如果所述字符所代表的詞屬于所述分詞詞典,則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為O,或者所述字符在所述第二數(shù)組中對(duì)應(yīng)的值為負(fù)值; 如果所述字符為中間節(jié)點(diǎn),則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值非O。
7.如權(quán)利要求1-6任一項(xiàng)所述的通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,其特征在干,其中, 如果所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為負(fù)值,則表示向前查找空閑位置。
8.ー種搜索引擎分詞裝置,其特征在于,包括 序列碼生成模塊,用于按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)所述Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼; 數(shù)組生成模塊,用于根據(jù)所述序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;以及 分詞查詢模塊,用于根據(jù)所述序列碼、所述第一數(shù)組和所述第二數(shù)組在所述分詞詞典中進(jìn)行分詞查詢。
9.如權(quán)利要求8所述的搜索引擎分詞裝置,其特征在于,還包括 轉(zhuǎn)換模塊,用于將所述序列碼、所述第一數(shù)組和所述第二數(shù)組轉(zhuǎn)換為ニ進(jìn)制文件,井生成相應(yīng)的簽名。
10.如權(quán)利要求9所述的搜索引擎分詞裝置,其特征在于,所述轉(zhuǎn)換模塊還用于將所述序列碼、所述第一數(shù)組和所述第二數(shù)組進(jìn)行尾部位置空間截?cái)唷?br>
11.如權(quán)利要求8-10任ー項(xiàng)所述的搜索引擎分詞裝置,其特征在于,所述序列碼生成模塊進(jìn)一歩包括計(jì)算子模塊,用于計(jì)算每個(gè)字符的Trie樹子節(jié)點(diǎn)的數(shù)目;以及生成子模塊,用于根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次對(duì)所述字符的內(nèi)碼進(jìn)行哈希計(jì)算以生成所述序列碼,井根據(jù)所述字符在所述分詞詞典中詞語中的位置確定所述字符的節(jié)點(diǎn)位置。
12.如權(quán)利要求11所述的搜索引擎分詞裝置,其特征在于,所述數(shù)組生成模塊根據(jù)所述Trie樹子節(jié)點(diǎn)的數(shù)目依次將所述序列碼中的字符填入所述第一數(shù)組和所述第二數(shù)組。
13.如權(quán)利要求12所述的搜索引擎分詞裝置,其特征在于,其中, 如果所述字符所代表的詞屬于所述分詞詞典,則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為O,或者所述字符在所述第二數(shù)組中對(duì)應(yīng)的值為負(fù)值; 如果所述字符為中間節(jié)點(diǎn),則所述字符在所述第一數(shù)組中對(duì)應(yīng)的值非O。
14.如權(quán)利要求13所述的搜索引擎分詞裝置,其特征在于,其中, 如果所述字符在所述第一數(shù)組中對(duì)應(yīng)的值為負(fù)值,則表示向前查找空閑位置。
全文摘要
本發(fā)明提出一種通過預(yù)計(jì)算優(yōu)化搜索引擎分詞的方法,包括以下步驟按照Trie樹子節(jié)點(diǎn)的數(shù)目對(duì)分詞詞典中字符進(jìn)行編碼以生成序列碼,其中,對(duì)所述Trie樹子節(jié)點(diǎn)的數(shù)目多的字符優(yōu)先進(jìn)行編碼;根據(jù)所述序列碼進(jìn)行預(yù)計(jì)算以生成雙數(shù)組Trie樹的第一數(shù)組和第二數(shù)組;根據(jù)所述序列碼、所述第一數(shù)組和所述第二數(shù)組在所述分詞詞典中進(jìn)行分詞查詢。本發(fā)明提高了搜索引擎分詞的空間利用率,加快了分詞模塊的載入速度,增強(qiáng)了線上服務(wù)的穩(wěn)定性。本發(fā)明還公開了一種搜索引擎分詞裝置。
文檔編號(hào)G06F17/30GK102651026SQ20121009655
公開日2012年8月29日 申請(qǐng)日期2012年4月1日 優(yōu)先權(quán)日2012年4月1日
發(fā)明者張敏, 阮星華 申請(qǐng)人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司