淺識網頁正文提取演算法
因為要到一家網際網路公司參加自然語言處理實習生面試,對於崗位要求中提到的工作內容--"網頁正文內容提取"的相關知識進行了一下突擊。重點看了一下網頁正文提取所涉及到的各種演算法,網上的內容很多,我只是看了其中一小部分,對各類演算法做了乙個簡單的了解,不敢說對其做乙個綜述,只是以乙個學習者的學習習慣來記錄我對網頁正文提取演算法的淺認識,本文並不會對演算法進行詳細的步驟講解,只提思路和思想。
為什麼要進行正文提取?
對於乙個單獨的網頁,往往最有價值的部分是網頁的正文。然而就現在的大多數的**的網頁而言,不僅僅包含正文,網頁標籤等,其他的如廣告,網頁鏈結,外掛程式等佔據了網頁相當一部分的內容。由於現實的需要,我們往往需要對網頁的內容進行分析從而提取有價值的資訊。乙個網頁的內容基本包含在正文中,對於新聞類網頁尤其。將網頁正文之外其他的內容剔除從而降低分析的難度是一種基本的思路。同時正文內容提取的好壞直接影響到接下來分析工作的質量。如何使用最快捷的方法來獲取網頁的正文同時又保證提取的內容的準確性?人們為這個問題一直努力著!
網頁正文提取的思路及演算法
作為乙個剛開始對正文提取沒有什麼認識的人,比如我,第一想法就是利用html網頁的標籤來判斷正文的位置。因為根據網頁的編輯和布局習慣,一般會將網頁在正文部分放入到,以及中,並且應該包含和等標籤。如果能夠利用正規表示式首先找到這些標籤的位置,並做相應的判斷即可找到正文的內容位置。這是第一種思路,基於標籤。
1. 基於標籤
這是很容易想到的一種思路。基於html檔案本身的某些結構特點和規範。這裡也可以細分:
什麼叫dom(document object model)樹:並沒有看到對dom樹的定義,不過很容易理解,下圖就很明白體現了一種對應關係。
基於標籤的演算法都潛在預設了這樣的乙個資訊:即**的網頁生成,製作都遵循了一定的標籤使用規範。不過現在的網際網路網頁五花八門,很難都按常理出牌,所以這在一定程度上降低了演算法的準確性和通用性。
2. 基於內容
對於主體型的網頁,例如新聞類,部落格類等,主要特點是文字內容比較多。基於這一點,另外一種正文提取思路是基於正文本身的特點。在一定程度上,正文的文字數量要比其他部分多。這在一定程度上有助於形成了區域的區分度。文字數量的驟增和驟減在一定程度上可以作為正文開始和介紹的判讀點。
這類演算法在本質上沒有多大的差異,只是選擇度量文字密度的方式不同而已。有的是基於塊,有的是基於行,有的是基於轉化函式。演算法都很容易理解,也相對比較容易實現。下面的幾篇文章就是基於網頁內容的演算法。
《基於行塊分布函式的通用網頁正文抽取》陳鑫
《基於網頁分塊的正文資訊提取方法》 黃 玲,陳 龍
博文《我為開源作貢獻,網頁正文提取--htmlarticle2》
3. 基於視覺
想對於前面兩種思路,這類演算法的思路有一種"高大上"的感覺。這裡不得不提到這類演算法的基礎:vips(vision-based page segementation)演算法。
vips演算法:利用背景顏色,字型顏色和大小,邊框,邏輯塊和邏輯塊之間的間距等視覺特徵,制定相應的規則把頁面分割成各個視覺塊!(視覺效果真的是千變萬化,如何制定規則集始終是個複雜的問題)
vips演算法充分利用了web頁面的布局特徵。它首先從dom 樹中提取出所有合適的頁面塊,然後根據這些頁面塊檢測出它們之間所有的分割條,包括水平和垂直方向;最後基於這些分割條.重新構建web頁面的語義結構。對於每乙個語義塊又可以使用vips演算法繼續分割為更小的語義塊。該演算法分為頁面塊提取、分隔條提取和語義塊重構3部分,並且是遞迴呼叫的過程,直到條件不滿足為止.
《基於視覺特徵的網頁正文提取方法研究》安增文,徐傑鋒
《a vision—based page segmentation algorithm》
4. 基於資料探勘/機器學習
看到很多作者對這一思路的普遍評價是"殺雞焉用牛刀"。
基本思路是使用一定數量的網頁作為訓練集,通過訓練得到網頁正文的一些特點,然後將這些特徵作為網頁片段是否符合網頁正文的判斷依據。對於資料探勘/機器學習演算法來講,訓練樣本的採集很重要,然而現實是網際網路中網頁形式千變萬化,不太可能取太多數量作為訓練樣本。這樣這種演算法的準確性和通用性就受到了制約,同時這類演算法前期工作也比較複雜。
遞迴淺識1
遞迴遞迴,就是先遞再歸,有兩個過程,分別是遞和歸,從形式上來看,如果乙個方法內部呼叫了自己本函式,我們這種情況為遞迴 遞迴的三要素 1.找重複 子問題 2.找重複中的變化量 引數 3.找遞迴的出口 某一條件 如果乙個函式,自己呼叫了自己,但是又沒有遞迴的出口,那麼便會出現stackoverflow的...
gitignre原理淺識
在專案過程中,由於需要忽略某乙個檔案,所以新建了乙個.gitignore檔案。但是,與我想象的有些不太一樣,和我 pair 的小夥伴直接將.gitignore檔案建在了當前目錄下。結構大致如下 dockerfile gemfile readme.md auto dev environment rub...
淺識位運算
引言 因為不懂一道演算法解析裡的一條語句,然後翻來覆去的查,最後發現是位運算方面的知識,只好順便學一下了,奇奇怪怪的知識又增加了。位邏輯運算 1.運算 0 1 0 0 0 0 1 0 0 1 1 1 運算通常可以用來二進位制取位操作,例如乙個數 1就是取最末尾的數 因為0 1 0,1 1 1,不改變...