WebCollector 网页正文提取算法(ContentExtractor)

WebCollector自2.10版起加入新闻网页正文自动提取功能(与hfut-dmic的ContentExtractor项目合并)。

WebCollector的正文抽取API都被封装为ContentExtractor类的静态方法。
可以抽取结构化新闻,也可以只抽取网页的正文(或正文所在Element)。

正文抽取效果指标 :

  • 比赛数据集CleanEval P=93.79% R=86.02% F=86.72%
  • 常见新闻网站数据集 P=97.87% R=94.26% F=95.33%
  • 算法无视语种,适用于各种语种的网页

标题抽取和日期抽取使用简单启发式算法,并没有像正文抽取算法一样在标准数据集上测试。

源码可在https://github.com/CrawlScript/WebCollector中下载,也可在https://github.com/CrawlScript/WebCollector中下载webcollector-version-bin.zip,解压后导入所有jar包。

需要了解的两个类 :

  • ContentExtractor : 封装了正文抽取算法和正文抽取的API,正文抽取API都被封装为ContentExtractor类的静态方法
  • News : 结构化新闻对应的模型

DEMO(TutorialContentExtractor.java)如下 :

import cn.edu.hfut.dmic.contentextractor.ContentExtractor;
import cn.edu.hfut.dmic.contentextractor.News;
import cn.edu.hfut.dmic.webcollector.net.HttpRequest;

/**
 * 本教程演示了从WebCollector 2.10起添加的新闻网页正文自动提取功能
 *
 * @author hu
 */
public class TutorialContentExtractor {

    /*输入HTML,输出制定网页结构化信息*/
    public static void demo1() throws Exception {
        String url = "http://www.huxiu.com/article/121959/1.html";
        HttpRequest request = new HttpRequest(url);
        String html = request.getResponse().getHtmlByCharsetDetect();
        News news = ContentExtractor.getNewsByHtml(html, url);
        System.out.println(news);
    }

    /*输入URL,输出制定网页结构化信息*/
    public static void demo2() throws Exception {
        String url = "http://www.huxiu.com/article/121959/1.html";
        News news = ContentExtractor.getNewsByUrl(url);
        System.out.println(news);
    }

    /*输入HTML,输出制定网页的正文*/
    public static void demo3() throws Exception {
        String url = "http://www.huxiu.com/article/121959/1.html";
        HttpRequest request = new HttpRequest(url);
        String html = request.getResponse().getHtmlByCharsetDetect();
        String content = ContentExtractor.getContentByHtml(html, url);
        System.out.println(content);

        //也可抽取网页正文所在的Element
        //Element contentElement = ContentExtractor.getContentElementByHtml(html, url);
        //System.out.println(contentElement);
    }

    /*输入URL,输出制定网页的正文*/
    public static void demo4() throws Exception {
        String url = "http://www.huxiu.com/article/121959/1.html";
        String content = ContentExtractor.getContentByUrl(url);
        System.out.println(content);

        //也可抽取网页正文所在的Element
        //Element contentElement = ContentExtractor.getContentElementByUrl(url);
        //System.out.println(contentElement);
    }

    public static void main(String[] args) throws Exception {
        demo1();
        //demo2();
        //demo3();
        //demo4();
    }
}

想了解基于机器学习的网页正文提取算法,可以参考博客《网页抽取技术和算法》。

你可能感兴趣的:(网页正文提取)