最近做一個項目,其中涉及到網頁信息采集,隨后對相關的技術進行了學習與研發,網頁正文提取技術常用的有joyhtml、boilerpipe、cx-extractor下面將對其做一個簡單的對比說明,和大家進行下分享。
相關技術
1. joyhtml:http://code.google.com/p/joyhtml/
JoyHTML的目的是解析HTML文本當中的鏈接和正文,利用超鏈接密度法為主要判斷依據的標記窗算法,采用DOM樹解析模式。
2. boilerpipe: http://code.google.com/p/boilerpipe/
這個Java類庫提供算法來探測和刪除在一個網頁中主文本內容旁多余的重復內容。它已經有提供特殊的策略來處理一些常用的功能如:新聞文章提取
依賴的lib:
lib.rar
boilerpipe-1.2.0-bin.tar.gz
使用示例:
public static void main(String[] args) throws Exception {
String url = "http://finance.people.com.cn/n/2013/1011/c66323-23157265.html";
TextDocument doc = new BoilerpipeSAXInput(new InputSource(new URL(url).openStream()))
.getTextDocument();
BoilerpipeExtractor extractor = CommonExtractors.ARTICLE_EXTRACTOR;
extractor.process(doc);
System.out.println("title:" + doc.getTitle());
System.out.println("content:" + doc.getContent());
}
3. cx-extractor:http://code.google.com/p/cx-extractor/
本算法首次將網頁正文抽取問題轉化為求頁面的行塊分布函數,并完全脫離HTML標簽。通過線性時間建立行塊分布函數圖,由此圖可以直接高效、準確的定位網頁正文。同時采用統計與規則相結合的方法來解決系統的通用性問題。
4. WebCollector/ContentExtractor:https://github.com/CrawlScript/WebCollector
WebCollector的正文抽取API都被封裝為ContentExtractor類的靜態方法。 可以抽取結構化新聞,也可以只抽取網頁的正文(或正文所在Element)。
正文抽取效果指標 :
比賽數據集CleanEval P=93.79% R=86.02% F=86.72%
常見新聞網站數據集 P=97.87% R=94.26% F=95.33%
算法無視語種,適用于各種語種的網頁。
標題抽取和日期抽取使用簡單啟發式算法。
調用方法:
News news = ContentExtractor.getNewsByHtml(html, url);
News news = ContentExtractor.getNewsByHtml(html);
News news = ContentExtractor.getNewsByUrl(url);
String content = ContentExtractor.getContentByHtml(html, url);
String content = ContentExtractor.getContentByHtml(html);
String content = ContentExtractor.getContentByUrl(url);
Element contentElement = ContentExtractor.getContentElementByHtml(html, url);
Element contentElement = ContentExtractor.getContentElementByHtml(html);
Element contentElement = ContentExtractor.getContentElementByUrl(url);
最終選擇WebCollector
理由如下:
簡單:java代碼不超過400行
準確率高:>95%
算法時間復雜度為線性