專利名稱::基于語義距離模型的xml文檔關(guān)鍵字搜索聚類方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于Web數(shù)據(jù)管理
技術(shù)領(lǐng)域:
,具體涉及一種基于聚類思想,對可擴(kuò)充標(biāo)記語言(XML)數(shù)據(jù)庫或文檔進(jìn)行關(guān)鍵字搜索的方法。技術(shù)背景由于界面友好、使用簡單,關(guān)鍵字搜索在信息檢索領(lǐng)域取得了巨大成功,例如谷歌搜索引擎、百度搜索引擎等。它們的搜索對象通常是一個HTML文檔或普通文本文檔的集合,搜索的目的是査出哪些關(guān)鍵字在哪些文檔中出現(xiàn),并且返回全部或部分包含關(guān)鍵字的文檔。由于XML格式數(shù)據(jù)的大量出現(xiàn)和廣泛應(yīng)用,在XML文檔上進(jìn)行關(guān)鍵字搜索的需求變得越來越迫切。近年來,XML關(guān)鍵字搜索受到工業(yè)界和學(xué)術(shù)界的廣泛關(guān)注[1][2][',][5][6][7]。XML的關(guān)鍵字搜索不同于結(jié)構(gòu)化的XML査詢(如XPath、XQuery等),不僅易于使用,用戶不需要學(xué)習(xí)和掌握復(fù)雜的查詢語言,用戶也不需要了解XML的模式,適用于Internet上大量存在的自由XML文檔。但是,關(guān)鍵字搜索帶來的一個關(guān)鍵問題是用戶難以或無法準(zhǔn)確表達(dá)搜索語義。因此,在XML關(guān)鍵字搜索中,如何確定關(guān)鍵字搜索的語義(即用戶的搜索意圖)以及返回什么樣的結(jié)果給用戶則成為關(guān)鍵的技術(shù)難點。在已有的關(guān)于XML關(guān)鍵字搜索的工作中,通常都是基于最低公共祖先(LCA)模型,中一個典型的方法是最小最低公共祖先方法SLCA(MeaningfulLowestCommonAncestor)[2]。Li等人[3]將關(guān)鍵字搜索的語義定義為有意義的最低公共祖先,其本質(zhì)含義與SLCA相同。SLCA方法返回的是一組最小應(yīng)答子樹(smallestanswersubtree),—棵最小應(yīng)答子樹被定義為包含有所有關(guān)鍵字的子樹,并且任意一棵其子樹都不包含所有關(guān)鍵字,這種子樹的根被稱作一個SLCA。SLCA方法實際上是將對一組關(guān)鍵字的搜索轉(zhuǎn)換為對這一組關(guān)鍵字的最小最低公共祖先的査找。該方法雖然能夠獲得一些關(guān)鍵結(jié)果,但同時又會丟失很多有意義的信息。例如,圖1所示是一個XML文檔樹,其中每個結(jié)點以自己的標(biāo)簽作為標(biāo)識,下面的數(shù)字串是該結(jié)點的Dewey編碼。假如用戶搜索的關(guān)鍵字是{J服,必'c力aeJ,few4,標(biāo)簽中包含關(guān)鍵字的結(jié)點用下劃線標(biāo)出。在圖1中,SLCA方法的返回結(jié)果只是一棵以結(jié)點JrWWe(O.2.2.0)為根的子樹。然而,用戶的搜索語義極有可能是"Michael和David曾經(jīng)合作寫過哪些關(guān)于XML的文章",很明顯,SLCA方法找到了文章"XML3",但將文章"XML2"漏掉了;用戶還可能有其它合理的查詢意圖,比如"Michael和David—起合作寫過哪些文章","Michael和David其中任一個人寫過哪些關(guān)于XML的文章",對于這兩個詢問,文章"HTML1"和文章"XML1"也是滿足的,都應(yīng)該被返回。這些搜索意圖都是很合理的,也是現(xiàn)實生活中非常常見的,而SLCA方法將幾個滿足這些搜索意圖的結(jié)果都丟失了。實際上,SLCA方法所做的即是根據(jù)某種規(guī)則從各種包含不同關(guān)鍵字的結(jié)點的組合中挑選出部分"最優(yōu)"的包含全部關(guān)鍵字的組合,而SLCA方法認(rèn)為的"最優(yōu)"就是LCA相對最低,而LCA相對較高的結(jié)果則都被丟棄了,這是SLCA方法會丟失有意義的結(jié)果的根本原因。除了丟失一些有意義的結(jié)果外,SLCA方法還存在一些其它問題(l)在其計算過程中,并不是所有的結(jié)點組合都是可比較的,所有LCA之間不存在祖先后代的兩個組合,例如圖1中的組合{0.2.2.0.1.0,0.2.2.0.1.1}與組合{0.0.1.0,0.0.1.1},都不可比較,所以選出的"最優(yōu)"只能是相對最優(yōu);(2)由于SLCA方法選出來的一組結(jié)果的LCA之間都不存在祖先后代關(guān)系,所以它們是不可比較的,因此也無法將它們排序,這顯然不適合結(jié)果集比較大的情況;(3)SLCA方法要求每個結(jié)果都要包含所有關(guān)鍵字,這實際是要求在作為査詢語句的所有關(guān)鍵字之間存在"與"邏輯關(guān)系,而我們現(xiàn)實生活中所使用的關(guān)鍵字搜索引擎(例如谷歌)都包含了"或"關(guān)系,也就是說關(guān)鍵字可以全部或部分的存在于結(jié)果中,這使得搜索的結(jié)果能更多地滿足用戶的可能意圖,顯然更加合理,也應(yīng)該被應(yīng)用到XML關(guān)鍵字搜索中來。針對上述問題,本發(fā)明提出一種新的XML關(guān)鍵字搜索的處理方法。其中,提出一種新的XML關(guān)鍵字搜索的語義距離模型,綜合考慮關(guān)鍵字結(jié)點之間的距離和它們的LCA的高度;首次使用聚類算法進(jìn)行XML關(guān)鍵字搜索;并提出一種排序模型對所有的搜索結(jié)果排序。
發(fā)明內(nèi)容本發(fā)明的目的在于提出一種新的XML文檔關(guān)鍵字搜索方法,以便能夠搜索到更多的對用戶有意義的XML片斷。本發(fā)明提出的XML文檔關(guān)鍵字搜索方法,是基于XML文檔距離模型的XML聚類關(guān)鍵字搜索,包括用關(guān)鍵字的語義距離模型來建模用戶的搜索意圖、用聚類算法進(jìn)行關(guān)鍵字搜索、支持關(guān)鍵字之間的"或"運算、并對結(jié)果進(jìn)行排序,記為XKLuster。方法的具體步驟如下(1)定義用戶提交的關(guān)鍵字,并將XML文檔的關(guān)鍵字搜索語義定義為關(guān)鍵字之間的語義距離模型,并以此來表示用戶的搜索意圖;(2)將關(guān)鍵字搜索的返回結(jié)果定義為關(guān)鍵字簇的最小組成樹;(3)XML文檔樹進(jìn)行預(yù)處理;(4)根據(jù)本發(fā)明提出的語義距離模型,選擇使用如下三種聚類算法之一種進(jìn)行XML關(guān)鍵字搜索基于圖的聚類算法(GKSC)、核心集驅(qū)動的聚類算法(CKSC)和松弛的核心集驅(qū)動聚類算法(LCC)。(5)根據(jù)本發(fā)明提出的排序模型,對搜索結(jié)果進(jìn)行排序。1.定義關(guān)鍵字之間的語義距離模型本發(fā)明將用戶提交的關(guān)鍵字定義為一個包含t個關(guān)鍵字的集合Z:仏Ii=l,,t},XML文檔定義為一棵XML文檔樹,具體如下定義l.XML文檔樹。將一顆XML文檔樹(XMLDoc咖entTree)表示為一個8元組d=(F,£,義,/a6e/(''fi0,p/(械,W2),cfep,/j("),^cotfe(!W),/ca(7')),其中(1)K是樹上所有結(jié)點的集合,并且每個結(jié)點都有唯一的標(biāo)識符和Dewey編碼;(2)££Kxr,是樹上邊的集合;(3)/We/(W)為標(biāo)簽函數(shù),用來獲得標(biāo)識為J'c/的結(jié)點的標(biāo)簽,其中WeK;(4)Xe^是樹上所有關(guān)鍵字結(jié)點的集合,所謂關(guān)鍵字結(jié)點即標(biāo)簽中包含關(guān)鍵字的結(jié)點;(5)p/(W,,/《)函數(shù),用來取得id和^/2兩個結(jié)點之間的路徑長度,其中W和W必須具有祖先后代關(guān)系,而此函數(shù)返回的結(jié)果為它們之間的路徑上所包含的邊的個數(shù);(6)血/^(W)函數(shù),用來獲得標(biāo)識為JW的結(jié)點的深度(樹的根的深度為1),其中WeF;(7)/vmKfe(W)函數(shù),用來獲得標(biāo)識為W的結(jié)點的Dewey編碼,其中wer;(8)/ca(r)函數(shù),其中^£「是K的任意子集,函數(shù)返回r中所有結(jié)點的最低公共祖先。定義2.兩個關(guān)鍵字結(jié)點之間的最短路徑。兩個關(guān)鍵字結(jié)點&和x,的最短路徑為結(jié)點a到7caUx,,義」))的路徑加上結(jié)點^到"s(U,.,W)的路徑。同時,用函數(shù)sa/(x,》來表示結(jié)點A和^的最短路徑的長度,顯然印J0^,》=/^(乃a(Uhx,}),x.)+/^(7ca(U,.,^0)),々)。在一篇普通的文本文檔中,兩個單詞之間到底有多"近",可以直接通過它們中間相隔的單詞數(shù)量來表示。但是在一篇XML文檔中,情況更為復(fù)雜。實際上,在現(xiàn)有的XML關(guān)鍵字搜索方法中,都顯示或隱式地定義了任意兩個關(guān)鍵字結(jié)點在結(jié)構(gòu)上的距離。比如Hristidis等人在[l]中將兩個結(jié)點之間的距離直接定義成它們的最短路徑的長度,但沒有考慮到樹型結(jié)構(gòu)層次化的特性。而在所有基于LCA的方法的主要缺陷有三一是雖然考慮到了層次的高低,但是沒有考慮結(jié)點之間的路徑長短;二是當(dāng)兩個LCA之間具有祖先后代關(guān)系時,只取SLCA會導(dǎo)致部分有意義的結(jié)果的丟失;三是當(dāng)兩個LCA之間不具有祖先后代關(guān)系時,兩個距離是不可比較的,因而無法對大量返回結(jié)果進(jìn)行排序。本發(fā)明綜合考慮兩方面因素來定義兩個關(guān)鍵字之間的語義距離,即兩個關(guān)鍵字結(jié)點之間的路徑長度和它們的LCA的層次。若兩個關(guān)鍵字結(jié)點之間的最短路徑越短,則它們的語義距離越近;若兩個結(jié)點的LCA的層次越低,則它們的語義距離越近;兩個關(guān)鍵字之間的語義距離越短,則意味著它們的關(guān)系更緊密,更可能構(gòu)成用戶要搜索的結(jié)果。這樣的語義距離模型避免了當(dāng)兩個LCA之間不具有祖先后代關(guān)系時會丟失可能的結(jié)果;同時在存在大量返回結(jié)果時,又能夠?qū)Ψ祷亟Y(jié)果進(jìn)行排序。定義3.兩個關(guān)鍵字結(jié)點之間的語義距離。XML文檔樹上任意兩個關(guān)鍵字結(jié)點之間的語義距離力's(A,》被定義如下后面內(nèi)容將語義距離簡稱為距離。在公式(i)中,分子和分母部分分別是兩關(guān)鍵字結(jié)點間最短路徑的長度和它們LCA的高度。設(shè)樹的高度(最大深度)是力,那么s;^(AA)的取值范圍是[O,2力],而W))的取值范圍是[l,力],所以力's(A,A)的值域是[O,2力]。對圖1中的所有關(guān)鍵字之間的語義距離進(jìn)行計算,可以得到一個語義距離矩陣,如表1所示。由表l中可以看出,最近的幾個距離(0.40和0.67)表示的關(guān)系都是同一篇文章的兩個作者,而最遠(yuǎn)的距離(8.00)則是相互之間沒有引用關(guān)系的兩篇文章的標(biāo)題或作者,距離的遠(yuǎn)近與實際意義相符。2.定義關(guān)鍵字搜索的返回結(jié)果定義4.關(guān)鍵字結(jié)點的簇。根據(jù)關(guān)鍵字語義距離模型,可以使用特定的方法將關(guān)鍵字結(jié)點集分成一組簇。簇的集合表示為C={GIi=1,…,歷},其中,一個簇G是一組關(guān)鍵字結(jié)點的集合,GG義,且Gc,x。,=1設(shè)定一個距離閾值"來約束簇的大小,簇中任意兩個關(guān)鍵字結(jié)點之間的距離小于等于定義5.最優(yōu)簇。給定一個距離閾值",任一個關(guān)鍵字集合C,eX被稱為最優(yōu)簇,當(dāng)且僅當(dāng)(1)V義,.,q滿足(//S(X、々)《0;(2)V、,x。eX且a:。gq,3x6eC,.滿足As(jc。,x6)>w。假設(shè)取距離閾值為2.0,則可知表1中的距離矩陣中只有部分距離被保留(如表1中陰影部分所示),此時的四個最優(yōu)簇分別是^,&},",W,ks,&力,W和U,為,將四篇文章都找出了。由于一個簇只是若干關(guān)鍵字結(jié)點的集合,若要向用戶返回有價值的信息,一種簡單的方法是對于每個簇G,返回整棵以乃a(G)為根的子樹。但存在兩個缺點其一是多個乃3(G)為根的子樹之間可能存在的包含情況,尤其當(dāng)某個"s(G)的層次比較高的時候,會產(chǎn)生大量冗余信息;其二是返回結(jié)果過大。因此,本發(fā)明將返回結(jié)果定義為簇的"最小組成樹",定義如下定義6.簇的最小組成樹。C中每個簇G的最小組成樹定義為以Jca(G)為根,以A"e/^朋ts(G)中的所有結(jié)點為葉子的樹。其中c/esce/^a/7"(G)函數(shù)返回G中所有在G內(nèi)不含有任何后代的關(guān)鍵字結(jié)點的集合。即就是G的最小組成樹是從乃a(G)到Gfesce"血y"(G)中所有結(jié)點的。在將每個簇的最小組成樹返回給用戶后,再為用戶提供兩個額外功能來擴(kuò)大返回結(jié)果-一是對任意結(jié)點的"展開",將原XML文檔樹中該結(jié)點的所有后代結(jié)點加入到結(jié)果中,例如在圖1中,對于簇{0.1.0.0,0.1.1.0}的最小組成樹,用戶可以展開^"t力,s(0.1.1)結(jié)點來獲得該篇文章的另一個作者/o力"(0.1.1.1);二是根結(jié)點的提高,即將當(dāng)前最小組成樹根結(jié)點的父結(jié)點加入到結(jié)果中,例如對于簇{0.0.1.0,0.0.1.1}的最小組成樹,用戶可以將根結(jié)點力"t力ors(O.O.l)提高,從而得知其父結(jié)點力m'cJe(O.O)。通過這兩個功能的組合,用戶可以根據(jù)自己的需求來隨意擴(kuò)展每個結(jié)果的大小,直至找到滿意的內(nèi)容為止。3.XML關(guān)鍵字搜索的聚類算法的預(yù)處理在數(shù)據(jù)挖掘中,聚類是一個常用的處理方法。它將一個對象集合分成一些組,使得同一個組內(nèi)對象之間的相似度達(dá)到最大,而不同組間對象的相似度達(dá)到最小。在XML關(guān)鍵字搜索的背景下,本發(fā)明的目標(biāo)是將一個關(guān)鍵字結(jié)點集合按照結(jié)點間語義距離的遠(yuǎn)近進(jìn)行分組。本發(fā)明針對XML關(guān)鍵字搜索,設(shè)計了相應(yīng)的的聚類算法。對于一個距離閾值",XML關(guān)鍵字聚類搜索的目標(biāo)就是找到所有的最優(yōu)簇。在說明XML關(guān)鍵字聚類算法之前,先對XML文檔樹進(jìn)行預(yù)處理,步驟如下(1)使用Dewey編碼為整棵XML文檔樹進(jìn)行編碼;(2)為所有的關(guān)鍵字建立倒排索引表;(3)對于深度(最大高度)為力的XML文檔樹,建立一個包含有力個有序關(guān)鍵字結(jié)點列表的層次型數(shù)據(jù)結(jié)構(gòu)H。其中每一個層次是將XML文檔樹上一組處于同一高度的多個結(jié)點按照文檔訪問(先序遍歷)順序組成一個序列/,A是其中的任一個結(jié)點;(4)先序遍歷XML文檔樹,每遇到一個標(biāo)簽含有關(guān)鍵字的結(jié)點,將它加入相應(yīng)層次的列表的尾部。當(dāng)文檔遍歷結(jié)束時,可以得到一個如圖2所示的層次型數(shù)據(jù)結(jié)構(gòu)//。在該結(jié)構(gòu)的任一層次的列表上,結(jié)點是按照文檔訪問(先序遍歷)順序加入的,因而有如下定理定理l.在序列/中,當(dāng)從結(jié)點A向左(向右)進(jìn)行遍歷時,A與每次遇到的結(jié)點之間的距離非遞減增加。證明.從結(jié)點A開始,無論是向左還是向右遍歷,每次遇到的結(jié)點與A的關(guān)系總會依次是"兄弟"、"堂兄弟",越來越疏遠(yuǎn),從而彼此間的最短路徑越來越長,LCA也越來越高,根據(jù)公式1可知距離越來越遠(yuǎn)。對于文檔樹上的任意一個低(高)于/所在位置的層次,同樣按順序取任意多個結(jié)點組成序列/',并且設(shè)/'中一個結(jié)點A是A的后代(祖先)結(jié)點(如果有多個后代結(jié)點,則任選一個;如果不存在后代結(jié)點,則在相應(yīng)位置插入一個),定理2如下定理2.在序列/'中,當(dāng)從A開始向左(向右)遍歷,則A與每次遇到的結(jié)點之間的距離非遞減增加。證明.x,與序列/'中任意一個結(jié)點的最短路徑等于A和該點的最短路徑減去(加上)《和A的最短路徑,而在/'確定的情況下,x和A的最短路徑是不變的,所以A與該結(jié)點的最短路徑長度越來越短,而顯然它們的LCA的深度是減小的,所以可得證距離增加。4.基于圖的的關(guān)鍵字搜索聚類算法GKSC(Graph-basedClusteringalgorithmforXMLKeywordSearch)GKSC算法首先遍歷#,根據(jù)彼此距離是否小于等于距離閾值建立結(jié)點和結(jié)點之間的連接,從而得到一個以各個關(guān)鍵字結(jié)點為頂點的加權(quán)無向圖&再使用一個圖的分解算法來獲得一組最大完全子圖,各個完全子圖的頂點集合就是一個最優(yōu)簇。GKSC算法的步驟如下(1)從上到下按層次訪問/Z中的結(jié)點,在每一層的列表中,從左到右遍歷,對于當(dāng)前訪問結(jié)點,計算它和同層右邊以及下面的某些鄰居的距離。假設(shè)當(dāng)前正在訪問結(jié)點A,則它和同一層次處于它左邊的鄰居結(jié)點的距離,以及和它上面的層次的鄰居結(jié)點的距離都己經(jīng)被計算過了,因此只需要考慮右邊以及更低層次的結(jié)點。假設(shè)被考慮的結(jié)點是A,并且處在A的同一層次,根據(jù)定理l,隨著A的位置向右移動,Ws(A,A)—直變大。所以,當(dāng)力's(x,,^)大于"時,A右邊的結(jié)點都不需要再被考慮。(2)對于更低層次的結(jié)點,首先確定有多少層次的結(jié)點需要被考慮。給定一個",距離公式必須滿足<formula>formulaseeoriginaldocumentpage12</formula>,又由于<formula>formulaseeoriginaldocumentpage12</formula>,所以<formula>formulaseeoriginaldocumentpage12</formula>成立,也就是說<formula>formulaseeoriginaldocumentpage12</formula>,所以<formula>formulaseeoriginaldocumentpage12</formula>是<formula>formulaseeoriginaldocumentpage12</formula>A下面必須考慮的層次的數(shù)目,其中Z7oor函數(shù)表示向下取整??梢园l(fā)現(xiàn),即使x在第Woor(鄉(xiāng)晰、).的+l)個更低的層次有一個后代結(jié)點,它和該后代之間的距離也肯定超過了距離閾值。(3)計算出所需要考慮的層次數(shù)目后,對于x,下方/oor((fe/^0O.^)層中的每一層,首先找到A的后代在該層中的位置(A的后代結(jié)點不需要一定在W中存在),再從該位置向左(向右)遍歷直至距離超出閾值,并且根據(jù)定理2,在這一層中,其它結(jié)點都不需要參與考慮。當(dāng)A是所屬層中的第一個結(jié)點時,使用二分法去尋找它在/ooK鄉(xiāng)決(x,)w)個低層次列表中后代結(jié)點的位置,并且用指針記錄下這些位置(如圖2所示)。而當(dāng)A不是第一個結(jié)點時,只從那些記錄的位置開始向右尋找后代結(jié)點的位置,之后再修改指針到當(dāng)前位置。這樣做的原因是假設(shè)A和A在同一層中兩個相鄰的位置,A在A的左邊,則在更低的一個層次中,A的后代結(jié)點的位置肯定在X的后代結(jié)點位置的右邊,這樣處理的話指針只朝一個方向移動,它的變化是累加式的,比每次都用二分法尋找后代結(jié)點的位置要高效得多。(4)每次計算兩個結(jié)點的距離時,如果小于或等于距離閾值,貝ij(通過加上互相指向的指針)將該兩個結(jié)點用邊連接起來,并且記錄下距離作為該邊的權(quán)。(5)上一步結(jié)束后,可以得到一個加權(quán)的無向圖。然后再將圖分解得到所有的最大完全字圖,從而得到結(jié)果簇。算法GKSC能夠找到所有的最優(yōu)簇,完全達(dá)到了聚類的目標(biāo),其不足在于效率較難控制,尤其是在距離閾值比較大的時候效率可能會比較低。因此,本發(fā)明提出另外兩個聚類算法CKSC和LCC.5.核心集驅(qū)動的聚類算法CKSC(Core-drivenClusteringalgorithmforXMLKeywordSearch)CKSC的思路則是利用分而治之的思想,首先找到一些被稱為核心集(core)的結(jié)點集。若是核心集,則在它之內(nèi)的結(jié)點肯定能被聚到一起;再找到一些肯定包含最優(yōu)簇的核心集的集合;最后從這些核心集集合中找到最優(yōu)簇。定義7.核心集。對于距離閾值"來說,任一個關(guān)鍵字集合c。e義,如果它所包含的關(guān)鍵字結(jié)點中任意兩者之間的距離都小于或等于",則G被稱為一個核心集(core).根據(jù)定義7,任意一個最優(yōu)簇都是一個核心集。但是,一個核心集不一定是一個最優(yōu)簇。引理1.設(shè)在層次型數(shù)據(jù)結(jié)構(gòu)^的任一層中取^和A兩個任意結(jié)點,其中,A在A右邊。對于一個距離閾值",若必Oc,a)s",則從a到&這0-/+1)個結(jié)點的集合是一個核心集。證明.設(shè)從a到&這0-/+1)個結(jié)點中任取兩個結(jié)點&&并且^在工的右邊,則根據(jù)定理1可知cfo(;c。,;OS血(x。,;0《必",A)Sw,即任意兩個結(jié)點之間的距離小于等于",得證。定義8.原始核心集?!ㄖ械囊粋€結(jié)點集合G'被稱為一個原始核心集(coreorigin),當(dāng)且僅當(dāng)(1)G'是一個核心集;(2)C/中的結(jié)點都處于V的同一層次;(3)在該層次中不存在一個核心集C。使得6TcC。。GKSC算法步驟的說明如下(1)首先遍歷//,將/Z中的結(jié)點分成一些核心集。對于//的每一層,具體的做法是創(chuàng)建一個空集,將該層第一個結(jié)點加入,從第二個結(jié)點開始往后遍歷,計算第一個結(jié)點與遍歷當(dāng)前結(jié)點之間的距離;如果小于等于"則將之加入集合。當(dāng)遇到距離超出"的第一個結(jié)點時,再創(chuàng)建一個空集,以該結(jié)點為集合中第一個結(jié)點繼續(xù)遍歷,直至該層中所有結(jié)點都已遍歷完。一個原始核心集所包含的是^上同一層次中相鄰的一組結(jié)點。如圖3(a)所示,假設(shè)flfe(x,';0《w,并且tfo(x,—";>:,)>0,cfe(w,)〉ffl,根據(jù)引理1可知,{x;,…,〖}是個核心集,并且對于其中的任一個結(jié)點工,必(x,—";:。)>必(;c,—,,jc,)xy,cfo(x。>&(;cr,xr+1)>,艮卩A與同一層內(nèi)其它結(jié)點的距離都大于"。所以,{力,…,&}是一個原始核心集。實際上它是該層所有結(jié)點集合的一個最優(yōu)簇。(2)再尋找原始核心集周圍的核心集,求出包含這些原始核心集的最優(yōu)簇。如前所述,對于一個原始核心集來說,同一層次中所有其它結(jié)點都不需要再考慮,只需考慮其它所有層次的相鄰結(jié)點。如圖3(b)所示,假設(shè)當(dāng)前考慮的原始核心集是/中的{力,…,W,觀察該層下面某個序列,中的結(jié)點,按照GKSC算法中尋找連接的做法可以得到一組連續(xù)的與結(jié)點^距離小于等于"的結(jié)點。將這些結(jié)點設(shè)為z/,…,力〃,將與結(jié)點A距離小于等于"的一組連續(xù)結(jié)點設(shè)為義/,…,xZ。假設(shè)k/,…,義/]與U/,…,7/]沒有交集,則,中不存在可以被加入核心集{力,…,,J以形成最優(yōu)簇的結(jié)點。但如果兩者的交集如圖中所示是U/,…,z/〕,且在一個核心集內(nèi),貝1」{力,…,Wuk/,…,7/是一個核心集。另外當(dāng),{義/,…,義/]不是一個核心集的時候(義/到義/跨越多個核心集),將它劃分成幾個核心集再予以考慮,對于每個核心集可以得到相同的結(jié)論。當(dāng)找出{&,W在所有層次上需要考慮的核心集后,在每一層取一個核心集組成一個核心集的集合,顯然可以在該集合內(nèi)找到包含{&,…,d的最優(yōu)簇。引理2.結(jié)點集合{力,…,WuU/,…,義/是一個核心集,且除b/,…,力,之外的/'中的點都不能被加入{&…,W而成為一個核心集.證明.{力,…,&}與{義/,…,義/1本身都是核心集,所以只需證明兩個集合中各任取一個結(jié)點,距離小于等于距離閾值。設(shè)在{力,…,W中任取一個結(jié)點A,Ur',…,義/]中任取一個結(jié)點義/,假設(shè)力'S(&,,Z)>ffl,則根據(jù)定理2,若力'S(力,則x/在該層中的祖先應(yīng)該在A的左邊;若力'S(A,7/)《w,則%/在該層中的祖先應(yīng)該在A的右邊;而很顯然Ws(A,義/)與力'sU。x/)都小于等于",則義/的祖先的位置矛盾,所以力's(&,至于/'中的其它結(jié)點,則很明顯至少與力和^中一者的距離超過",得證。顯然,同理可以證明對于/上方的任一個層次,引理2同樣成立。這實際上是相當(dāng)于先從每一層中挑選部分結(jié)點,再從這些結(jié)點構(gòu)成的子圖中尋找一個最大完全子圖。6.松弛的核心集驅(qū)動聚類算法LCC(LoosenCore-drivenClusteringalgorithmforXMLKeywordSearch)上面兩個算法雖然有時候效率會很高,但仍然存在不可準(zhǔn)確預(yù)期的低效情況,尤其是算法GKSC強烈依賴于距離閾值對兩結(jié)點間連接數(shù)的影響。由于在大多數(shù)情況下,用戶對結(jié)果并沒有太精確的要求,因而,可以放松對結(jié)果集的要求,允許一些距離稍遠(yuǎn)的結(jié)點在同一個結(jié)果中出現(xiàn),以提高算法的效率。算法LCC正是基于這樣一個思想,它放松對每個結(jié)果集必須是最優(yōu)簇的要求,取而代之的是必定包含最優(yōu)簇的一個結(jié)點集合。算法LCC的步驟如下(1)算法LCC開始時處理仍然和CKSC—樣。首先遍歷層次型數(shù)據(jù)結(jié)構(gòu)#,得到一組原始核心集;(2)對于/Z中的每一層建立兩個列表頭結(jié)點列表Z/AZ和尾結(jié)點列表77^。其中,/WZ和77^分別按順序存放該行中所有原始核心集的第一個和最后一個結(jié)點;(3)對于每個原始核心集G',尋找其它所有層次中的一些原始核心集,這些原始核心集中存在結(jié)點到所有C/中結(jié)點的距離都小于等于(4)找到這些原始核心集后,不是試圖在其中尋找最優(yōu)簇,而是簡單地將它們合并到C。'中形成一個結(jié)果集。7.搜索結(jié)果的排序由于考慮盡量不丟失有意義的結(jié)果,本發(fā)明設(shè)計的聚類算法有時會產(chǎn)生大量結(jié)果,因此,需要對搜索結(jié)果進(jìn)行排序。在關(guān)鍵字搜索的現(xiàn)有工作中,已經(jīng)提出一些排序模型。例如,有些是基于圖上的路徑[1][8][9],有些則是借用信息檢索中的方法[5][6]。本發(fā)明針對上面設(shè)計的聚類搜索算法,設(shè)計了特定的排序方法。它考慮倆方面的因素(1)首先,結(jié)果中出現(xiàn)的關(guān)鍵字種類越多,排序的優(yōu)先級越高;這是顯然的,如果用戶想査的一些內(nèi)容都沒有在某個結(jié)果中出現(xiàn),則該結(jié)果肯定不是最優(yōu)的。(2)對于關(guān)鍵字出現(xiàn)種類相同的結(jié)果,比較它們在結(jié)構(gòu)上的差別,由此引入一個結(jié)果簇的"平均距離"的概念定義8(結(jié)果簇的平均距離)。對于結(jié)果簇集合C中任一個簇G,它的平均距離^、自為它所包含的所有結(jié)點之間兩兩距離的平均值,假設(shè)歷是G所包含的結(jié)點的個數(shù),則G的平均距離如公式(2)所示(c)二,m>12d(2)oo,m=1顯然,一個簇的平均距離越小,則說明它含有的結(jié)點在結(jié)構(gòu)上越緊湊,從而說明它能構(gòu)成更好的返回結(jié)果。所以排序函數(shù)實際上就是取平均距離的倒數(shù),平均距離越小,則排的越高。整個排序的過程如下(1)首先根據(jù)每個簇含有關(guān)鍵字的情況進(jìn)行分組。所有含有相同關(guān)鍵字種類個數(shù)的簇被分入一組,對組進(jìn)行排序,含有越多關(guān)鍵字種類的組排得越靠前;(2)對于同一組內(nèi)的簇,計算它們的平均距離。平均距離越小的簇在組內(nèi)排得越靠前。對所有的簇排好序后,為每個簇生成一個最小組成樹,并按照順序?qū)⑺鼈兎祷亟o用戶。(3)單結(jié)點簇(簇中只包含一個關(guān)鍵字結(jié)點)包含的信息量自然要少于任一個非單結(jié)點簇的最小組成樹,因此它們的平均距離定義為無窮大,所以它們會被排到整個結(jié)果序列的最后。在圖1中,當(dāng)距離閾值被設(shè)定為2.0時會產(chǎn)生四個最優(yōu)簇G=0rbG=U3,W,G=U,&&&}和6;=U,為,^}。其中,G和G包含三個關(guān)鍵字,G和G包含三個關(guān)鍵字。它們的平均距離分別為力、,(G)=0.67,力's,(G)=2.00,=1.33,力's一(G)=0.80。首先四個簇根據(jù)包含的關(guān)鍵字情況被分成兩組(G,C4},{G,G},同一組內(nèi)的簇再根據(jù)平均距離排序,最終四個簇的排列順序是:G,G,G,G。本發(fā)明針對XML關(guān)鍵字搜索,定義了XML關(guān)鍵字搜索的語義距離模型,設(shè)計了三個關(guān)鍵字搜索的算法和搜索結(jié)果的排序模型。本方法的具體操作過程包括(1)定義用戶提交的關(guān)鍵字,并將XML文檔的關(guān)鍵字搜索語義定義為關(guān)鍵字之間的語義距離模型,并以此表示用戶的搜索意圖。該語義距離模型綜合考慮了兩方面的因素來定義兩個關(guān)鍵字之間的語義距離,即兩個關(guān)鍵字結(jié)點之間的路徑長度和它們的LCA的層次。(2)將關(guān)鍵字搜索的返回結(jié)果定義為關(guān)鍵字簇的最小組成樹,其中,定義的相關(guān)概念包括關(guān)鍵字結(jié)點的簇、最優(yōu)簇、簇的最小組成樹。(3)對XML文檔樹進(jìn)行預(yù)處理。(4)在本發(fā)明提出的語義距離模型的基礎(chǔ)上,可以選擇使用如下三種聚類算法進(jìn)行XML關(guān)鍵字搜索GKSC、CKSC、LCC。三個算法在執(zhí)行之前都要進(jìn)行預(yù)處理,包括如下步驟a)使用Dewey編碼為整棵XML文檔樹進(jìn)行編碼。b)為所有的關(guān)鍵字建立倒排索引表。c)對于深度(最大高度)為力的XML文檔樹,建立一個包含有力個有序關(guān)鍵字結(jié)點列表的層次型數(shù)據(jù)結(jié)構(gòu)H。d)先序遍歷XML文檔樹,每遇到一個標(biāo)簽含有關(guān)鍵字的結(jié)點,將它加入相應(yīng)層次的列表的尾部。用戶可以根據(jù)不同的需要,在GKSC、CKSC、LCC三個算法中間做出選擇。從結(jié)果集來看,算法GKSC它可以找到所有的最優(yōu)簇;算法CKSC是由核心集驅(qū)動的,它基于一個假設(shè),即所有最優(yōu)簇必定包含最少一個原始核心集,所以它可能會丟失部分最優(yōu)簇;算法LCC則不考慮最優(yōu)簇的約束。從時間效率上來看,算法CKSC實際上是在算法GKSC的基礎(chǔ)上采用分而治之的思想,總體性能優(yōu)于算法GKSC;算法LCC是在CKSC的基礎(chǔ)上進(jìn)行了優(yōu)化,時間效率要高于CKSC。從空間復(fù)雜度來看,算法GKSC需要儲存兩結(jié)點之間的連接以及距離值,所以當(dāng)距離閾值比較大時需要額外0(//)的儲存空間。算法CKSC和LCC中需要記錄所有的原始核心集(也可以只記錄每個核心集的首尾兩個結(jié)點,因為原始核心集的結(jié)點都是連續(xù)的),需要0(77)的儲存空間。另外,算法CKSC在尋找相關(guān)核心集時還需要建立"結(jié)點-原始核心集"索引表;算法LCC也需要另外兩個列表^VZ和7)VZ,所以算法CKSC和LCC又需要額外的"")的儲存空間。再加上層次型數(shù)據(jù)結(jié)構(gòu)^所占用的空間,算法CKSC和LCC所使用的空間幾乎等同,都不大于3"。算法GKSC所占用的空間為("+),其中后一項的具體值取決于所生成的圖中邊的個數(shù)。圖4顯示了三個算法時間復(fù)雜度的比較。(5)根據(jù)本發(fā)明提出的排序模型,對搜索結(jié)果進(jìn)行排序。其中,定義了結(jié)果簇的平均距離。排序的步驟如下a)首先根據(jù)每個簇含有關(guān)鍵字的情況進(jìn)行分組。b)對于同一組內(nèi)的簇,計算它們的平均距離。C)對所有的簇進(jìn)行排序,平均距離越小的簇在組內(nèi)排得越靠前。之后,為每個簇生成一個最小組成樹,并按照順序?qū)⑺鼈兎祷亟o用戶。圖1為XML文檔示例的樹型結(jié)構(gòu)。圖2層次型數(shù)據(jù)結(jié)構(gòu)H示意圖。圖3為査找核心集示意圖。圖4為三個聚類算法的時間效率比較。圖5為針對DBLP和Treebank的不同平均關(guān)鍵字結(jié)點個數(shù)的比較。圖6為針對關(guān)鍵字個數(shù)的不同,對算法時間效率的比較。其中,(a)為關(guān)鍵字個數(shù)是2時(數(shù)據(jù)集為DBLP)算法時間效率的比較。(b)為關(guān)鍵字個數(shù)是2時(數(shù)據(jù)集為Treebank)算法時間效率的比較。(c)為關(guān)鍵字個數(shù)是3時(數(shù)據(jù)集為DBLP)算法時間效率的比較。(d)為關(guān)鍵字個數(shù)是3時(數(shù)據(jù)集為Treebank)算法時間效率的比較。(e)為關(guān)鍵字個數(shù)是4時(數(shù)據(jù)集為DBLP)算法時間效率的比較。(f)為關(guān)鍵字個數(shù)是4時(數(shù)據(jù)集為Treebank)算法時間效率的比較。(g)為關(guān)鍵字個數(shù)是5時(數(shù)據(jù)集為DBLP)算法時間效率的比較。(h)為關(guān)鍵字個數(shù)是5時(數(shù)據(jù)集為Treebank)算法時間效率的比較。圖7為不同關(guān)鍵字個數(shù)的算法聚集效果的比較,其中,(a)為關(guān)鍵字個數(shù)是2時(數(shù)據(jù)集為DBLP)算法的聚集結(jié)果數(shù)量的比較。(b)為關(guān)鍵字個數(shù)是2時(數(shù)據(jù)集為Treebank)算法的聚集結(jié)果數(shù)量的比較。(c)為關(guān)鍵字個數(shù)是3時(數(shù)據(jù)集為DBLP)算法的聚集結(jié)果數(shù)量的比較。(d)為關(guān)鍵字個數(shù)是3時(數(shù)據(jù)集為Treebank)算法的聚集結(jié)果數(shù)量的比較。(e)為關(guān)鍵字個數(shù)是4時(數(shù)據(jù)集為DBLP)算法的聚集結(jié)果數(shù)量的比較。(f)為關(guān)鍵字個數(shù)是4時(數(shù)據(jù)集為Treebank)算法的聚集結(jié)果數(shù)量的比較。(g)為關(guān)鍵字個數(shù)是5時(數(shù)據(jù)集為DBLP)算法的聚集結(jié)果數(shù)量的比較。(h)為關(guān)鍵字個數(shù)是5時(數(shù)據(jù)集為Treebank)算法的聚集結(jié)果數(shù)量的比較。圖8為聚類算法與IL的時間效率比較。圖9為試驗數(shù)據(jù)的片斷樣例,其中,(a)為XMark數(shù)據(jù)(版本0.92)的DTD的片段。(b)為XMark數(shù)據(jù)(版本0.92)的文檔片段。表l為圖l的語義距離矩陣。具體實施方式本發(fā)明的核心是在基于語義距離模型的基礎(chǔ)上設(shè)計了三種聚類算法,具體實現(xiàn)的偽碼如下(1)GKSC算法Algorithm1(Graph-basedClustering)Input:ahierarchicalstructureOutput:asetofoptimalclustersC1.for(everylist/in//)〃top-down2.for(everynodein/)〃left-right3.findarightwardneighbor4.whileWs(x,,x》<=co)5.//wA:(X/,x》;〃linktwonodes6.findnextrightwardneighborx力7.for(everylist/'inyZoor(y一/7(x,).a;)layersbelow/)8.P《ywt/Z)esc尸as7tow(X/'9.traverseleftwardandrightwardfrom77untildistanceoverflowsandlinkwithneighborscloseenough;10.usegraphpartitionalgorithmtogetoptimalclusterset力W(iDesaPas7YZ0w(X/,〃findthepositionofadescendantofx,in/'1.get:c/sdescendantx乂in/';2.if(x,isthefirstelementof/)3.usebinarysearchtofindasthe/as7Y/0nofXyin/';《else5.searchrightwardsfrom/'.po/她rtofindpasthepositionofx乂;6./'./7o/w/^《7.return算法的第1至第9行是一個遍歷層次型數(shù)據(jù)結(jié)構(gòu)并建立圖的過程。第10行是使用一個圖分解算法來獲得所有的最大完全子圖。一個最大完全子圖可以保證所有兩兩結(jié)點之間都有連接,并且再加入圖中任一個其它結(jié)點都不能構(gòu)成一個完全子圖。所以,它的頂點集合與最優(yōu)簇的定義相符。圖分解算法詳細(xì)的具體做法是從圖中任取一點,考慮與它相連的所有點是否構(gòu)成一個完全子圖,如此遞歸地計算出所有包含有該點的最大完全子圖。對于找出的每個子圖上任意一點,如果它沒有連向子圖外的邊,則將它從圖中刪除。之后再任取圖中一點繼續(xù)算法,直至圖空為止。這時可以獲得一組彼此不包含的完全子圖,即最大完全子圖。算法GKSC的時間復(fù)雜度不只和關(guān)鍵字結(jié)點的個數(shù)有關(guān),而且受距離閾值的影響很大。在一種最壞情況,即閾值"大于2力時,則在遍歷〃的過程中,每個結(jié)點都要與(/^l)個結(jié)點比較,所以時間復(fù)雜度是遍歷結(jié)束后得到的是一個全連接圖,每個結(jié)點的度都是(/^1)。雖然最終的結(jié)果是一個包含所有關(guān)鍵字結(jié)點的大簇,但由于尋找最大完全子圖本身是個NP難的問題[13],當(dāng)所有兩兩結(jié)點間都存在連接時,分解的時間復(fù)雜度會非常高歐))。(2)CKSC算法Algorithm:2(Core-drivenClustering)Input:ahierarchicalstructureOutput:asetofoptimalclustersC1.for(everylist/in7/)2.Co4"0;3.;c/《firstnodeof/;4.for(everynodein/)5.if(dis(;v,,x,)<=o>)6.addintoCb;了.else8.saveCo;9.《0;11.save12.for(everycoreCo)13.OS—yw^e/她dC0—O9);14.c《OS;15.for(eachcoreCc'inCaS)16.c《c門y;7t/7e/"/^^/Cores(C力;17.addcinto1.CS《0;2.for(eachlayer/excepttheoneCbbelongsto)3.Co'《0;4.x/themostleftnodeinCo;5.:\vethemostrightnodeinCo;8.usebinarysearchtofinda:,";9.usebinarysearchtofindx/;10.if(>:/isx,〃orleftofx/")11.addnodesfrom:\:/to;c/'intoCb';12.addCo'intoCS;算法第1至第11行是尋找所有的原始核心集的過程,時間花費為0")。第12行到第17行是為每個核心集尋找最優(yōu)簇。方法/y/7^fe^tec/Cor"中所使用的方法/Y/7G^ce6Wfe^Asi"OT是從GKSC算法的方法打/^fe5c尸o^'"^7變化而來。它除了可以尋找祖先結(jié)點的位置外,還有一個區(qū)別就是拋棄某些結(jié)點采取的遍歷方式而只采用二分法查找。其原因是,由于只需要找每個原始核心集的首尾結(jié)點,而它們的祖先/后代結(jié)點的位置跳動比較大。方法力'/o7fe7s"^br^的第8和第9行為尋找任一層中應(yīng)該被考慮的核心集的過程。在方法/Y/7t^e^"c/Cores中,査找祖先(后代)結(jié)點位置(第6和第7行)的時間為O(bg"),第8行第9行的時間都為O(log"),第11行是0")。所以,三者總共的時間復(fù)雜度為對于每個原始核心集,尋找相關(guān)的核心集需要調(diào)用方法/i/w^7a"otbres—次;而對于找出的其它層次的核心集,為了尋找最優(yōu)簇,每個最多需要調(diào)用方法打/7oye"teotbres(A-l)次,也就是總共(/!-1)2次。所以,算法CKSC的第12至17行所需的時間總共是(A-l)3.(41og"+")。由于力總是一個常數(shù),所以復(fù)雜度仍然是W")。設(shè)原始核心集的數(shù)目是肌可知算法CC的總時間復(fù)雜度是0("+附."),也就是O(m.")。由此可見,這與原始核心集的數(shù)量相關(guān)。與算法GKSC的情況剛剛相反當(dāng)距離閾值"被設(shè)置的很小時,歷接近于",時間復(fù)雜度趨向O(".log");而當(dāng)"很大時,瓜是一個常數(shù),則復(fù)雜度為最壞的情況為"趨向于仏復(fù)雜度為0"2).(3)LCC算法Algorithm3(LoosenCore-drivenClustering)Input:ahierarchicalstructureOutput:asetofclustersC1.findallcoresorigin;2.for(everycoreCo)3.CS<~yw襲/ate(iC騰s(Co);4.c《C&5.for(eachcoreCo'inC5)6.c《cUCo';7.addcintoC;1.CS《0;2.for(eachlayer/excepttheoneCobelongsto)3.x/—themostleftnodeinCo;4.a<~themostrightnodeinCo;5.《,WZXPcw7'ft'o"/wfflVL(x/,/);6.a<■力"ti4Z)尸o礎(chǔ)o"/M77VZ(Xr,/);7.findthemostleftx,"satisfytodis(x,,x,'〕>&)inthenodesofrightof/,;8.findthemostrightx/satisfytodis(xr,x力>o>inthenodesoffflVLleftof/r;9.if(x/isx,"orleftofx/,10.addallcoresoriginbetweenandx/'intoCS1;其中,尋找初始核心集的過程與CKSC—樣(第1行)。方法/Y/7GWe""Gtbre5與CKSC算法中的同名算法有所改變打/7o^7ate沈bres的第5、6行分別是從J的^VZ和7)見而不是從2中尋找祖先(或后代)的位置,第7行和第8行則說明了如果在A(A)位置右邊(左邊)的某核心集的第一個(最后一個)結(jié)點與&(&)的距離超出",則該核心集往右(往左)所有的核心集都沒有必要再考慮??梢钥闯龇椒?i/w^eJa"chores的第5到第8行,每一步的時間復(fù)雜度都是O(log"),而第10行只需記錄下相關(guān)的原始核心集,所以是常數(shù)。假設(shè)初始核心集的數(shù)量是歷,那么顯然算法LCC的時間復(fù)雜度為0("+附.log");當(dāng)辺趨向于/7時達(dá)到最壞情況O(".l0g");當(dāng)歷為常數(shù)時達(dá)到最好情況O")。另外,由于不需要從一組原始核心集中找到最優(yōu)簇,所以LCC調(diào)用方法/Y/w7e^^eoCbres的次數(shù)要明顯少于CC,從而它的時間復(fù)雜度擁有一個比CKSC小的常數(shù)。為了證明本發(fā)明的效果,實現(xiàn)了相應(yīng)的原型系統(tǒng),從四個方面進(jìn)行了一系列實驗(1)比較在同一距離閾值下三個聚類算法的效率和結(jié)果;(2)觀察三個算法的效率和結(jié)果隨著距離閾值變化而產(chǎn)生的變化;(3)對比不同文檔上三個算法的效率和結(jié)果;(4)比較本發(fā)明的XKLuster方法和SLCA方法[2]的效率和結(jié)果。系統(tǒng)運行在CPU頻率2.8GHZ、內(nèi)存2G的微機上,軟件運行環(huán)境是WindowsXP,JDK1.6和Tomcat6.0,XML解析器是Xerces。用作比較三個聚類算法的數(shù)據(jù)集是DBLP(文檔大小127M,結(jié)點總數(shù)6332225個)和Treebank(文檔大小82M,結(jié)點總數(shù)3829511)[12]。選用這兩個文檔的原因有二(1)大量的結(jié)點數(shù)可以提供更加準(zhǔn)確的實驗結(jié)果;(2)兩個文檔的結(jié)構(gòu)有很強的可比性DBLP的DTD比較簡單,因此文檔結(jié)構(gòu)很規(guī)整,樹的高度也不大(最大深度為6,平均深度為2.9),是屬于典型的"寬且平"的XML文檔,而Treebank則沒有DTD,結(jié)構(gòu)很復(fù)雜,樹高也相對較大(最大深度為36,平均深度為7.9)。首先為每個數(shù)據(jù)集建立一個單詞表,其中包含有在XML文檔中出現(xiàn)的一些單詞,每個單詞的出現(xiàn)頻率在5,000到15,000之間。然后,每次隨機從單詞表中選出幾個單詞作為關(guān)鍵字,對XML文檔進(jìn)行搜索,反復(fù)運行四十次,再取結(jié)果的平均值作為實驗結(jié)果。圖5為在不同的關(guān)鍵字個數(shù)情況下文檔中平均含有的關(guān)鍵字結(jié)點總數(shù)的情況;圖6和圖7分別是三個聚類算法在兩個文檔上使用的時間效率和結(jié)果數(shù)量的比較。當(dāng)距離閾值比較大時,(DBLP從6.0開始,Treebank從8.0開始),在實驗用的硬件上運行算法GKSC無論從時間還是空間上來看己經(jīng)很大,所以此時只比較算法CKSC和LCC。另外,在文檔比較大時,所以很多情況下會搜索出大量只包含有單個關(guān)鍵字結(jié)點的簇,這些簇中的結(jié)點在距離閾值內(nèi)無法找到任何一個相鄰結(jié)點,為了使圖的表達(dá)更加清晰,在結(jié)果個數(shù)比較時忽略這些簇,而只考慮包含有兩個以上關(guān)鍵字結(jié)點的簇。在圖6中容易發(fā)現(xiàn)(1)給定關(guān)鍵字個數(shù)和距離閾值,三個算法的時間花費從大到小依次是GKSC,CC,LCC。但當(dāng)距離閾值非常小時(0.0),GKSC算法是花費最小的,(2)隨著距離閾值的增大,GKSC所花費的時間一直增大,而CKSC和LCC所花費的時間則是先增大再減小。這說明圖7中所展示的三個算法的時間復(fù)雜度的特性。在圖7(a)中,當(dāng)距離閾值被設(shè)為0.0時,三個算法的返回結(jié)果都是那些標(biāo)簽中含有多個關(guān)鍵字的結(jié)點。這是因為每一個這種結(jié)點都被看成是不同的幾個結(jié)點;當(dāng)距離閾值為6.0時,幾乎所有的結(jié)點都被聚入了少數(shù)幾個大的簇中;而隨著距離閾值的增大,除了單結(jié)點簇外的結(jié)果數(shù)量先增大,然后再減小為l。圖7中其它部分與圖7(a)的情況基本相同。圖7還說明了GKSC和CKSC的返回結(jié)果數(shù)量相同,而LCC略少。另外還計算了所有返回的簇的平均距離,其中GKSC和CKSC的結(jié)果相同,而LCC的稍大(僅僅在小數(shù)點后四位)。所以,GKSC和CKSC返回同樣的結(jié)果(所有的最優(yōu)簇),而LCC返回了更少并且更大的結(jié)果,并與GKSC和CKSC的結(jié)果相差不大。從圖5中可以看出在關(guān)鍵字個數(shù)一定時,從DBLP中獲得的平均關(guān)鍵字結(jié)點總數(shù)要多于從Treebank中獲得的平均關(guān)鍵字結(jié)點數(shù)。但通過圖6的比較可以看出,無論使用哪種聚類算法,在相應(yīng)的情況下,對于Treebank所花費的聚類時間都要大于(有些是遠(yuǎn)大于)對DBLP所花費的時間,這說明了聚類算法的時間復(fù)雜度不只與關(guān)鍵字結(jié)點總數(shù)相關(guān),還依賴于特定的文檔結(jié)構(gòu)以及實際的關(guān)鍵字結(jié)點的分布情況。當(dāng)樹的高度更大以及結(jié)構(gòu)更加復(fù)雜時,聚類算法的時間花費也會增大。除此之外,在實驗中還實現(xiàn)了XKSearch^中尋找SLCA的算法IL(IndexedLookup),并與之進(jìn)行比較。根據(jù)XKSearch,IL的算法復(fù)雜度為0(|&|.log|S|)。它將所有的關(guān)鍵字結(jié)點按照包含關(guān)鍵字的情況分為一些關(guān)鍵字結(jié)點集(具有相同關(guān)鍵字的結(jié)點在同一個集合中);ISl是其中最小的集合的結(jié)點數(shù),而ISl是所有關(guān)鍵字結(jié)點的總數(shù)。圖8是三個聚類算法和IL算法在DBLP上的時間花費比較(距離閾值為2.0),在其它距離閾值下結(jié)果也類似。從圖8中可以看出,IL的算法效率比任何一種聚類算法的效率都高,原因在于這兩類算法的設(shè)計目標(biāo)不同IL僅僅是從所有關(guān)鍵字結(jié)點中找出一組特殊的結(jié)點,而聚類算法的目的則是在于根據(jù)一個距離閾值找到一個特定的關(guān)鍵字結(jié)點集合的一個劃分。因為本發(fā)明支持關(guān)鍵字之間的"OR"運算,因而通常情況下會得到更多結(jié)果。為了進(jìn)一步進(jìn)行說明,實驗中選用特定的搜索結(jié)果來說明XKCluster和SLCA方法結(jié)果的異同。這里使用XMarkM數(shù)據(jù)集來進(jìn)行兩種方法結(jié)果的比較實驗,因為XMark數(shù)據(jù)集的DTD中包含大量的遞歸元素。圖9(a)是XMark的一個DTD片段。實驗中先使用XMark提供的文檔生成器生成一個XML文檔,然后使用兩種方法分別對該文檔進(jìn)行關(guān)鍵字搜索。圖9(b)是該文檔的一個文檔片段。如果使用"M^'w"和"0^ar"作為搜索的關(guān)鍵字,,貝IJSLCA方法能夠找出一個SLCA結(jié)點"torf",,然后可以依此返回以該結(jié)點為根的子樹(是一封郵件的正文)。SLCA方法在選取結(jié)果時認(rèn)為LCA相對最低的結(jié)果最優(yōu)秀,但對于得到的所有結(jié)果卻不能按照LCA的高低排序。所以即使提供了某種結(jié)果的擴(kuò)展方法,用戶也很難確定對哪個結(jié)果使用該方法,所以不能得到該郵件的其它信息(比如日期)。而只要距離閾值的大小設(shè)置合理,本發(fā)明的方法可以得到"ma/r結(jié)點和"tec,"結(jié)點,從而能夠得到更多的信息。實際在現(xiàn)實使用的文檔中,這種情況經(jīng)常發(fā)生。因為一封郵件的發(fā)送者和接收者的名字往往會在郵件正文中出現(xiàn)。另外,"feywoW元素會導(dǎo)致更多類似情況的出現(xiàn),因為在DTD中,它直接指向自己形成遞歸。參考文獻(xiàn)[ijV.Hristidis,Y.Papakonstantinou,andA.Balmin.KeywordproximitysearchonXMLgraphs.InICDE,2003.[2jY.Xu,Y.Papakonstantinou.EfficientKeywordSearchforSmallestLCAsinXMLDatabases.InSIGMOD,2005.[3]Y.Li,C.Yu,andH.V,Jagadish.Schema-FreeXQuery.InVLDB,2004.[4jV.Hristidis,N.Koudas,Y.Papakonstantinou,andD.Srivastava.KeywordProximitySearchinXMLTrees.InIEEETransactionsonKnowledgeandDataEngineering,2006[5jS.Cohen,J.Mamou,Y.Kanza,andY.Sagiv.XSEarch:ASemanticSearchEngineforXML.InVLDB,2003.[6jL.Guo,F(xiàn).Shao,C.Botev,andJ.Shanmugasundaram.XRANK:RankedKeywordSearchoverXMLDocuments.InSIGMOD,2003.[7jZ.LiuandY.Chen.IdentifyingMeaningfulReturnInformationforXMLKeywordSearch.InSIG腳,2007.[8jG.Bhalotia,A.Hulgeri,C.Nakhe,S.Chakrabaxti,andS.Sudaxshan.KeywordsearchingandbrowsingindatabaseusingBANKS.InICDE,2002.V.HristidisandY.Papakonstantinou.Discover:Keywordsearchinrelationaldatabases.InVLDB,2002.[io]S,Agrawal,S.Chaudhuri,andG.Das.DBXplorer:Asystemforkeyword-basedsearchoverrelationaldatabase.InICDE,2002.[ii]H.He,H.Wang,J.Yang,andP.S.Yu.BLINKS:RankedKeywordSearchesonGraphs.InSIGMOD,2007.[12]http://www.cs.Washington,edu/research/xmldatasets/www/repository.html[n〗T.Feder,P.Hell,S.Klein,andR.Motwani.Complexityofgraphpartitionproblems.InSIGACT,1999.[14]Xmark,http:〃monetdb.cwi.nl/xml/.表1<table>tableseeoriginaldocumentpage24</column></row><table>權(quán)利要求1、一種基于語義距離模型的XML文檔關(guān)鍵字搜索聚類方法,其特征在于具體步驟如下(1)定義用戶提交的關(guān)鍵字,并將XML文檔的關(guān)鍵字搜索語義定義為關(guān)鍵字之間的語義距離模型,并以此來表示用戶的搜索意圖;(2)將關(guān)鍵字搜索的返回結(jié)果定義為關(guān)鍵字簇的最小組成樹;(3)XML文檔樹進(jìn)行預(yù)處理;(4)根據(jù)本發(fā)明提出的語義距離模型,選擇使用如下三種聚類算法之一種進(jìn)行XML關(guān)鍵字搜索基于圖的聚類算法、核心集驅(qū)動的聚類算法和松弛的核心集驅(qū)動聚類算法;(5)根據(jù)排序模型,對搜索結(jié)果進(jìn)行排序。步驟(1)中將用戶提交的關(guān)鍵字定義為一個包含t個關(guān)鍵字的集合L={ki|i=1,…,t},XML文檔定義為一棵XML文檔樹,具體如下定義1.XML文檔樹,將一顆XML文檔樹表示為一個8元組d=(V,E,X,label(id),pl(id1,id2),depth(id),dwcode(id),lca(V′)),其中(1)V是樹上所有結(jié)點的集合,并且每個結(jié)點都有唯一的標(biāo)識符和Dewey編碼;(2)EV×V,是樹上邊的集合;(3)label(id)為標(biāo)簽函數(shù),用來獲得標(biāo)識為id的結(jié)點的標(biāo)簽,其中id∈V;(4)XV是樹上所有關(guān)鍵字結(jié)點的集合,所謂關(guān)鍵字結(jié)點即標(biāo)簽中包含關(guān)鍵字的結(jié)點;(5)pl(id1,id2)函數(shù),用來取得id1和id2兩個結(jié)點之間的路徑長度,其中id1和id2必須具有祖先后代關(guān)系,而此函數(shù)返回的結(jié)果為它們之間的路徑上所包含的邊的個數(shù);(6)depth(id)函數(shù),用來獲得標(biāo)識為id的結(jié)點的深度(樹的根的深度為1),其中id∈V;(7)dwcode(id)函數(shù),用來獲得標(biāo)識為id的結(jié)點的Dewey編碼,其中id∈V;(8)lca(V′)函數(shù),其中V′V是V的任意子集,函數(shù)返回V′中所有結(jié)點的最低公共祖先;定義2.兩個關(guān)鍵字結(jié)點之間的最短路徑,兩個關(guān)鍵字結(jié)點xi和xj的最短路徑為結(jié)點xi到lca({xi,xj})的路徑加上結(jié)點xj到lca({xi,xj})的路徑;同時,用函數(shù)spl(xi,xj)來表示結(jié)點xi和xj的最短路徑的長度,顯然spl(xi,xj)=pl(lca({xi,xj}),xi)+pl(lca({xi,xj}),xj);定義兩個關(guān)鍵字結(jié)點之間的語義距離,XML文檔樹上任意兩個關(guān)鍵字結(jié)點之間的語義距離dis(xi,xj)被定義如下2、根據(jù)權(quán)利要求1所述的基于語義距離模型的XML文檔關(guān)鍵字搜索聚類方法,其特征在于所述步驟(4)中,三種聚類算法具體步驟如下(一)基于圖的關(guān)鍵字搜索聚類算法的具體步驟如下(1)從上到下按層次訪問#中的結(jié)點,在每一層的列表中,從左到右遍歷,對于當(dāng)前訪問結(jié)點,計算它和同層右邊以及下面的某些鄰居的距離;(2)對于更低層次的結(jié)點,首先確定有多少層次的結(jié)點需要被考慮;給定一個",距離公式必須滿足<formula>formulaseeoriginaldocumentpage4</formula>,又由于<formula>formulaseeoriginaldocumentpage4</formula>所以<formula>formulaseeoriginaldocumentpage4</formula>成立,也就是說<formula>formulaseeoriginaldocumentpage4</formula>所以<formula>formulaseeoriginaldocumentpage4</formula>是x,下面必須考慮的層次的數(shù)目,其中Z7oor函數(shù)表示向下取整;(3)計算出所需要考慮的層次數(shù)目后,對于A下方y(tǒng)7oor(鄉(xiāng)A(;c,)w)層中的每一層,首先找到x的后代在該層中的位置,再從該位置向左遍歷直至距離超出閾值,在這一層中,其它結(jié)點都不需要參與考慮;當(dāng)A是所屬層中的第一個結(jié)點時,使用二分法去尋找它在y7o。K^^0O.w)個低層次列表中后代結(jié)點的位置,并且用指針記錄下這些位置;而當(dāng)義,不是第一個結(jié)點時,只從那些記錄的位置開始向右尋找后代結(jié)點的位置,之后再修改指針到當(dāng)前位置;(4)每次計算兩個結(jié)點的距離時,如果小于或等于距離閾值,則將該兩個結(jié)點用邊連接起來,并且記錄下距離作為該邊的權(quán);(5)上一步結(jié)束后,可以得到一個加權(quán)的無向圖,然后再將圖分解得到所有的最大完全字圖,從而得到結(jié)果簇;(二)核心集驅(qū)動的聚類算法的步驟如下定義核心集,對于距離閾值"來說,任一個關(guān)鍵字集合C。^X,如果它所包含的關(guān)鍵字結(jié)點中任意兩者之間的距離都小于或等于",則G被稱為一個核心集(core);定義原始核心集,^中的一個結(jié)點集合C/被稱為一個原始核心集(coreorigin),當(dāng)且僅當(dāng)(l)C/是一個核心集;(2)CZ中的結(jié)點都處于^的同一層次;(3)在該層次中不存在一個核心集C。使得CcC。;(1)首先遍歷僅將〃中的結(jié)點分成一些核心集,對于^的每一層,具體的做法是創(chuàng)建一個空集,將該層第一個結(jié)點加入,從第二個結(jié)點開始往后遍歷,計算第一個結(jié)點與遍歷當(dāng)前結(jié)點之間的距離;如果小于等于"則將之加入集合;當(dāng)遇到距離超出"的第一個結(jié)點時,再創(chuàng)建一個空集,以該結(jié)點為集合中第一個結(jié)點繼續(xù)遍歷,直至該層中所有結(jié)點都已遍歷完;一個原始核心集所包含的是^上同一層次中相鄰的一組結(jié)點,所以,U…,W是一個原始核心集;(2)再尋找原始核心集周圍的核心集,求出包含這些原始核心集的最優(yōu)簇,當(dāng)找出…,W在所有層次上需要考慮的核心集后,在每一層取一個核心集組成一個核心集的集合,在該集合內(nèi)尋找包含^,,;d的最優(yōu)簇;(三)松馳的核心集驅(qū)動聚類算法的具體步驟如下(1)首先遍歷層次型數(shù)據(jù)結(jié)構(gòu)#,得到一組原始核心集;(2)對于^中的每一層建立兩個列表頭結(jié)點列表^VA和尾結(jié)點列表77\^;其中,WZ和77^分別按順序存放該行中所有原始核心集的第一個和最后一個結(jié)點;(3)對于每個原始核心集6T,尋找其它所有層次中的一些原始核心集,這些原始核心集中存在結(jié)點到所有C。'中結(jié)點的距離都小于等于";(4)找到這些原始核心集后,將它們合并到C/中形成一個結(jié)果集。全文摘要本發(fā)明屬于Web數(shù)據(jù)管理
技術(shù)領(lǐng)域:
,具體為一種基于語義距離模型的可擴(kuò)充標(biāo)記語言(XML)的關(guān)鍵字搜索方法,稱為XKLuster。本發(fā)明提出一種新的模型,稱為“XML關(guān)鍵字語義距離模型”。它通過更全面地考慮XML的層次結(jié)構(gòu)特征來度量XML關(guān)鍵字搜索的語義;基于本發(fā)明提出的“XML關(guān)鍵字語義距離模型”,從不同的角度,設(shè)計三種聚類算法基于圖的關(guān)鍵字聚類算法(GKSC)、核心集驅(qū)動的關(guān)鍵字聚類算法(CKSC)和松弛的核心集驅(qū)動聚類算法(LCC);提出一種排序模型對所有的搜索結(jié)果進(jìn)行排序,以便將搜索結(jié)果返回給用戶。與已有方法相比,本發(fā)明提出的方法可得到更加合理的返回結(jié)果。本發(fā)明可用于互聯(lián)網(wǎng)上的XML文檔搜索、XML數(shù)據(jù)庫的搜索等領(lǐng)域。文檔編號G06F17/30GK101241502SQ20081003454公開日2008年8月13日申請日期2008年3月13日優(yōu)先權(quán)日2008年3月13日發(fā)明者皓朱,楊衛(wèi)東申請人:復(fù)旦大學(xué)