淺識網頁正文提取算法
因為要到一家互聯網公司參加自然語言處理實習生面試,對於崗位要求中提到的工作內容--"網頁正文內容提取"的相關知識進行了一下突擊。重點看了一下網頁正文提取所涉及到的各種算法,網上的內容很多,我只是看了其中一小部分,對各類算法做了一個簡單的了解,不敢說對其做一個綜述,只是以一個學習者的學習習慣來記錄我對網頁正文提取算法的淺認識,本文並不會對算法進行詳細的步驟講解,只提思路和思想。
為什么要進行正文提取?
對於一個單獨的網頁,往往最有價值的部分是網頁的正文。然而就現在的大多數的網站的網頁而言,不僅僅包含正文,網頁標簽等,其他的如廣告,網頁鏈接,插件等占據了網頁相當一部分的內容。由於現實的需要,我們往往需要對網頁的內容進行分析從而提取有價值的信息。一個網頁的內容基本包含在正文中,對於新聞類網頁尤其。將網頁正文之外其他的內容剔除從而降低分析的難度是一種基本的思路。同時正文內容提取的好壞直接影響到接下來分析工作的質量。如何使用最快捷的方法來獲取網頁的正文同時又保證提取的內容的准確性?人們為這個問題一直努力着!
網頁正文提取的思路及算法
作為一個剛開始對正文提取沒有什么認識的人,比如我,第一想法就是利用HTML網頁的標簽來判斷正文的位置。因為根據網頁的編輯和布局習慣,一般會將網頁在正文部分放入到<p>,<table>以及<div> 中,並且應該包含<title>和<head>等標簽。如果能夠利用正則表達式首先找到這些標簽的位置,並做相應的判斷即可找到正文的內容位置。這是第一種思路,基於標簽。
1. 基於標簽
這是很容易想到的一種思路。基於HTML文件本身的某些結構特點和規范。這里也可以細分:
- 基於標簽窗的算法: 例如<p>段落標簽,一般的正文內容都會嵌套其中。<title>標題標簽,一般會將論文的標題嵌入,接下來的內容很大程度上應該是正文的內容了。根據寫作習慣,標題下方開始寫正文,上方<p>標簽就應該會頻繁出現,主要的思路是標簽的某種組合和標簽的內容對應。
- 基於標簽密度的算法:對於大多數的網頁而言,正文部分的標簽明顯要少於非正文部分,而且正文當中的標簽大部分標簽應該屬於修飾類標簽。這就有一種基於標簽統計的思路算法。從某一行開始,標簽數量明顯減少,到某一行又驟升,這一間隔區域很大程度上就屬於網頁的正文部分。
- 基於DOM樹的算法:
什么叫DOM(Document Object Model)樹:並沒有看到對DOM樹的定義,不過很容易理解,下圖就很明白體現了一種對應關系。
在一個網頁中標簽的位置下左圖所示,而對應的DOM樹如下又圖(圖片來源:http://www.w3school.com.cn/htmldom/dom_nodes.asp)所示:
這種算法需要對網站HTML建立DOM樹,然后對之進行遍歷遞歸,去除相應的噪音信息之后再從剩余的節點中進行選擇。由於要建立DOM樹,算法的時間/空間復雜度均較高。
基於標簽的算法都潛在默認了這樣的一個信息:即網站的網頁生成,制作都遵循了一定的標簽使用規范。不過現在的互聯網網頁五花八門,很難都按常理出牌,所以這在一定程度上降低了算法的准確性和通用性。
2. 基於內容
網頁按照內容形式分類大概分為:主題型,圖片型和目錄型。
對於主體型的網頁,例如新聞類,博客類等,主要特點是文字內容比較多。基於這一點,另外一種正文提取思路是基於正文本身的特點。在一定程度上,正文的文字數量要比其他部分多。這在一定程度上有助於形成了區域的區分度。文字數量的驟增和驟減在一定程度上可以作為正文開始和介紹的判讀點。
這類算法在本質上沒有多大的差異,只是選擇度量文字密度的方式不同而已。有的是基於塊,有的是基於行,有的是基於轉化函數。算法都很容易理解,也相對比較容易實現。下面的幾篇文章就是基於網頁內容的算法。
《基於行塊分布函數的通用網頁正文抽取》陳鑫
《基於網頁分塊的正文信息提取方法》 黃 玲,陳 龍
博文《我為開源作貢獻,網頁正文提取--HtmlArticle2》
3. 基於視覺
想對於前面兩種思路,這類算法的思路有一種"高大上"的感覺。這里不得不提到這類算法的基礎:VIPS(Vision-based Page Segementation)算法。
VIPS算法:利用背景顏色,字體顏色和大小,邊框,邏輯塊和邏輯塊之間的間距等視覺特征,制定相應的規則把頁面分割成各個視覺塊!(視覺效果真的是千變萬化,如何制定規則集始終是個復雜的問題)
VIPS算法充分利用了Web頁面的布局特征。它首先從DOM 樹中提取出所有合適的頁面塊,然后根據這些頁面塊檢測出它們之間所有的分割條,包括水平和垂直方向;最后基於這些分割條.重新構建Web頁面的語義結構。對於每一個語義塊又可以使用VIPS算法繼續分割為更小的語義塊。該算法分為頁面塊提取、分隔條提取和語義塊重構3部分,並且是遞歸調用的過程,直到條件不滿足為止.
相關文獻:
《基於視覺特征的網頁正文提取方法研究》安增文,徐傑鋒
《A vision—based page segmentation algorithm》
4. 基於數據挖掘/機器學習
看到很多作者對這一思路的普遍評價是"殺雞焉用牛刀"。
基本思路是使用一定數量的網頁作為訓練集,通過訓練得到網頁正文的一些特點,然后將這些特征作為網頁片段是否符合網頁正文的判斷依據。對於數據挖掘/機器學習算法來講,訓練樣本的采集很重要,然而現實是互聯網中網頁形式千變萬化,不太可能取太多數量作為訓練樣本。這樣這種算法的准確性和通用性就受到了制約,同時這類算法前期工作也比較復雜。