陳婷婷,嚴(yán) 華,2,臧 軍
(1.四川大學(xué) 電子信息學(xué)院,四川 成都 610000;2.電子信息控制重點(diǎn)實(shí)驗(yàn)室,四川 成都 610000;3.中石化管道儲(chǔ)運(yùn)有限公司 荊門輸油處,湖北 荊門 448000)
互聯(lián)網(wǎng)上的網(wǎng)站由于某些商業(yè)原因,網(wǎng)頁中的正文內(nèi)容通常會(huì)被一些廣告、版權(quán)信息、評(píng)論版塊等網(wǎng)頁噪音圍繞,這無疑對(duì)精確抽取正文內(nèi)容帶來難度。另外,隨著互聯(lián)網(wǎng)網(wǎng)頁的爆炸式增長(zhǎng),網(wǎng)頁布局風(fēng)格也是變化萬千,不同類型網(wǎng)站網(wǎng)頁樣式通常大不相同。如何將正文提取方法適用于各種網(wǎng)站的網(wǎng)頁布局,正確過濾網(wǎng)頁噪音,使其具有通用性,仍是我們需要解決的問題。
目前國(guó)內(nèi)外對(duì)于網(wǎng)頁正文提取的算法主要分為4大類:
(1)基于模板規(guī)則。這類算法從大量網(wǎng)頁中生成模板,進(jìn)而通過模板匹配來過濾網(wǎng)頁噪音從而生成網(wǎng)頁正文[1-3]。通常,不同的網(wǎng)站擁有不同的網(wǎng)頁布局,同一網(wǎng)站下的網(wǎng)頁擁有相似網(wǎng)頁布局?;谀0逡?guī)則的正文提取方法復(fù)雜度較低,但由于其主要針對(duì)一個(gè)或相似網(wǎng)頁布局的網(wǎng)站,不具有通用性。
(2)基于視覺分塊。這類算法根據(jù)網(wǎng)頁中的位置視覺信息來確定正文區(qū)域塊,雖然提取效果很好但其依賴于瀏覽器內(nèi)核代碼,耗時(shí)長(zhǎng),算法復(fù)雜度高[4,5]。
(3)基于啟發(fā)式規(guī)則。這類算法首先將HTML解析成DOM樹或某種特定格式,根據(jù)正文特征如文本長(zhǎng)度、純文本比率、標(biāo)點(diǎn),人為指定若干規(guī)則最終找到正文塊并提取正文內(nèi)容,復(fù)雜度較低,針對(duì)新聞、博客類網(wǎng)站有較好的正文提取效果[6-8]。
(4)基于機(jī)器學(xué)習(xí)。這類算法使用機(jī)器學(xué)習(xí)算法,如粒子群算法[9,10]、決策樹算法[11],對(duì)網(wǎng)頁正文特征,如文本特征密度、特征標(biāo)簽個(gè)數(shù)、標(biāo)點(diǎn)個(gè)數(shù)或標(biāo)點(diǎn)密度等確定其影響因子權(quán)值,根據(jù)目標(biāo)函數(shù)最大值確定正文內(nèi)容。該類算法適應(yīng)性較高,但其運(yùn)算量較大,算法復(fù)雜度較高。
Readability內(nèi)容分析算法作為一種啟發(fā)式算法,以其高效過濾網(wǎng)頁噪音,目前已被應(yīng)用到多種瀏覽器的文本瀏覽應(yīng)用中。該算法通過遍歷DOM對(duì)象,結(jié)合標(biāo)簽和屬性值對(duì)節(jié)點(diǎn)進(jìn)行加權(quán)計(jì)分,根據(jù)分?jǐn)?shù)和文本特性重新整合出頁面內(nèi)容。然而,在應(yīng)用到不同風(fēng)格的網(wǎng)頁正文抽取中時(shí),容易遺漏正文內(nèi)部數(shù)據(jù)信息的問題顯得尤為突出。針對(duì)該不足,從正文塊生成和剪枝兩個(gè)方面對(duì)Readability算法進(jìn)行改進(jìn),在確保過濾網(wǎng)頁噪音基礎(chǔ)上有效地保留了正文數(shù)據(jù)信息。
目前互聯(lián)網(wǎng)上的網(wǎng)頁主要分為3種類型,即導(dǎo)航型、主題型、圖片型。導(dǎo)航型網(wǎng)頁主要由各種超鏈接構(gòu)成,例如各大網(wǎng)站的首頁,主要目的是方便用戶選擇感興趣的網(wǎng)頁瀏覽;主題型網(wǎng)頁主要由成段而連續(xù)的純文本構(gòu)成,以此來描述一個(gè)或多個(gè)主題,這些文字一般位于網(wǎng)頁中心,被一些廣告、相關(guān)鏈接塊、版權(quán)說明信息等網(wǎng)頁噪音圍繞;圖片型網(wǎng)頁主要以圖片的形式闡述內(nèi)容,僅含有少量的文字說明。另外,在瀏覽網(wǎng)頁過程中還發(fā)現(xiàn)一種類似于半導(dǎo)航半主題型的網(wǎng)頁,即在導(dǎo)航鏈接下有部分不完整的文字描述鏈接主題。
本文提出的正文提取方法針對(duì)主題型網(wǎng)頁,通過大量搜集各大網(wǎng)站主題型網(wǎng)頁后,得到了關(guān)于正文特征的幾點(diǎn)規(guī)律,即:
(1)正文信息緊密地集中分布于網(wǎng)頁中的某一區(qū)域,其通常集中包含在一個(gè)容器標(biāo)簽中或者分散包含在多個(gè)同級(jí)容器標(biāo)簽中。
(2)網(wǎng)頁中的正文與廣告鏈接這類網(wǎng)頁噪音均為文本內(nèi)容,區(qū)別在于兩者之間的文本特性,即正文內(nèi)容文本長(zhǎng)度較大、純文本比率較高、標(biāo)點(diǎn)符號(hào)較多。
(3)網(wǎng)頁中還存在部分文本特性與正文相似的網(wǎng)頁噪音,如版權(quán)信息,其純文本比率較高。這類網(wǎng)頁噪音通常與其它廣告鏈接一起分布在正文四周,極少夾雜在正文內(nèi)部。
Readablitity算法主要通過p標(biāo)簽的文本特性以及定義的正則表達(dá)式對(duì)標(biāo)簽進(jìn)行過濾和加權(quán)計(jì)分,從而進(jìn)行內(nèi)容分析。正則表達(dá)式見表1。
表1 正則表達(dá)匹配
算法步驟:
步驟1HTML解析。如圖1所示,將HTML解析成一棵DOM樹,通過遍歷樹節(jié)點(diǎn),操作HTML標(biāo)簽。
圖1 構(gòu)造DOM樹
步驟2過濾。遍歷標(biāo)簽節(jié)點(diǎn),提取其class和id屬性進(jìn)行正則匹配。表1中,unlikely_Candidates用于節(jié)點(diǎn)的過濾,表示該節(jié)點(diǎn)內(nèi)容不太可能是正文,僅當(dāng)出現(xiàn)正文抽取結(jié)果為空時(shí),選擇不過濾這些節(jié)點(diǎn)進(jìn)行二次提取操作。
步驟3確定正文主塊節(jié)點(diǎn)。針對(duì)段落標(biāo)簽,對(duì)其父節(jié)點(diǎn)和祖父節(jié)點(diǎn)進(jìn)行計(jì)分。計(jì)分因子包括
標(biāo)簽所含文本長(zhǎng)度、包含標(biāo)點(diǎn)個(gè)數(shù)、節(jié)點(diǎn)標(biāo)簽名。若
標(biāo)簽文本長(zhǎng)度達(dá)標(biāo)(>25),將其父節(jié)點(diǎn)和祖父節(jié)點(diǎn)加入候選節(jié)點(diǎn)列表。最后通過遍歷候選節(jié)點(diǎn),結(jié)合純文本比率選出最高分?jǐn)?shù)的標(biāo)簽節(jié)點(diǎn)作為正文主塊節(jié)點(diǎn)。步驟4正文塊生成。遍歷正文主塊節(jié)點(diǎn)的同輩節(jié)點(diǎn),判斷其是否為正文節(jié)點(diǎn)。首先評(píng)估其節(jié)點(diǎn)分?jǐn)?shù),若節(jié)點(diǎn)分?jǐn)?shù)達(dá)標(biāo)則標(biāo)注為正文節(jié)點(diǎn),否則判斷其是否為
標(biāo)簽節(jié)點(diǎn),若為
標(biāo)簽節(jié)點(diǎn)且其文本特性達(dá)標(biāo)則同樣標(biāo)注為正文節(jié)點(diǎn)。最后,創(chuàng)建一容器節(jié)點(diǎn)作為正文塊節(jié)點(diǎn),將篩選得到的正文節(jié)點(diǎn)與正文主塊節(jié)點(diǎn)拼接到正文塊節(jié)點(diǎn)中。
步驟5剪枝。對(duì)正文塊節(jié)點(diǎn)中的特定標(biāo)簽進(jìn)行清理,遍歷其中的