做網站的朋友們不免都會涉及到要從其他網站抓取一些資訊。
1. 常用的辦法是用Regex來擷取
優點:比較精準,一蹴而就,不會遺漏你需要的內容
缺點:全中國這麼多網頁,如果寫Regex要寫到發瘋! 如果目標網頁一旦改版就要重新寫Regex,人工排查工作太大。
2. 我們要討論的是是否能自動分析網頁本文 (標題在下一章節講)
有兩個思路 第一是:關鍵字匹配法(本次主要講述此方法,僅思路,因商業原因不提供原始碼) 第二個是:文本地區擷取法
關鍵字匹配法
每個新聞頁面都充斥著大量的文字要素,幹擾因素非常多,本人查閱了很多關於分析本文的文章,很複雜,不適合我們草根程式員使用,而且演算法完成後精確度不怎麼樣,效率也不是很高。於是個人山寨了一個關鍵字匹配法.
準備工作 :
1.準備一個分詞類庫 這裡使用的是 shotseg 1.0 效果很一般 但是還可以用用了。
2.稍微看一下 tf-idf 的概念(TF-IDF是一種統計方法,用以評估一字詞對於一個檔案集或一個語料庫中的其中一份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜尋引擎應用,作為檔案與使用者查詢之間相關程度的度量或評級。除了TF-IDF以外,互連網上的搜尋引擎還會使用基於連結分析的評級方法,以確定檔案在搜尋結果中出現的順序。)
3.自己寫代碼實現根據 url 擷取 html原始碼的方法,由於太簡單 這裡不討論。
4.過濾html源碼中的所有超級連結和指令碼 以及圖片(圖片過濾方法本文不討論,後面會講), 因為新聞詳細頁中的超級連結我們是不需要的,我們需要的是文字資訊。
接下來開始思路講解:
1.過濾完成後的文本,按照斷行符號進行切割,會變成一個文本數組, 裡麵包含了空行和文本資訊, 這裡的空行在本文中沒什麼用處,但是在下一章節中就很有用了
結果 會出現 這樣 string[] strList={ " ",
"\t ",
"今天氣溫到達了40度",
" 摘要:江南地區溫度急速上升"
"請發表評論",
"內容:經過氣象台預測,可能今日江蘇地區氣溫會上升到40度左右。",
"請廣大網民做好防暑工作,盡量減少在高溫下進行體力工作",
"\t ",
"\t ",
"\t ",
"著作權:測試新聞網 ",
}
對於這段文字 我們需要的是 今天氣溫到達了40度 內容:經過氣象台預測,可能今日江蘇地區氣溫會上升到40度左右。請廣大網民做好防暑工作,盡量減少在高溫下進行提供作". 其他的內容都不要 .
通過使用 shootseg 分出關鍵字(稍作處理), 則獲得如下關鍵字 氣溫,今天,摘要,江南地區,溫度,評論,內容,氣象台,預測,江蘇,地區,網民,防暑,減少,高溫,著作權,新聞
然後分別計算 這些關鍵字的tf-idf 值,(語料庫 要自己準備,資料庫中資料越多,語料庫越完善) ,經過計算
擷取tf idf 值最有價值的關鍵字 氣溫,防暑,體力, 這裡需要你在實踐中設定閥值 ,既tf idf值的認可係數。
於是接下來的事情 就比較簡單了, 迴圈所有 列表 ,抽取 包含上述 “最有價值” 關鍵字的 段落 然後進行拼接 於是就得到了最終 的網頁本文。
至於標題, 這裡使用的 是 Regex 擷取 <title></title>的 內容,這樣可以很有效過濾掉 幹擾因素
經過我程式測試 ,大部分新聞網站都能正確 抓取。 因為 大部分新聞 段落 都和本文的的關鍵字直接有關。然後 有種情況經常會遺漏。
如我看到一篇公告 頁面 內容如下
四、周邊環境
1.商業:常州購物中心、文化宮、天寧商都
2.娛樂配套:黃金大酒店、東方明珠KTV、文筆山莊
3.其他:紅梅公園、常州火車站、常州長途汽車客運站
五、注意事項
1.競買資格:具有完全民事行為能力的自然人或法人
2.標的需要一次性付款,貸款合作銀行為中國建設銀行常州分行營業部
六、連絡方式
王先生 1399XXX
本文就不貼了, 本文是 一段對該公告在該地區的介紹,用上述方法能正確擷取, 然而 像上述段落屬於要素資訊,和新聞本文似乎沒有太大關係,這些段落的關鍵字tfidf 值都很低,那麼如果我要擷取到該如何, 下一章 講 “文本地區法擷取本文的方法”
待續.....
請關注我的個人官網: www.shenyisyn.org