• 沒有找到結果。

GRAB 演算法步驟 1:轉換(Transformation)

第三章 一個以賽局理論為基礎的網頁主題區塊擷取演算法

3.2 GRAB 演算法

3.2.1 GRAB 演算法步驟 1:轉換(Transformation)

一般的 HTML 網頁,可以先經由轉成 XML 格式之 XHTML,處理掉 HTML Tag 的 缺漏問題,再清除不必要的 tag,例如 JavaScript、註解等資訊後,轉換成 DOM Tree 的 樹狀架構。如圖 8 所示:

圖 8、網頁轉換成 DOM Tree 架構

DOM Tree 架構就代表網頁的階層架構,其中每一個節點都是一個 HTML Tag。但 光是從 Tag 無法正確的取出網頁的資料,而是需要取出完整的子樹出來,才能得到一塊

有意義的網頁區塊資訊。如圖 8 所示,若只取出<TD>這一個節點的內容,並無其他意 義;若是取出包含<TD>之下的整棵子樹,亦即取出<TD> <A …> <A …> <A …> <A …>

<A …> </TD>就相當於擷取出這個表格的一個儲存格的內容,這就有意義了。因此在本 論文中,要取出某個節點的內容,指的就是擷取出該節點之下的整棵子樹。

在 W3C 的 HTML 規格書中,HTML DOM node 可分成三種:

(1)Insignificant node

無法在瀏覽器上顯示出來的節點。此類的節點包括只含有空白的節點、換段符號、

&nbsp;等等,例如註解文字、隱藏的 tag(例如<INPUT type=hidden>)等等。值得注意的 是<BR>並不是 Insignificant node,它是屬於 line-break node。

(2)Inline node

會影響文字顯示外觀的 html tag,包括:<A>、<ACRONYM>、<ABBR>、<B>、

<BIG>、<CITE>、<CODE>、<DEL>、<DFN>、<EM>、<FONT>、<I>、<INPUT>、<INS>、

<NOBR>、<KBD>、<Q>、<SAMP>、<SMALL>、<STRONG>、<SUP>、<SUB>、<TT>、

<U>、<VAR>等。

(3)Line-break node

既不屬於 Insignificant node,也不屬於 Inline node 的節點,就歸類為 Line-break node。

在本論文中,為了更明確地分辨節點的屬性及階層關係,因此將 W3C 定義的 Line-break node 擴充為以下兩種節點:

(1)Visible node:可以直接在瀏覽器上看到的節點,其下沒有子節點。包括以下幾個:

„ Text node:僅包含文字內容的節點

„ Url node:具有超連結功能的節點,如:<a href=”…”>

„ Image node:其內容為圖片、或 Flash 等能夠直接在瀏覽器上看見的物件

„ separate node:HTML tag 本身就具有分隔效果,如:<hr>

(2)Format node:節點內包含多個子節點,並由特定格式來呈現。包括:

„ Free format node:包含多個 Visible node,且 Visible node 之間不相似。例 如同時包含圖片和文字的節點。

„ Area format node:本身具有區隔性,能將內容做表格式的呈現,如:

<table>、<div>、<span>、<form>等

„ List format node:包含多個 Visible node 或 Format node ,且是以相似格式 重複出現

„ Combined format node:包含多個 Visible node 或 Format node

圖 9 描述了將網頁元件處理成 XHTML 的過程。首先,一個網頁會包含著各種元件,

其中註解、JavaScript、CSS 樣式等非必要的資訊,要先在這個步驟中拿掉,僅留下 HTML Tag。接下來,將 HTML 轉換成符合 XML 規範的 XHTML 格式。本論文是利用 Tidy 套 件來處理,Tidy 可在各種語言上執行,能夠自動判斷及修復容易寫錯的 HTML 標籤,

不論是標籤的順序,或是標籤是否有結尾等等,接著可以透過標準的轉譯方式,將合法 的 HTML 轉換成為 XML 格式的檔案。

此階段產出的合法 XHTML 檔,就是一個 DOM Tree 的架構。一個合法的 XHTML 檔,會有一個唯一的根節點,其下有數個子節點,每個子節點之下還有其他子節點。相 對於一棵 DOM Tree,就如同樹根、子樹節點、樹葉節點等概念。

在轉換成 XHTML 的過程中會為每個節點加入兩個屬性:ccmID(Check Content for Mark Identify)及 nodeType。ccmID 的值從 1 開始遞增,並且是從<BODY>標籤開始寫入,

因此所有 DOM Tree 的根節點都是<BODY>。而 nodeType 則是記錄該節點的型態是上述 HTML DOM node 的哪一種。

(a) (b) (c)

圖 9、原始網頁與 HTML/XHTML 格式之對應

相關文件