專利名稱:一種網(wǎng)頁(yè)分割方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體地說(shuō),本發(fā)明涉及一種網(wǎng)頁(yè)分割方法。
背景技術(shù):
互聯(lián)網(wǎng)技術(shù)大大改變了人們的日常生活方式,人們可以越來(lái)越方便的訪問(wèn)互聯(lián) 網(wǎng)。然而在某些情況下,人們對(duì)互聯(lián)網(wǎng)的訪問(wèn)卻會(huì)受到種種制約。由于互聯(lián)網(wǎng)上的網(wǎng)頁(yè)大 都是為大顯示器設(shè)計(jì)的,一個(gè)網(wǎng)頁(yè)內(nèi)往往包含很多內(nèi)容,而在某些情況下,人們不需要也不 想要瀏覽整個(gè)網(wǎng)頁(yè)的信息。例如使用某些小顯示屏的設(shè)備(如手機(jī))上網(wǎng)時(shí),一般來(lái)說(shuō)屏幕無(wú)法全部顯示 一個(gè)完整的網(wǎng)頁(yè),如果不對(duì)網(wǎng)頁(yè)分割,將導(dǎo)致手機(jī)屏幕上長(zhǎng)長(zhǎng)的滾動(dòng)條和內(nèi)容的混亂顯示, 不利于用戶瀏覽;并且,移動(dòng)設(shè)備的互聯(lián)網(wǎng)訪問(wèn)帶寬較低,如果要將整個(gè)網(wǎng)頁(yè)下載到移動(dòng)設(shè) 備,必然用戶等待時(shí)間增長(zhǎng),而且會(huì)產(chǎn)生很大的流量,可是用戶需要的也只是網(wǎng)頁(yè)中的某個(gè) 部分。再例如在某些場(chǎng)合,用戶可能不能通過(guò)眼睛觀看網(wǎng)頁(yè)的內(nèi)容,而需要通過(guò)語(yǔ)音讀 出網(wǎng)頁(yè)的內(nèi)容,如盲人或者用戶在開(kāi)車(chē)時(shí)瀏覽網(wǎng)頁(yè)。由于朗讀速度遠(yuǎn)遠(yuǎn)低于視覺(jué)瀏覽的速 度,從頭至尾的朗讀將耗費(fèi)大量的時(shí)間。所以,當(dāng)前需要一種將單個(gè)網(wǎng)頁(yè)分割成多個(gè)子部分(本文中稱之為塊)的網(wǎng)頁(yè)分 割技術(shù),以方便移動(dòng)用戶或一些特殊應(yīng)用場(chǎng)景下的用戶瀏覽互聯(lián)網(wǎng)網(wǎng)頁(yè)。目前的網(wǎng)頁(yè)分割大都是對(duì)互聯(lián)網(wǎng)網(wǎng)頁(yè)做基于文本的平面分割,顯然,這種分割方 案將對(duì)原有的網(wǎng)頁(yè)結(jié)構(gòu)產(chǎn)生極大的破壞。公開(kāi)號(hào)為CN101655874A的專利申請(qǐng)披露了一種網(wǎng)頁(yè)分割方法,該方法包括D0M 樹(shù)構(gòu)建步驟,構(gòu)建原始網(wǎng)頁(yè)對(duì)應(yīng)的DOM樹(shù);脈絡(luò)集合構(gòu)建步驟,分別構(gòu)建該DOM樹(shù)中每一 葉子結(jié)點(diǎn)對(duì)應(yīng)的脈絡(luò)集合,該脈絡(luò)集合中包含該DOM樹(shù)的根結(jié)點(diǎn)、該葉子結(jié)點(diǎn)以及根結(jié)點(diǎn) 與該葉子結(jié)點(diǎn)之間的每一中間結(jié)點(diǎn);合并步驟,合并各葉子結(jié)點(diǎn)對(duì)應(yīng)的脈絡(luò)集合,使合并 后的脈絡(luò)集合所對(duì)應(yīng)網(wǎng)頁(yè)的大小保持在預(yù)先設(shè)置的閾值以下。本步驟具體內(nèi)容可參考 CN101655874A中的記載。相對(duì)于基于文本的平面分割技術(shù),這種基于DOM樹(shù)和網(wǎng)頁(yè)大小閾 值的分割方案更好地保持了原有的網(wǎng)頁(yè)結(jié)構(gòu)。但是,該方案仍然存在一些不足。一、為充分發(fā)揮導(dǎo)航的作用,很多網(wǎng)頁(yè)在視覺(jué)上往往采用塊狀結(jié)構(gòu)來(lái)組織,將屬于 同一主題或分類的超鏈接組織為一個(gè)網(wǎng)頁(yè)塊。這類頁(yè)面的典型代表是各大網(wǎng)站的首頁(yè)。DOM 樹(shù)的每個(gè)葉結(jié)點(diǎn)往往對(duì)應(yīng)上述網(wǎng)頁(yè)中的一個(gè)超鏈接。如圖1所示,主題或分類相同的幾個(gè) 超鏈接被集中到網(wǎng)頁(yè)多行塊1顯示。如果基于網(wǎng)頁(yè)大小閾值對(duì)DOM樹(shù)的各脈絡(luò)集合進(jìn)行合 并,則可能會(huì)把主題或分類不同的超鏈接劃分在一個(gè)子網(wǎng)頁(yè),而主題或分類相同的一些鏈 接則可能被劃分到不同的子網(wǎng)頁(yè),這導(dǎo)致子網(wǎng)頁(yè)的劃分效果瑣碎且有一定的隨意性,不便 于用戶瀏覽。二、原始網(wǎng)頁(yè)中,往往將幾個(gè)相關(guān)主題或分類標(biāo)簽組織在一行,為方便描述,下文 中將這種多個(gè)(有時(shí)也可能是一個(gè))主題或分類標(biāo)簽組成的行稱為主題塊。如圖1所示,對(duì)于一個(gè)主題塊2,屬于其中主題或分類的多行塊1被安排到該主題塊2附近,這樣主題塊 2可以起到提示用戶的作用。而文獻(xiàn)CN101655874A中,由于基于網(wǎng)頁(yè)大小閾值對(duì)DOM樹(shù)的 各脈絡(luò)集合進(jìn)行合并,可能使主題塊和所對(duì)應(yīng)的多行塊脫節(jié),甚至被分到不同的子網(wǎng)頁(yè)中。 具體地,文獻(xiàn)CN101655874A中采用基于網(wǎng)頁(yè)DOM的脈絡(luò)集合對(duì)網(wǎng)頁(yè)進(jìn)行劃分,它首先構(gòu)建 第一脈絡(luò)和第二脈絡(luò),然后依據(jù)第一脈絡(luò)中的所有元素所占的網(wǎng)頁(yè)區(qū)域大小是否達(dá)到了一 定的閾值,如果達(dá)到了,則把其作為一個(gè)單獨(dú)的網(wǎng)頁(yè)塊,如果未達(dá)到則將第二脈絡(luò)中的一個(gè) 葉結(jié)點(diǎn)加入到第一脈絡(luò)中。此種方法容易造成不相關(guān)的內(nèi)容被劃分到同一個(gè)塊中,不能保 證所劃分到一塊的內(nèi)容具有相關(guān)性。如附圖3所示,按照網(wǎng)頁(yè)大小閾值劃分,其結(jié)果是位于 中間的分塊中既有關(guān)于軍事的內(nèi)容,又有關(guān)于探索的的內(nèi)容。而部分軍事內(nèi)容被劃分到上 一塊,部分探索內(nèi)容被劃分到下一塊。顯然,這種分塊結(jié)果不便于用戶瀏覽。綜上所述,現(xiàn)有技術(shù)的網(wǎng)頁(yè)分割方法均會(huì)不同程度地破壞原有的網(wǎng)頁(yè)結(jié)構(gòu),當(dāng)前 迫切需要一種能夠很好地保持原有的網(wǎng)頁(yè)結(jié)構(gòu)的網(wǎng)頁(yè)分割方法。
發(fā)明內(nèi)容
因此,本發(fā)明的目的是提供一種能夠很好地保持原有的網(wǎng)頁(yè)結(jié)構(gòu)的網(wǎng)頁(yè)分割方法。為實(shí)現(xiàn)上述發(fā)明目的,本發(fā)明提供了一種網(wǎng)頁(yè)分割方法,包括步驟1)獲取待分割網(wǎng)頁(yè)的DOM樹(shù);步驟2)遍歷所述DOM樹(shù),將其中每個(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)作為一個(gè)基 本分塊,將每?jī)蓚€(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)分別合成一個(gè)基本分 塊;當(dāng)一個(gè)基本多行結(jié)點(diǎn)的父結(jié)點(diǎn)被作為一個(gè)基本分塊時(shí),該基本多行結(jié)點(diǎn)不再作為一個(gè) 基本分塊;所述基本多行結(jié)點(diǎn)是DOM樹(shù)中滿足多行性質(zhì)的最小結(jié)點(diǎn);一個(gè)結(jié)點(diǎn)具有多行性質(zhì) 是指該結(jié)點(diǎn)包含至少兩個(gè)含有文本的子結(jié)點(diǎn)且這兩個(gè)子結(jié)點(diǎn)所對(duì)應(yīng)的網(wǎng)頁(yè)顯示區(qū)域的縱 坐標(biāo)不同。其中,所述網(wǎng)頁(yè)分割方法還包括步驟3)在所述基本分塊中找出主題塊,將主題塊與其后面鄰接的若干個(gè)非主題 塊合并;所述主題塊中包含主題或分類標(biāo)簽。其中,所述步驟2)包括下列子步驟21)自底向上遍歷網(wǎng)頁(yè)的DOM樹(shù),找出DOM樹(shù)中的基本多行結(jié)點(diǎn);22)自頂向下先序遍歷DOM樹(shù),將其中每個(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)作為一 個(gè)基本分塊,將每?jī)蓚€(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)分別合成一個(gè)基 本分塊。其中,所述步驟21)包括下列子步驟211)自底向上遍歷網(wǎng)頁(yè)的DOM樹(shù),對(duì)每個(gè)當(dāng)前結(jié)點(diǎn),執(zhí)行步驟212);212)記錄當(dāng)前結(jié)點(diǎn)所含的基本多行結(jié)點(diǎn)個(gè)數(shù)。其中,所述步驟22)包括下列子步驟221)建立一個(gè)結(jié)點(diǎn)列表,自頂向下地先序遍歷DOM樹(shù);222)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為0,將當(dāng)前結(jié)點(diǎn)放入所述結(jié)點(diǎn)列表,否則執(zhí)行步驟223);223)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為1,則執(zhí)行步驟224),否則執(zhí)行步 驟 225);224)將當(dāng)前塊作為一個(gè)基本分塊,并將當(dāng)前所述結(jié)點(diǎn)列表中的結(jié)點(diǎn)合并,作為另 一個(gè)基本分塊,然后清空所述結(jié)點(diǎn)列表;225)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為1,則對(duì)它的所有孩子結(jié)點(diǎn)分別執(zhí) 行步驟222) 225)。其中,所述步驟3)包括下列子步驟31)對(duì)每個(gè)基本分塊,根據(jù)其字體、文字長(zhǎng)度、背景顏色中的一項(xiàng)或多項(xiàng)特征來(lái)判 斷該基本分塊是否是主題塊;32)將每個(gè)主題塊與其后面鄰接的若干個(gè)非主題塊合并。其中,所述步驟32)包括下列子步驟321)取出一個(gè)主題塊;322)取與所述主題塊的寬度相等的后面鄰接的若干非主題塊或者其寬度之和與 主題塊的寬度相等的后面鄰接的若干非主題塊,根據(jù)預(yù)設(shè)的條件判斷是否將該主題塊這些 后面鄰接的非主題塊合并,如果是,則合并;如果否,則不合并。其中,所述步驟322)中,所述預(yù)設(shè)的條件是主題塊與后面鄰接的非主題塊的縱 坐標(biāo)距離小于預(yù)設(shè)的閾值。與現(xiàn)有技術(shù)相比,本發(fā)明具有下列技術(shù)效果1)本發(fā)明能夠在分塊的同時(shí)很好地保持原有的網(wǎng)頁(yè)結(jié)構(gòu),避免打散屬于同一主題 或分類的鏈接,避免主題或分類標(biāo)簽與其對(duì)應(yīng)的鏈接分離。2)本發(fā)明的執(zhí)行效率高,容易實(shí)現(xiàn)。
以下,結(jié)合附圖來(lái)詳細(xì)說(shuō)明本發(fā)明的實(shí)施例,其中圖1示出了基本分塊劃分示意圖;圖2示出了基本分塊合并后的示意圖;圖3示出了現(xiàn)有技術(shù)中一種網(wǎng)頁(yè)分割方案的效果示意圖;圖4示出了本發(fā)明一個(gè)實(shí)施例中基于多行塊的分割步驟的流程圖;圖5示出了本發(fā)明一個(gè)實(shí)施例中基于主題塊的合并步驟的流程圖;圖6示出了 一個(gè)簡(jiǎn)單的DOM樹(shù)示例;圖7示出了一個(gè)網(wǎng)頁(yè)實(shí)例的分塊結(jié)果的整體示意圖;圖7a、圖7b、圖7c、圖7d分別為圖7的網(wǎng)頁(yè)實(shí)例的分塊結(jié)果的四個(gè)局部放大示意 圖;圖8示出了另一個(gè)網(wǎng)頁(yè)實(shí)例的分塊結(jié)果的整體示意圖;圖8a、圖Sb、圖8c分別為圖8的網(wǎng)頁(yè)實(shí)例的分塊結(jié)果的三個(gè)局部放大示意圖;圖9示出了一個(gè)特殊情況下的DOM樹(shù)片段;圖10示出了圖9的DOM樹(shù)片段所對(duì)應(yīng)的網(wǎng)頁(yè)顯示區(qū)域。
具體實(shí)施例方式本發(fā)明網(wǎng)頁(yè)分割方法是一種基于DOM樹(shù)對(duì)網(wǎng)頁(yè)進(jìn)行分割的方法,DOM樹(shù)本質(zhì)上是 一棵標(biāo)簽樹(shù),它反映了網(wǎng)頁(yè)的結(jié)構(gòu)信息。此外為了獲得較好的分塊效果,在本發(fā)明的一些優(yōu) 選實(shí)施例中還引入了少量簡(jiǎn)單的視覺(jué)信息來(lái)輔助網(wǎng)頁(yè)分塊。在完成分塊后,可以將每個(gè)分 塊作為一個(gè)子網(wǎng)頁(yè)顯示;也可以仍然將原始網(wǎng)頁(yè)作為一個(gè)完整網(wǎng)頁(yè),同時(shí)將其中每個(gè)分塊 與相應(yīng)的控制命令映射,從而方便用戶瀏覽網(wǎng)頁(yè)。下面,結(jié)合實(shí)施例對(duì)本發(fā)明做進(jìn)一步地描 述。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了 一種網(wǎng)頁(yè)分割方法。該實(shí)施例中引入了 “基本多行結(jié)點(diǎn)”的概念,其定義如下定義.基本多行結(jié)點(diǎn)?;径嘈薪Y(jié)點(diǎn)采用遞歸定義,如果一個(gè)結(jié)點(diǎn)同時(shí)滿足下述a、b、c三個(gè)條件,則該 結(jié)點(diǎn)是基本多行結(jié)點(diǎn)。a)該結(jié)點(diǎn)不是葉子結(jié)點(diǎn);b)該結(jié)點(diǎn)的所有子孫結(jié)點(diǎn)都不是基本多行結(jié)點(diǎn);c)存在該結(jié)點(diǎn)的兩個(gè)孩子結(jié)點(diǎn)Nei,Nc2滿足Nci. TextLen Φ 0,Nc2. TextLen Φ 0Nci. Region. LeftTop. y Φ· Nc2. Region. LeftTop. y其中,N. TextLen表示結(jié)點(diǎn)N(包括其孩子結(jié)點(diǎn))中包含的文本長(zhǎng)度,N. Region. TopLeft. y表示結(jié)點(diǎn)N在網(wǎng)頁(yè)所占的區(qū)域的左上角的縱坐標(biāo)值。從上述定義可以看出,基本多行結(jié)點(diǎn)包含至少兩個(gè)含有文本的結(jié)點(diǎn),且這兩個(gè)結(jié) 點(diǎn)在網(wǎng)頁(yè)上顯示的縱坐標(biāo)位置不同,這直接體現(xiàn)了“多行”的性質(zhì)。而且,上述的遞歸定義 保證了基本多行結(jié)點(diǎn)是滿足“多行”性質(zhì)的最小結(jié)點(diǎn)。定義.結(jié)點(diǎn)所含的基本多行結(jié)點(diǎn)個(gè)數(shù)。對(duì)任一結(jié)點(diǎn)N,其所含的基本多行結(jié)點(diǎn)個(gè)數(shù)Iittra(N)(簡(jiǎn)稱多行塊屬性)定義為如果N為DOM樹(shù)的葉子結(jié)點(diǎn),則(N) = 0 ;如果N為基本多行結(jié)點(diǎn),則ηΜ ΒΝ (N) = 1 ;如果N既不是葉子結(jié)點(diǎn)也不是基本多行結(jié)點(diǎn),則N必然有孩子結(jié)點(diǎn),設(shè)其所有孩子 結(jié)點(diǎn)的集合為Wc ,則〃—義),即N所含的基本多行結(jié)點(diǎn)個(gè)數(shù)為其所有孩 子結(jié)點(diǎn)所含的基本多行結(jié)點(diǎn)個(gè)數(shù)之和。上述兩個(gè)定義都是遞歸定義,因此,在具體實(shí)現(xiàn)時(shí)也采用遞歸算法比較方便。在本 實(shí)施例中,采用遞歸算法對(duì)DOM樹(shù)進(jìn)行自下而上的后序遍歷,對(duì)遍歷的每個(gè)結(jié)點(diǎn)應(yīng)用上述 兩個(gè)定義進(jìn)行判斷和計(jì)算,即可得到各結(jié)點(diǎn)所含的基本多行結(jié)點(diǎn)個(gè)數(shù)。本實(shí)施例主要包括兩個(gè)步驟基于多行塊的分割和基于主題塊的合并。下面分別 介紹這兩個(gè)步驟?!⒒诙嘈袎K的分割通過(guò)對(duì)網(wǎng)頁(yè)DOM樹(shù)的遍歷,把網(wǎng)頁(yè)分割成多行塊。該方法 只需對(duì)DOM樹(shù)進(jìn)行一次自底向上和一次自頂向下的遍歷即可完成,具有執(zhí)行效率高容易實(shí) 現(xiàn)的優(yōu)點(diǎn)?;诙嘈袎K的分割主要包括以下子步驟步驟Al 對(duì)網(wǎng)頁(yè)的DOM樹(shù)進(jìn)行自底向上的遍歷,在遍歷過(guò)程中,根據(jù)基本多行結(jié)點(diǎn)和結(jié)點(diǎn)所包含的基本多行結(jié)點(diǎn)個(gè)數(shù)的定義對(duì)每一個(gè)結(jié)點(diǎn)設(shè)置其nMN(N)的值。步驟A2 建立一個(gè)結(jié)點(diǎn)列表,自頂向下地先序遍歷DOM樹(shù),對(duì)各結(jié)點(diǎn)分別執(zhí)行如下 步驟1)如果當(dāng)前結(jié)點(diǎn)包含的多行塊屬性為0,將當(dāng)前結(jié)點(diǎn)放入結(jié)點(diǎn)列表,否則執(zhí)行步 馬聚2 ο2)如果當(dāng)前結(jié)點(diǎn)包含的多行塊屬性為1,則執(zhí)行步驟3,否則執(zhí)行步驟4。3)如果結(jié)點(diǎn)列表不為空,則將結(jié)點(diǎn)列表中的結(jié)點(diǎn)合并,使之自成一塊,該分塊作為 原始網(wǎng)頁(yè)的一個(gè)基本分塊,之后清空結(jié)點(diǎn)列表。同時(shí)當(dāng)前塊也自成一塊,該分塊也作為原始 網(wǎng)頁(yè)的一個(gè)基本分塊。4)如果當(dāng)前結(jié)點(diǎn)的包含的多行塊屬性大于1,則對(duì)它的所有孩子結(jié)點(diǎn)分別執(zhí)行步 驟1 4。所有結(jié)點(diǎn)都遍歷一次后,步驟A2完成,此時(shí)原始網(wǎng)頁(yè)被劃分為多個(gè)基本分塊,其 中,每個(gè)基本多行結(jié)點(diǎn)各自是一個(gè)基本分塊,每?jī)蓚€(gè)基本多行結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)則被 合成一個(gè)基本分塊。圖1示出了一個(gè)簡(jiǎn)單網(wǎng)頁(yè)的分塊結(jié)果,其中用方框圍住的是在第一步 驟所劃分的基本分塊??梢钥闯?,該網(wǎng)頁(yè)被分成了四個(gè)基本分塊。二、基于主題塊的合并主題塊具有與其他普通塊不同的特征(如字體大小,文字 長(zhǎng)度,背景顏色等與普通塊不同),因此可以根據(jù)這些特征,從基本分塊中找出主題塊,然后 再根據(jù)視覺(jué)信息將主題塊與附近的基本分塊合并成一個(gè)分塊,從而得到更好的分塊效果。 為方便描述,本文中將除主題塊外的基本分塊稱為非主題塊?;谥黝}塊的合并主要包括以下步驟步驟Bl 對(duì)上一步中所得到的所有塊進(jìn)行一次遍歷,并將符合主題塊特征的塊標(biāo) 記為主題塊。步驟B2 遍歷所有主題塊,對(duì)當(dāng)前主題塊,找出當(dāng)前主題塊后面鄰接的若干個(gè)非 主題塊基本分塊,并分析當(dāng)前主題塊和其附近的非主題塊在網(wǎng)頁(yè)中所占的矩形區(qū)域,利用 視覺(jué)信息判斷這些塊能否合成更大的塊。如果能,則合成更大的塊。在一個(gè)優(yōu)選實(shí)施例中, 可以設(shè)定分塊間隔閾值,如果鄰接的非主題塊與當(dāng)前主題塊的寬度相等(寬度指塊的右橫 坐標(biāo)減去左橫坐標(biāo)的值)(或鄰接的若干非主題塊寬度之和與主題塊的寬度相等),且該鄰 接的非主題塊與當(dāng)前主題塊縱坐標(biāo)差值小于所述基本分塊間間隔閾值,則將當(dāng)前主題塊與 鄰近的非主題塊基本分塊合并成一個(gè)分塊。圖2示出了圖1所示的分塊合并后的結(jié)果??梢钥闯?,四個(gè)基本分塊將被合并為 一個(gè)塊。在這個(gè)示例中,主題塊下面鄰接的三個(gè)分塊的內(nèi)容都圍繞著主題塊,而且它們所占 據(jù)的區(qū)域也和主題塊可以很好的統(tǒng)一到一起。所以,這種將四個(gè)基本分塊合并為一個(gè)塊的 做法,符合用戶的瀏覽習(xí)慣。根據(jù)本發(fā)明的另一個(gè)優(yōu)選實(shí)施例,還提供了另一種網(wǎng)頁(yè)分割方法,該方法通過(guò)網(wǎng) 頁(yè)中內(nèi)容多行特征對(duì)網(wǎng)頁(yè)進(jìn)行分割得到塊,然后通過(guò)檢測(cè)主題塊的方式合并具有相同主題 的塊。與前一實(shí)施例一致,本實(shí)施例的網(wǎng)頁(yè)分割方法包括基于多行塊的分割和基于主題 塊的合并。下面分別介紹本實(shí)施例中的這兩個(gè)步驟。一、基于多行塊的分割。如圖4所示,基于多行塊的分割方法包括下列步驟
步驟1 自底向上遍歷DOM樹(shù)。設(shè)置結(jié)點(diǎn)的多行塊屬性值。每一個(gè)網(wǎng)頁(yè)都可以用DOM樹(shù)表示,通過(guò)瀏覽器提供的接口可以得到網(wǎng)頁(yè)的DOM樹(shù) 表示。對(duì)DOM樹(shù)進(jìn)行一次自底向上的遍歷,遍歷過(guò)程中如果碰到葉結(jié)點(diǎn),則將其多行塊屬性 設(shè)置為零。如果碰到非葉結(jié)點(diǎn),則先對(duì)其子結(jié)點(diǎn)進(jìn)行遍歷,并將子結(jié)點(diǎn)的y坐標(biāo)值記錄下。 在該結(jié)點(diǎn)的所有子結(jié)點(diǎn)都遍歷完成之后,判斷其子結(jié)點(diǎn)的多行塊屬性,如果其子結(jié)點(diǎn)中含 有多行塊屬性為1的結(jié)點(diǎn)。那么將其子結(jié)點(diǎn)的所有多行塊屬性之和作為該結(jié)點(diǎn)的多行塊屬 性,否則判斷其子結(jié)點(diǎn)的y坐標(biāo)值是否完全相同,如果相同,設(shè)置該結(jié)點(diǎn)的多行塊屬性為0, 如果不同,則設(shè)置該結(jié)點(diǎn)的多行塊屬性為1。例如,在圖6中結(jié)點(diǎn)1的多行塊屬性為2,結(jié)點(diǎn) 4和6的多行塊屬性為1。步驟2:設(shè)置一個(gè)隊(duì)列,和一個(gè)初始為空的結(jié)點(diǎn)列表。隊(duì)列用來(lái)在保存在遍歷過(guò)程中所需 的父結(jié)點(diǎn)信息。第一個(gè)壓入隊(duì)列的結(jié)點(diǎn)為DOM樹(shù)的根結(jié)點(diǎn)。結(jié)點(diǎn)列表用來(lái)存儲(chǔ)遍歷過(guò)程中 多行塊屬性為零的結(jié)點(diǎn)。步驟3 判斷隊(duì)列是否為空,如果不為空,則進(jìn)入步驟4,如果為空,則沒(méi)有需要處 理的結(jié)點(diǎn)了,那么只需把結(jié)點(diǎn)列表里面的結(jié)點(diǎn)合并成一個(gè)塊?;诙嘈袎K的分割過(guò)程結(jié)束。步驟4 彈出隊(duì)列中的一個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)將作為要處理的當(dāng)前結(jié)點(diǎn)。步驟5:判斷當(dāng)前結(jié)點(diǎn)多行塊屬性是否為0,如果當(dāng)前結(jié)點(diǎn)的多行塊屬性為零,則 執(zhí)行步驟6,否則執(zhí)行步驟7。步驟6 將當(dāng)前結(jié)點(diǎn)放入結(jié)點(diǎn)列表中,然后執(zhí)行步驟3。步驟7 判斷當(dāng)前結(jié)點(diǎn)的多行塊屬性是否為1。如果是,執(zhí)行步驟8,否則執(zhí)行步驟 9。步驟8 將結(jié)點(diǎn)列表中的所有網(wǎng)頁(yè)合并成一塊,并且當(dāng)前結(jié)點(diǎn)自成一塊。然后執(zhí)行 步驟3。本步驟中,在碰到多行塊屬性大于0的結(jié)點(diǎn)時(shí),將結(jié)點(diǎn)列表中的連續(xù)的多行塊屬性 為零的結(jié)點(diǎn)將被合并為一塊,這樣使得相近的多行塊結(jié)點(diǎn)屬性為零的零散結(jié)點(diǎn)被組織在一 起,以避免分塊過(guò)于瑣碎。步驟9 將當(dāng)前結(jié)點(diǎn)的所有子結(jié)點(diǎn)自左向右壓入隊(duì)列中,然后執(zhí)行步驟3。執(zhí)行本 步驟,將會(huì)對(duì)當(dāng)前結(jié)點(diǎn)的所有子結(jié)點(diǎn)遞歸處理,直至將DOM樹(shù)中的所有結(jié)點(diǎn)遍歷一次。按照上述步驟1 9,在DOM樹(shù)中的所有結(jié)點(diǎn)遍歷完成之后,就得到了原始網(wǎng)頁(yè)的 基本分塊。進(jìn)一步地,圖6示出了一個(gè)簡(jiǎn)單的DOM樹(shù),下面以圖6為例進(jìn)一步說(shuō)明上述步驟 1 9。初始時(shí)執(zhí)行步驟1,結(jié)點(diǎn)1被壓入隊(duì)列。經(jīng)過(guò)步驟2,3后。在步驟4,結(jié)點(diǎn)1被作為 當(dāng)前結(jié)點(diǎn),在步驟5執(zhí)行后跳轉(zhuǎn)到步驟7然后跳轉(zhuǎn)到步驟9,將當(dāng)前結(jié)點(diǎn)的所有子結(jié)點(diǎn)壓入 隊(duì)列。此時(shí)隊(duì)列中元素為結(jié)點(diǎn)2,結(jié)點(diǎn)3,結(jié)點(diǎn)4,結(jié)點(diǎn)5,結(jié)點(diǎn)6。步驟9執(zhí)行完成之后,回到步驟3,結(jié)點(diǎn)2將作為當(dāng)前結(jié)點(diǎn)。經(jīng)過(guò)步驟3,4后,在步 驟5將被放入結(jié)點(diǎn)列表,回到步驟3。此時(shí)隊(duì)列中元素為結(jié)點(diǎn)3,結(jié)點(diǎn)4,結(jié)點(diǎn)5,結(jié)點(diǎn)6。同結(jié)點(diǎn)2 —樣,結(jié)點(diǎn)3也會(huì)被放入結(jié)點(diǎn)列表,然后回到步驟3。此時(shí)隊(duì)列中元素為 結(jié)點(diǎn)4,結(jié)點(diǎn)5,結(jié)點(diǎn)7?;氐讲襟E3。在步驟4中,結(jié)點(diǎn)4將被作為當(dāng)前結(jié)點(diǎn),該結(jié)點(diǎn)的多行塊屬性為1,所 以,將會(huì)執(zhí)行步驟5,7,然后執(zhí)行步驟8,在步驟8里,原先被放入結(jié)點(diǎn)的列表的結(jié)點(diǎn)2,3將合并成一塊。結(jié)點(diǎn)列表將被清空。而多行塊屬性為1的結(jié)點(diǎn)4,也將獨(dú)立成為一塊。此時(shí), 隊(duì)列中元素為結(jié)點(diǎn)5,結(jié)點(diǎn)6。后續(xù)步驟里,結(jié)點(diǎn)5將被放入結(jié)點(diǎn)列表中,隊(duì)列中元素為6。然后6將作為當(dāng)前結(jié) 點(diǎn),結(jié)點(diǎn)5將作為獨(dú)立的一塊,而結(jié)點(diǎn)6多行塊屬性為1,也將作為獨(dú)立的一塊。需指出的是,雖然本實(shí)施例采用隊(duì)列這一數(shù)據(jù)結(jié)構(gòu)來(lái)保存在遍歷過(guò)程中所需的父 結(jié)點(diǎn)信息,但是本領(lǐng)域技術(shù)人員易于理解,也可以使用棧或其它數(shù)據(jù)結(jié)構(gòu)來(lái)保存在遍歷過(guò) 程中所需的父結(jié)點(diǎn)信息。二、基于主題塊的合并。如圖5所示,本實(shí)施例中基于主題塊的合并方法包括下列步驟步驟1 遍歷所有基本分塊,找出主題塊。初始設(shè)置所有基本分塊均未被處理標(biāo) 記。在遍歷過(guò)程中,根據(jù)主題塊特征,判斷各個(gè)基本分塊是否為主題塊,并將其標(biāo)記出來(lái)。其 中,主題塊特征指的是該塊中的字體大小,字體長(zhǎng)度和背景的顏色。一般來(lái)說(shuō),主題塊相對(duì) 于非主體塊,具有字體加粗,文字長(zhǎng)度較短,背景顏色比較鮮艷(如紅綠等,一般不是白色) 等特征。步驟2 按順序取出當(dāng)前第一個(gè)主題塊,執(zhí)行步驟3 4。步驟3:獲取當(dāng)前主題塊后面鄰接的若干個(gè)非主題塊。后面鄰接塊是指在DOM樹(shù)中 右邊的塊,也就是網(wǎng)頁(yè)源代碼中該主題塊代碼后面緊鄰代碼所代表的塊。在網(wǎng)頁(yè)源代碼中 位置靠后的源代碼對(duì)應(yīng)的就是DOM樹(shù)右邊的結(jié)點(diǎn),因此網(wǎng)頁(yè)源代碼決定了所有塊的順序。 表1示意性地給出了網(wǎng)頁(yè)的4個(gè)分塊的相對(duì)位置,表權(quán)利要求
1.一種網(wǎng)頁(yè)分割方法,其特征在于,包括下列步驟步驟1)獲取待分割網(wǎng)頁(yè)的DOM樹(shù);步驟2)遍歷所述DOM樹(shù),將其中每個(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)作為一個(gè)基本分 塊,將每?jī)蓚€(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)分別合成一個(gè)基本分塊; 其中,當(dāng)一個(gè)基本多行結(jié)點(diǎn)的父結(jié)點(diǎn)被作為一個(gè)基本分塊時(shí),該基本多行結(jié)點(diǎn)不再作為一 個(gè)基本分塊。
2.根據(jù)權(quán)利要求1所述的網(wǎng)頁(yè)分割方法,其特征在于,所述網(wǎng)頁(yè)分割方法還包括步驟幻在所述基本分塊中找出主題塊,將主題塊與其后面鄰接的若干個(gè)非主題塊合并;所述主題塊中包含主題或分類標(biāo)簽。
3.根據(jù)權(quán)利要求1所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟幻包括下列子步驟21)自底向上遍歷網(wǎng)頁(yè)的DOM樹(shù),找出DOM樹(shù)中的基本多行結(jié)點(diǎn);22)自頂向下先序遍歷DOM樹(shù),將其中每個(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)作為一個(gè)基 本分塊,將每?jī)蓚€(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)分別合成一個(gè)基本分 塊。
4.根據(jù)權(quán)利要求3所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟21)包括下列子步驟211)自底向上遍歷網(wǎng)頁(yè)的DOM樹(shù),對(duì)每個(gè)當(dāng)前結(jié)點(diǎn),執(zhí)行步驟212);212)記錄當(dāng)前結(jié)點(diǎn)所含的基本多行結(jié)點(diǎn)個(gè)數(shù)。
5.根據(jù)權(quán)利要求4所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟22)包括下列子步驟221)建立一個(gè)結(jié)點(diǎn)列表,自頂向下地先序遍歷DOM樹(shù);222)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為0,將當(dāng)前結(jié)點(diǎn)放入所述結(jié)點(diǎn)列表,否 則執(zhí)行步驟223);223)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為1,則執(zhí)行步驟224),否則執(zhí)行步驟 225);224)將當(dāng)前塊作為一個(gè)基本分塊,并將當(dāng)前所述結(jié)點(diǎn)列表中的結(jié)點(diǎn)合并,作為另一個(gè) 基本分塊,然后清空所述結(jié)點(diǎn)列表;225)如果當(dāng)前結(jié)點(diǎn)包含的基本多行結(jié)點(diǎn)個(gè)數(shù)為1,則對(duì)它的所有孩子結(jié)點(diǎn)分別執(zhí)行步 驟 222) 225)。
6.根據(jù)權(quán)利要求2所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟幻包括下列子步驟31)對(duì)每個(gè)基本分塊,根據(jù)其字體、文字長(zhǎng)度、背景顏色中的一項(xiàng)或多項(xiàng)特征來(lái)判斷該 基本分塊是否是主題塊;32)將每個(gè)主題塊與其后面鄰接的若干個(gè)非主題塊合并。
7.根據(jù)權(quán)利要求6所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟32)包括下列子步驟321)取出一個(gè)主題塊;322)取與所述主題塊的寬度相等的后面鄰接的若干非主題塊或者其寬度之和與所述 主題塊的寬度相等的后面鄰接的若干非主題塊,根據(jù)預(yù)設(shè)的條件判斷是否將該主題塊這些 后面鄰接的非主題塊合并,如果是,則合并;如果否,則不合并。
8.根據(jù)權(quán)利要求7所述的網(wǎng)頁(yè)分割方法,其特征在于,所述步驟322)中,所述預(yù)設(shè)的條 件是主題塊與后面鄰接的非主題塊的縱坐標(biāo)距離小于預(yù)設(shè)的閾值。
全文摘要
本發(fā)明提供一種網(wǎng)頁(yè)分割方法,其特征在于,包括步驟1)獲取待分割網(wǎng)頁(yè)的DOM樹(shù);步驟2)遍歷所述DOM樹(shù),將其中每個(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)作為一個(gè)基本分塊,將每?jī)蓚€(gè)只包含1個(gè)基本多行結(jié)點(diǎn)的結(jié)點(diǎn)之間的零散葉結(jié)點(diǎn)分別合成一個(gè)基本分塊;其中,當(dāng)一個(gè)基本多行結(jié)點(diǎn)的父結(jié)點(diǎn)被作為一個(gè)基本分塊時(shí),該基本多行結(jié)點(diǎn)不再作為一個(gè)基本分塊;步驟3)在所述基本分塊中找出主題塊,將主題塊與其后面鄰接的若干個(gè)非主題塊合并。本發(fā)明能夠在分塊的同時(shí)很好地保持原有的網(wǎng)頁(yè)結(jié)構(gòu),避免打散屬于同一主題或分類的鏈接,避免主題或分類標(biāo)簽與其對(duì)應(yīng)的鏈接分離。本發(fā)明的執(zhí)行效率高,容易實(shí)現(xiàn)。
文檔編號(hào)G06F17/30GK102073710SQ20101061774
公開(kāi)日2011年5月25日 申請(qǐng)日期2010年12月31日 優(yōu)先權(quán)日2010年12月31日
發(fā)明者林守勛, 王向東, 鄧鑄輝, 錢(qián)躍良, 陳啟華 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所