專利名稱:基于CPat-Tree的網(wǎng)絡內(nèi)容分級索引結構和裁剪方法
技術領域:
本發(fā)明屬于文本信息檢索和互聯(lián)網(wǎng)技術等領域,具體涉及一種互聯(lián)網(wǎng)內(nèi)容實體分類分級索引結構和在該結構上的裁剪方法。
背景技術:
隨著網(wǎng)絡技術的高速發(fā)展,互聯(lián)網(wǎng)越來越多的深入到人們的工作和生活中,成為發(fā)布和獲取信息的重要渠道。然而,由于互聯(lián)網(wǎng)信息發(fā)布和獲取存在高匿名性、高隱私性、高互動性和無地域性等特點,難以對參差不齊的信息內(nèi)容進行有效管理和制約,這給公眾生活和社會生產(chǎn)帶來了嚴重的負面影響。
在公眾的生活方面,當前互聯(lián)網(wǎng)上充斥大量以暴力、色情、反政府和反社會為主要內(nèi)容的不良信息,正極大干擾著人們的視聽,對社會的健康發(fā)展造成了不利影響。根據(jù)美國N2H2公司2003年的統(tǒng)計,全球大致有8%的網(wǎng)頁是色情網(wǎng)頁,每天向搜索引擎提交的請求中有四分之一有關色情內(nèi)容;同時以反政府、反社會為內(nèi)容的網(wǎng)站網(wǎng)頁和電子郵件無孔不入。
在社會生產(chǎn)方面,不設防的計算機網(wǎng)絡常常給企業(yè)的企業(yè)文化、生產(chǎn)成本和效率帶來嚴重的負面影響[1]。首先員工經(jīng)常在工作時間利用互聯(lián)網(wǎng)進行與工作無關的行為,占用工作時間,直接導致生產(chǎn)力下降;其次,員工與工作無關的使用互聯(lián)網(wǎng)、許多惡意網(wǎng)站帶來的蠕蟲病毒和垃圾郵件占用了大量通向互聯(lián)網(wǎng)的出口帶寬,企業(yè)為此額外支付大量費用;不安全的網(wǎng)頁包含的惡意代碼、特洛伊木馬程序和間諜軟件(spyware)還會對企業(yè)商務和科研信息進行盜用和破壞。IDC公司的一份報告指出30%-40%的企業(yè)出口網(wǎng)絡帶寬消耗在員工的私人目的;北美管理聯(lián)合會的報告指出有27%的財富500強企業(yè)都曾陷入員工不正當使用互聯(lián)網(wǎng)和電子郵件傳播色情信息的丑聞中。
網(wǎng)絡的負面效應之大,不良信息內(nèi)容之廣,是人們始料未及的。為了保障互聯(lián)網(wǎng)信息的內(nèi)容安全,為社會公眾開辟一個“潔凈”的網(wǎng)絡世界,為企業(yè)合理安全的使用網(wǎng)絡資源提供技術保障,研究和開發(fā)網(wǎng)絡內(nèi)容安全工具具有重要的現(xiàn)實意義[7]。
目前常見的網(wǎng)絡內(nèi)容安全技術主要有標簽過濾、關鍵字過濾、URL過濾、分類過濾和內(nèi)容過濾等[2][3]。由于這些內(nèi)容過濾技術分別存在難以監(jiān)督實施、難以保證分級信息實時性和實現(xiàn)復雜度高等缺點,所以投入研發(fā)和運營的網(wǎng)絡內(nèi)容過濾系統(tǒng)往往結合上述幾種過濾技術共同實現(xiàn)。
URL過濾是網(wǎng)絡內(nèi)容過濾系統(tǒng)中最常用的技術之一,其主要通過比較用戶請求和預定義的分級信息來確定是否攔截用戶請求。傳統(tǒng)URL過濾技術采用的數(shù)據(jù)索引結構主要有Trie結構和散列表兩種[5]?;赥rie索引結構的優(yōu)點是查詢效率很高,缺點是實現(xiàn)過程中將消耗較大內(nèi)存量,序列化和反序列化的復雜度較高,在磁盤存取和網(wǎng)絡傳輸?shù)倪^程中需要進行復雜的轉化。基于散列表的優(yōu)點是查詢效率非常高,而且因為使用線性數(shù)組表示索引結構,所以序列化和反序列化復雜度較低。其缺點是散列函數(shù)的選取和應用增加了實現(xiàn)復雜度,散列表的存儲空間依舊保持在一個相對較高的水平。
本發(fā)明的創(chuàng)新點在于,提出了基于CPat-Tree[6]結構實現(xiàn)的網(wǎng)絡內(nèi)容分級索引結構,和直接在存儲數(shù)組上實現(xiàn)的裁剪方法。利用該索引結構和裁剪算法,可使得內(nèi)容分級索引結構的存儲容量能達到非常小的水平,還可大幅提升查詢效率。
本發(fā)明不僅可以用于內(nèi)容過濾系統(tǒng)的URL攔截技術中,也可以應用于信息檢索的其它領域。例如內(nèi)容傳遞網(wǎng)絡(CDN,Content Delivery Network)[8]和組播樹(MulticastRouting Tree)[9]建模等。
參考文獻1.Jacob Palme.Information Filtering.http//cmc.dsv.su.se/select/information-filtering.pdf,1998-06-01.
2.Jonathan Zittrain,Benjamin Edelman.Internet Filtering in China.IEEE Internet Computing,2003,7(2)70-77.
3.Justin Basilico,Thomas Hofmann.A joint framework for collaborative and content filtering.27th Annual International ACM SIGIR Conference.NYACM Press,2004550-551.
4.Menahem Friedman and Abraham Kandel.Introduction to Pattern Recognition-Statistical,Structural,Neural And Fuzzy Logic Approaches.World Scientific,1999.
5.Zornitza Genova Prodanoff.Performance Evaluation of URL Routing for ContentDistribution Networks.SFUniversity of South Florida,2003.
6.M.Shishibori,M.Okada,T.Sumitomo and J.Aoe.Design of a Compact Data Structure for thePatricia Trie.IEICE Transactions on Information and Systems,1998,Vol.E81-D,No.4,pp.364-371.
7.Chen Ding,Chi-Hung Chi,Jing Deng,and Chun-Lei Dong.Centralized Content-Based WebFiltering and BlockingHow Far Can It Go?In Proceeding of IEEE InternationalConference on Systems,Man and Cybernetics(SMC),1999.
8.Survey of Content Delivery Networks(CDNs),http//cgi.di.uoa.gr/~grad0377/cdnsurvey.pdf.
9.Gaurav Sharma.Internet topology and tomography.https//engineering.purdue.edu/people/gaurav.sharma.3/Reports/Modeling.ppt,2005-04.
符號表(在本發(fā)明的全部文檔中所采用符號的含義)TreeMap按前序順序記錄CPat-Tree樹節(jié)點結構的比特數(shù)組NodeMap按前序順序記錄CPat-Tree樹節(jié)點包含比特數(shù)目的比特數(shù)組EList 按前序順序記錄CPat-Tree樹節(jié)點包含比特值的比特數(shù)組IFArray按前序順序記錄CPat-Tree樹葉子節(jié)點對應的信息矢量{L0,L1,L2...Lu} CPat-Tree結構中樹葉子節(jié)點對應的信息矢量集合C 簇中心點到對應葉子節(jié)點的映射Cj第j個簇中心γ聚類球體的固定半徑L 表示當前節(jié)點B 表示當前節(jié)點的兄弟節(jié)點F 表示當前節(jié)點的父親節(jié)點TreePosTreeMap數(shù)組游標valid、father、brother和ifpos valid元素表示當前節(jié)點的有效性;father和brother元素標記當前節(jié)點的父親節(jié)點和兄弟節(jié)點在TreeMap和NodeInfo數(shù)組中的下標;ifpos元素標記當前節(jié)點在IFArray的起始位置。
nipos NodeInfo數(shù)組的游標nodepos NodeMap數(shù)組的游標
TreeMap′、NodeMap′、EList′和IFArray′分別是重組后的幾個存儲數(shù)組發(fā)明內(nèi)容本發(fā)明的目的在于提出一種基于CPat-Tree實現(xiàn)的網(wǎng)絡內(nèi)容分級索引結構模型和以此結構為基礎的裁剪算法,使得索引結構存儲空間大幅降低。
下面先介紹URL的概念。
URL是Uniform Resource Locator(統(tǒng)一資源定位器)的縮寫,其數(shù)據(jù)結構為協(xié)議//主機名端口號/目錄路徑/文件名。
URL與網(wǎng)站或服務器上一個具體的數(shù)據(jù)對象對應,例如一個URL對應一個門戶站點或BBS服務器,也可對應一個站點中一個目錄下的一幅特定圖片。因此,如果要阻止用戶訪問某個網(wǎng)站、服務器或特定數(shù)據(jù)對象,則只要阻止向網(wǎng)絡用戶發(fā)送該URL請求即可。
協(xié)議段說明Internet的資源類型,如http表示超文本傳輸協(xié)議或WWW。其他協(xié)議有ftp(表示文件傳輸協(xié)議)、telnet(表示遠程登錄)、news(表示新聞組)、mailto(表示電子郵件)、mms(表示流媒體)等。
主機名段說明Internet的服務器名,例如www.fudan.edu.cn。目錄路徑段指出文件或部分文件在internet服務器上位置。每一級目錄以一個正斜杠(/)符號隔開。
文件名段是將要訪問的文檔、圖像或腳本的實際名稱,例如index.html、logo.gif、script.cgi。端口號、目錄路徑、文件名這些都屬于URL的可選組成部分。
下面給出一些URL的實例http//www.w3.org/index.html該URL對應一個網(wǎng)站http//10.64.130.4/images/advice.gif該URL對應一幅圖片ftp//10.11.3.8該URL對應一個FTP服務器mms//10.11.4.6/abc.avi該URL用于點播一個音像節(jié)目telnet//bbs.fudan.edu.en該URL對應一個BBS服務器本發(fā)明提出的網(wǎng)絡內(nèi)容分級索引結構基于CPat-Tree實現(xiàn)。模型采用TreeMap、NodeMap、EList和IFArray等幾種數(shù)據(jù)結構存儲整個CPat-Tree。和CPat-Tree[6]中的定義一樣,TreeMap和NodeMap是按前序順序記錄樹結構的比特數(shù)組,EList和IFArray則是本發(fā)明引入輔助紀錄信息的數(shù)組,EList記錄節(jié)點標記的比特序列,IFArray記錄每個節(jié)點對應的信息矢量。具體來說,(1)分級索引結構由TreeMap、NodeMap、EList和IFArray數(shù)組聯(lián)合組成;其中,(2)TreeMap比特數(shù)組按前序順序記錄CPat-Tree的樹狀節(jié)點結構,以比特0標記內(nèi)部節(jié)點,比特1標記外部節(jié)點;(3)NodeMap比特數(shù)組按前序順序記錄每個節(jié)點包含的比特數(shù)目,用1個比特0和若干比特1聯(lián)合標記,其總數(shù)目等于節(jié)點包含比特數(shù)目;(4)EList比特數(shù)組按前序順序存儲每個節(jié)點包含的比特值;(5)IFArray數(shù)組按前序順序記錄葉子節(jié)點攜帶的信息矢量。
本發(fā)明提出的裁剪算法直接針對索引結構的存儲數(shù)組實現(xiàn)。其主要思想是互聯(lián)網(wǎng)上許多網(wǎng)站或目錄下的網(wǎng)絡實體具有相同或相似的信息矢量,并且具有相同的URL前綴。擁有相同前綴的具有相同或相似信息矢量的URL可以用其共同的前綴來替代,以此減少索引結構的存儲空間。基本步驟如下聚類過程將CPat-Tree中每個葉子節(jié)點根據(jù)信息矢量映射到矢量空間中一點,用空間模式識別的方法,把所有的點劃分為若干不重合的簇,每個簇由一個固定半徑的空間球體標識,簇中的點同處于一個球體中,落在同一個球體中的葉子節(jié)點被認為是相似(擁有相同)的信息矢量,這個信息矢量作為該聚類的綜合信息矢量,對應球體的中心點;合并過程根據(jù)合并規(guī)則,依次把每個簇中的葉子節(jié)點向上合并,刪除該葉子節(jié)點,使其父親節(jié)點成新葉子節(jié)點。新葉子節(jié)點的信息矢量用簇中心的綜合信息矢量代替。
重組過程去除臨時布爾數(shù)組標記的合并掉的節(jié)點,重新生成裁剪過的存儲數(shù)組。經(jīng)歷過重組過程后,裁剪過程結束,索引依然保持著CPat-Tree結構。
本發(fā)明中,聚類過程從IFArray數(shù)組中獲取葉子節(jié)點的信息矢量,在矢量空間中聚類,計算聚類的中心節(jié)點對應的信息矢量作為聚類的綜合信息矢量。確定葉子節(jié)點是否相似的方法將葉子節(jié)點按攜帶的信息映射到矢量空間中的點,采用TOD方法來聚類。
合并過程對有相近信息矢量的相鄰葉子節(jié)點進行合并,葉子節(jié)點被注銷,父親節(jié)點被置為新葉子節(jié)點。合并過程對CPat-Tree數(shù)據(jù)結構的節(jié)點按逆前序順序遍歷一次即可完成。為了避免頻繁的合并操作帶來頻繁的比特移位操作,合并過程利用一個與TreeMap數(shù)組等長的臨時布爾數(shù)組紀錄被注銷掉的節(jié)點,在隨后的重組過程中一次性生成裁剪后的存儲數(shù)組。True值表示TreeMap數(shù)組中相應節(jié)點未被注銷,F(xiàn)alse值表示TreeMap數(shù)組中相應節(jié)點已注銷。
圖1CPat-Tree索引模型的樹狀示意圖。
圖2CPat-Tree索引模型的存儲數(shù)組示意圖。
圖3160000/320000條URL構成的CPat-Tree索引在各種相似度下的存儲容量比較示意圖(對數(shù)圖)。
圖432000/96000/160000/320000條URL構建的CPat-Tree分別在相似度0.3-0.9下的TreeMap裁剪剩余率圖。
圖532000/96000/160000/320000條URL在相似度0.3-0.9下生成的裁剪過的CPat-Tree的查詢效率變化趨勢圖。
具體實施例方式
CPat-Tree索引結構本發(fā)明采用改進的CPat-Tree來索引唯一標記網(wǎng)絡實體的URL編碼和分類分級信息。每個URL編碼作為唯一標識實體的鍵插入CPat-Tree,每個鍵的生成規(guī)則(URL的編碼規(guī)則)保證了一個鍵不是另一個鍵的前綴。從根節(jié)點到葉子節(jié)點經(jīng)歷的二元序列對應鍵的比特序列。模型采用TreeMap、NodeMap、EList和IFArray等幾種數(shù)據(jù)結構存儲整個CPat-Tree。和CPat-Tree中的定義一樣,TreeMap和NodeMap是按前序順序記錄樹結構的比特數(shù)組,EList和IFArray則是本發(fā)明引入輔助紀錄信息的數(shù)組,EList記錄節(jié)點標記的比特序列,IFArray記錄每個節(jié)點對應的信息矢量。
如圖所示,附圖1給出了一個簡單的改進的CPat-Tree的結構圖,每個節(jié)點有1個標記比特和若干個隱含比特。標記比特為0標識該節(jié)點是父節(jié)點的左子,否則為父節(jié)點的右子;隱含比特對應了Full-Trie和Ordinary Trie中單子節(jié)點序列。深色節(jié)點標記有隱含比特序列的節(jié)點,淡色節(jié)點標記無比特節(jié)點。隱含比特的數(shù)目可以為0,也可以為非0正整數(shù)。根節(jié)點為空節(jié)點,無標記比特和隱含比特。附圖2對應附圖1給出了改進CPat-Tree的存儲數(shù)據(jù)結構。幾種數(shù)據(jù)結構的定義如下(1)TreeMap比特數(shù)組按前序順序標記CP-Tree的樹節(jié)點,用比特0標記內(nèi)部節(jié)點,比特1標記葉子節(jié)點。
(2)NodeMap比特數(shù)組按前序順序標記每個樹節(jié)點所包含比特的位數(shù),1位比特0標記節(jié)點的標記比特,比特1標記隱含比特。比特1的數(shù)目等于隱含比特的數(shù)目。
(3)EList比特數(shù)組按前序順序記錄每個樹節(jié)點標示的比特值,EList與NodeMap數(shù)組等長,NodeMap中每個比特的取值分別對應著EList數(shù)組中每個比特值;EList數(shù)組與NodeMap數(shù)組等長。
(4)IFArray數(shù)組保存了鍵在信息空間中的矢量。IFArray數(shù)組按前序遍歷過的葉子節(jié)點順序記錄鍵的信息矢量。IFArray數(shù)組中矢量的數(shù)目等于TreeMap數(shù)組中比特1(葉子)的數(shù)目。
裁剪算法聚類過程聚類過程根據(jù)葉子節(jié)點的信息矢量,把每個葉子節(jié)點映射到矢量空間中的一個點,使用模式識別中的聚類方法來對點進行聚類。聚類的結果,對應不同URL的CPat-Tree中的葉子節(jié)點被劃分在不同的簇中,簇中所有葉子節(jié)點的信息矢量用簇中心對應的信息矢量代替。本發(fā)明主要基于TOD(Threshold Order-Dependent Clustering Algorithm)[4]方法的聚類過程實現(xiàn)。其主要思想如下定義樣本點集合為IFArray數(shù)組中的所有葉子節(jié)點信息矢量{L0,L1,L2...Lu};足夠小的球半徑γ作為判斷樣本點是否存在于某個簇的決策邊界;存儲簇中心點和包含葉子節(jié)點的數(shù)組C。首先將L0作為第一個簇的中心C0;然后依次把樣本點Li(1≤i≤u)與聚類中心順序比較,若存在某個Cj滿足||Li-Cj||=mink||Li-Ck||]]>且‖Li-Cj‖<γ,則將Li歸入以Cj為中心的簇中,并重新計算簇Cj的中心;若不存在滿足上述條件的簇中心,則把Li作為一個新的簇中心。
合并過程合并過程的步驟為了避免合并葉子節(jié)點操作產(chǎn)生的頻繁的移位操作,定義了一個與TreeMap數(shù)組等長的臨時結構數(shù)組,用于標記合并過程后TreeMap數(shù)組的各個元素的有效性。
定義合并過程使用的數(shù)據(jù)結構如下
(1)當前處理節(jié)點L,L節(jié)點的兄弟節(jié)點B,L和B節(jié)點的父親節(jié)點F;(2)TreeMap數(shù)組的游標TreePos;(3)NodeInfo,結構數(shù)組,與TreeMap數(shù)組等長,每個結構標記TreeMap中相應節(jié)點的信息。每個結構包括valid、father、brother和ifpos元素。其中valid元素表示當前節(jié)點的有效性,true值表示有效,false表示無效;father和brother元素標記當前節(jié)點的父親節(jié)點和兄弟節(jié)點在TreeMap和NodeInfo數(shù)組中的下標;ifpos元素標記當前節(jié)點在IFArray的起始位置。
合并過程步驟如下步驟1.{初始化}初始化NodeInfo數(shù)組的各個元素,其中valid元素初始化為true值;令TreePos←TreeMap.size-1,以指向TreeMap的最后一個元素。
步驟2.{判斷當前節(jié)點的有效性}若TreePos≤0,則節(jié)點遍歷過程結束,轉步驟7;否則令當前節(jié)點為L,若NodeInfo[TreePos].valid=false,則L已被刪除,TreePos遞減1,轉步驟2;步驟3.{定位葉子節(jié)點}令TreePos指向TreeMap的值為0,意味著指向的是非葉子節(jié)點,則TreePos遞減1,轉步驟2;否則指向的是葉子節(jié)點,轉步驟4。
步驟4.{定位父親和兄弟節(jié)點}從NodeInfo[TreePos].father和NodeInfo[TreePos].brother定位L的父親節(jié)點F和兄弟節(jié)點B的位置。若B節(jié)點在TreeMap中標記0,則表明兄弟節(jié)點是內(nèi)部節(jié)點,那么放棄對當前葉子的合并,TreePos遞減1,轉步驟2;否則轉步驟5。
步驟5.{檢查是否滿足合并條件}從NodeInfo[TreePos].ifpos和NodeInfo[NodeInfo[TreePos].brother].ifpos定位L和B的信息矢量,若L和B同處于同一個簇,轉步驟6;否則TreePos遞減1,轉步驟2。
步驟6.{合并節(jié)點}注銷葉子節(jié)點,置L和B在NodeInfo數(shù)組中的valid值為false(節(jié)點失效);置父親節(jié)點為新葉子節(jié)點,置F對應TreeMap的位置為1;NodeInfo中新葉子節(jié)點的信息矢量值指向L在IFArray中的相應位置,并將L所在聚類的綜合信息矢量置入;將新葉子節(jié)點作為下一輪計算的節(jié)點,TreePos←TreeMapF,轉步驟2。
步驟7.{結束}合并過程結束。
在上述過程中,如果葉子節(jié)點L的兄弟節(jié)點B是內(nèi)部節(jié)點,或者B是葉子節(jié)點但與不在同一個簇中,那么L和B不能被合并。此時在NodeMap中重新設置L節(jié)點的長度為1,可以減少存儲空間。
重組過程在節(jié)點的合并過程中,只有當前節(jié)點和兄弟節(jié)點都為葉子節(jié)點且處于同一個簇中的情況可以進行合并操作。合并過程的結果是一些節(jié)點被注銷,NodeInfo數(shù)組結構的valid用于標記節(jié)點是否被注銷,重組過程根據(jù)此信息重新生成存儲數(shù)組。
定義nipos和nodepos分別是NodeInfo數(shù)組和NodeMap數(shù)組的游標,TreeMap′、NodeMap′、EList′和IFArray′分別是重組后的幾個存儲數(shù)組。重組過程實現(xiàn)過程步驟如下步驟1.{初始化}初始化游標,nipos←0,nodepos←0。
步驟2.{跳過已注銷節(jié)點}對于nipos標記的NodeInfo數(shù)組中的結構,若NodeInfo[nipos].valid=false,表明該節(jié)點已被注銷,nipos遞增1,nodepos遞增直至NodeMap[nodepos]再次為0,轉步驟2;否則,該節(jié)點未被注銷,轉步驟3。
步驟3.{判斷輸出節(jié)點的類型}若TreeMap[nipos]=0,則轉步驟4輸出內(nèi)部節(jié)點;否則轉步驟5輸出葉子節(jié)點。
步驟4.{輸出內(nèi)部節(jié)點}令i=0,執(zhí)行以下a)b)c)三個子步驟分別向TreeMap′、NodeMap′和EList′輸出該節(jié)點的存儲信息,然后轉步驟6;(a)向TreeMap′輸出比特0(b)向NodeMap′輸出NodeMap[nodepos+i],i遞增1;重復此過程直至NodeMap[nodepos+i]再次為0,記錄輸出長度為nodelen=i。
(c)向EList′輸出從EList[nodepos]開始長度為nodelen的一段比特序列。步驟5.{輸出葉子節(jié)點}令i=0,執(zhí)行以下a)b)c)d)四個子步驟分別向TreeMap′、NodeMap′、EList′和IFArray′輸出該節(jié)點的存儲信息,然后轉步驟6;(a)向TreeMap′輸出比特1(b)向NodeMap′輸出NodeMap[nodepos+i],i遞增1;重復此過程直至NodeMap[nodepos+i]再次為0,記錄輸出長度為nodelen=i+1。
(c)向EList′輸出從EList[nodepos]開始長度為nodelen的一段比特序列。
(d)向IFArray′輸出IFArray[NodeInfo[nipos].ifpos]。
步驟6.{轉向下個節(jié)點}nipos遞增1,若nipos≥TreeMap.size,則已經(jīng)遍歷完所有節(jié)點,轉步驟7;否則轉向下一個節(jié)點,nodepos遞增直至NodeMap[nodepos]再次為0,轉步驟2;步驟7.{結束}重組過程結束。
本裁剪算法一方面合并CPat-Tree結構中相鄰且信息矢量在同一個簇中的葉子節(jié)點,另一方面削減葉子節(jié)點攜帶的比特序列。實驗證明,本算法可以降低CPat-Tree結構的存儲空間,提高查詢效率。附圖3、4、5給出了裁剪算法的測試結果。附圖3比較了160000和320000條URL構成的CPat-Tree索引在各種相似度下裁剪后的存儲容量相對未裁剪前的存儲容量??梢钥闯觯谙嗨贫葟?.3-0.9變化過程中,不同的URL構成的CPat-Tree結構在裁剪后相對未裁剪結構的存儲容量比率基本相同,達5%-15%;附圖4和5分別展示了32000、96000、160000、320000條URL在相似度0.3-0.9下生成的裁剪過的CPat-Tree的剩余節(jié)點與原有節(jié)點數(shù)目的比率,以及查詢效率提高的比率??梢?,剩余節(jié)點數(shù)目隨相似度平穩(wěn)下降,查詢效率提高30%-60%。
總之,本發(fā)明提出了一種基于CPat-Tree的網(wǎng)絡內(nèi)容分級索引結構模型和和在此基礎上實現(xiàn)的裁剪算法,可以大幅降低索引結構存儲容量和提高查詢效率。
權利要求
1.一種基于CPat-Tree實現(xiàn)的可裁剪的網(wǎng)絡內(nèi)容分級索引結構,其特征在于(1)分級索引結構由TreeMap、NodeMap、EList和IFArray數(shù)組聯(lián)合組成;其中,(2)TreeMap比特數(shù)組按前序順序記錄CPat-Tree的樹狀節(jié)點結構,以比特0標記內(nèi)部節(jié)點,比特1標記外部節(jié)點;(3)NodeMap比特數(shù)組按前序順序記錄每個節(jié)點包含的比特數(shù)目,用1個比特0和若干比特1聯(lián)合標記,其總數(shù)目等于節(jié)點包含比特數(shù)目;(4)EList比特數(shù)組按前序順序存儲每個節(jié)點包含的比特值;(5)IFArray數(shù)組按前序順序記錄葉子節(jié)點攜帶的信息矢量。
2.一種基于CPat-Tree的網(wǎng)絡內(nèi)容分級索引結構的裁剪算法,其特征在于基本步驟如下聚類過程將CPat-Tree中每個葉子節(jié)點根據(jù)信息矢量映射到矢量空間中一點,用空間模式識別的方法,把所有的點劃分為若干不重合的簇,每個簇由一個固定半徑的空間球體標識,簇中的點同處于一個球體中,落在同一個球體中的葉子節(jié)點被認為是相似的信息矢量,這個信息矢量作為該聚類的綜合信息矢量,對應球體的中心點;合并過程根據(jù)合并規(guī)則,依次把每個簇中的葉子節(jié)點向上合并,刪除該葉子節(jié)點,使其父親節(jié)點成新葉子節(jié)點。新葉子節(jié)點的信息矢量用簇中心的綜合信息矢量代替;重組過程去除臨時布爾數(shù)組標記的合并掉的節(jié)點,重新生成裁剪過的存儲數(shù)組;經(jīng)歷過重組過程后,裁剪過程結束,索引依然保持著CPat-Tree結構。
3.根據(jù)權利要求2所述的裁剪方法,其特征在于確定葉子節(jié)點是否相似的方法將葉子節(jié)點按攜帶的信息映射到矢量空間中的點,采用TOD方法來聚類。
4.根據(jù)權利要求2所述的裁剪方法,其特征在于合并過程對CPat-Tree數(shù)據(jù)結構的節(jié)點按逆前序順序遍歷一次即可完成。
5.根據(jù)權利要求2所述的裁剪方法,其特征在于合并過程利用一個與TreeMap數(shù)組等長的臨時布爾數(shù)組紀錄被注銷的節(jié)點;True值表示TreeMap數(shù)組中相應節(jié)點未被注銷,F(xiàn)alse值表示TreeMap數(shù)組中相應節(jié)點已注銷。
6.根據(jù)權利要求2所述的裁剪方法,其特征在于合并過程的處理步驟如下定義合并過程使用的數(shù)據(jù)結構(1)當前處理節(jié)點L,L節(jié)點的兄弟節(jié)點B,L和B節(jié)點的父親節(jié)點F;(2)TreeMap數(shù)組的游標TreePos;(3)NodeInfo,結構數(shù)組,與TreeMap數(shù)組等長,每個結構標記TreeMap中相應節(jié)點的信息;每個結構包括valid、father、brother和ifpos元素;其中valid元素表示當前節(jié)點的有效性,true值表示有效,false表示無效;father和brother元素標記當前節(jié)點的父親節(jié)點和兄弟節(jié)點在TreeMap和NodeInfo數(shù)組中的下標;ifpos元素標記當前節(jié)點在IFArray的起始位置;步驟1.{初始化}初始化NodeInfo數(shù)組的各個元素,其中valid元素初始化為true值;令TreePos←TreeMap.size-1,以指向TreeMap的最后一個元素;步驟2.{判斷當前節(jié)點的有效性}若TreePos≤0,則節(jié)點遍歷過程結束,轉步驟7;否則令當前節(jié)點為L,若NodeInfo[TreePos].valid=false,則L已被刪除,TreePos遞減1,轉步驟2;步驟3.{定位葉子節(jié)點}令TreePos指向TreeMap的值為0,意味著指向的是非葉子節(jié)點,則TreePos遞減1,轉步驟2;否則指向的是葉子節(jié)點,轉步驟4;步驟4.{定位父親和兄弟節(jié)點}從NodeInfo[TreePos].father和NodeInfo[TreePos].brother定位L的父親節(jié)點F和兄弟節(jié)點B的位置。若B節(jié)點在TreeMap中標記0,則表明兄弟節(jié)點是內(nèi)部節(jié)點,那么放棄對當前葉子的合并,TreePos遞減1,轉步驟2;否則轉步驟5;步驟5.{檢查是否滿足合并條件}從NodeInfo[TreePos].ifpos和NodeInfo[NodeInfo[TreePos].brother].ifpos定位L和B的信息矢量,若L和B同處于同一個簇,轉步驟6;否則TreePos遞減1,轉步驟2;步驟6.{合并節(jié)點}注銷葉子節(jié)點,置L和B在NodeInfo數(shù)組中的valid值為false(節(jié)點失效);置父親節(jié)點為新葉子節(jié)點,置F對應TreeMap的位置為1;NodeInfo中新葉子節(jié)點的信息矢量值指向L在IFArray中的相應位置,并將L所在聚類的綜合信息矢量置入;將新葉子節(jié)點作為下一輪計算的節(jié)點,TreePos←TreeMapF,轉步驟2;步驟7.{結束}合并過程結束。
7.根據(jù)權利要求2所述的裁剪方法,其特征在于重組過程的處理步驟如下定義nipos和nodepos分別是NodeInfo數(shù)組和NodeMap數(shù)組的游標,TreeMap′、NodeMap′、EList′和IFArray′分別是重組后的幾個存儲數(shù)組;步驟1.{初始化}初始化游標,nipos←0,nodepos←0;步驟2.{跳過已注銷節(jié)點}對于nipos標記的NodeInfo數(shù)組中的結構,若NodeInfo[nipos].valid=false,表明該節(jié)點已被注銷,nipos遞增1,nodepos遞增直至NodeMap[nodepos]再次為0,轉步驟2;否則,該節(jié)點未被注銷,轉步驟3;步驟3.{判斷輸出節(jié)點的類型}若TreeMap[nipos]=0,則轉步驟4輸出內(nèi)部節(jié)點;否則轉步驟5輸出葉子節(jié)點;步驟4.{輸出內(nèi)部節(jié)點}令i=0,執(zhí)行以下a)b)c)三個子步驟分別向TreeMap′、NodeMap′和EList′輸出該節(jié)點的存儲信息,然后轉步驟6;a)向TreeMap′輸出比特0;b)向NodeMap′輸出NodeMap[nodepos+i],i遞增1;重復此過程直至NodeMap[nodepos+i]再次為0,記錄輸出長度為nodelen=i;c)向EList′輸出從EList[nodepos]開始長度為nodelen的一段比特序列。步驟5.{輸出葉子節(jié)點}令i=0,執(zhí)行以下a)b)c)d)四個子步驟分別向TreeMap′、NodeMap′、EList′和IFArray′輸出該節(jié)點的存儲信息,然后轉步驟6;(a)向TreeMap′輸出比特1;(b)向NodeMap′輸出NodeMap[nodepos+i],i遞增1;重復此過程直至NodeMap[nodepos+i]再次為0,記錄輸出長度為nodelen=i+1;(c)向EList′輸出從EList[nodepos]開始長度為nodelen的一段比特序列;(d)向IFArray′輸出IFArray[NodeInfo[nipos].ifpos];步驟6.{轉向下個節(jié)點}nipos遞增1,若nipos≥TreeMap.size,則已經(jīng)遍歷完所有節(jié)點,轉步驟7;否則轉向下一個節(jié)點,nodepos遞增直至NodeMap[nodepos]再次為0,轉步驟2;步驟7.{結束}重組過程結束。
全文摘要
本發(fā)明為一種針對URL及其所指向的網(wǎng)絡實體的內(nèi)容分級索引的結構模型和裁剪算法。其中,分級索引結構使用TreeMap、NodeMap、EList和IFArray幾個數(shù)組記錄實體的URL和分級信息。裁剪算法的基本步驟是將CPat-Tree中每個葉子節(jié)點根據(jù)信息矢量映射到矢量空間中一點,用空間模式識別的方法,把所有的點劃分入若干不重合的簇,然后根據(jù)合并規(guī)則,依次把每個簇中的葉子節(jié)點向上合并,使其父親節(jié)點成為新葉子節(jié)點;新葉子節(jié)點的信息矢量用簇中心的綜合信息矢量代替。本發(fā)明極大地減少了CPat-Tree索引結構的存儲容量,降低了查詢過程中的磁盤訪問次數(shù)和CPU計算代價,具有很高的查詢效率。
文檔編號G06F17/30GK1719442SQ20051002778
公開日2006年1月11日 申請日期2005年7月15日 優(yōu)先權日2005年7月15日
發(fā)明者趙澤宇, 薛向陽, 石靜, 許源 申請人:復旦大學