zoukankan      html  css  js  c++  java
  • [译] 第十八天:BoilerPipe

    前言

    今天的30天挑战,我决定学习用Java处理从web链接提取文字和图片的问题,这在网站挖掘内容中非常常见,类似Prismatic. 本文,我们来学习用boilerpipeJava库来完成这个任务。 

    前提准备

    1. 掌握Java基础知识。安装最新的Java Development      Kit(JDK), 可以安装OpenJDK 7或者Oracle JDK 7, OpenShift支持OpenJDK 6 7.
    2. OpenShift上注册。OpenShift完全免费,红帽给每个用户免费提供了3Gears来运行程序。目前,这个资源分配合计有每人1.5GB内存,3GB磁盘空间。
    3. 在本机安装rhc 客户端工具,rhcruby gem包,所以你需要安装1.8.7或以上版本的ruby。安装rhc,输入 sudo gem install  rhc. 如果已经安装了,确保是最新的,要更新rhc,输入sudo gem update  rhc.  想了解rhc command-line 工具,更多帮助参考https://www.openshift.com/developers/rhc-client-tools-install.
    4. rhc setup 命令安装OpenShift. 执行命令可以帮你创建空间,上传ssh 密钥到OpenShift服务器。 

    第一步:创建Jboss EAP程序

    开始创建demo, 命名newsapp.

    $ rhc create-app newsapp jbosseap

     

    如果你能访问普通gears可以用以下命令:

    $ rhc create-app newsapp jbosseap -g medium

     

    这会创建一个叫gear的程序容器,安装所需的SELinux策略和cgroup配置,OpenShift也会为你安装一个私有git仓库,克隆到本地,然后它会把DNS传播到网络。可访问http://newsapp-{domain-name}查看程序。替换你自己唯一的OpenShift域名(有时也叫命名空间)

    第二步:添加Maven依赖

    pom.xml中添加依赖。

    <dependency>
        <groupId>de.l3s.boilerpipe</groupId>
        <artifactId>boilerpipe</artifactId>
        <version>1.2.0</version>
    </dependency>
    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.9.1</version>
    </dependency>
     
    <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
        <version>1.9.13</version>
    </dependency>
    View Code

     

    你也需要新加个仓库。

    <repository>
        <id>boilerpipe-m2-repo</id>
        <url>http://boilerpipe.googlecode.com/svn/repo/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    View Code

     

    更新pom.xml里几个属性把maven项目更新到Java 7.

    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    View Code

     

    现在更新Maven项目, 右击>Maven>Update Project.

    第四步:创建BoilerpipeContentExtractionService

    创建BoilerpipeContentExtractionService服务,用来获得url,找文章标题和内容。

    import java.net.URL;
    import java.util.Collections;
    import java.util.List;
     
    import com.newsapp.boilerpipe.image.Image;
    import com.newsapp.boilerpipe.image.ImageExtractor;
     
    import de.l3s.boilerpipe.BoilerpipeExtractor;
    import de.l3s.boilerpipe.document.TextDocument;
    import de.l3s.boilerpipe.extractors.ArticleExtractor;
    import de.l3s.boilerpipe.extractors.CommonExtractors;
    import de.l3s.boilerpipe.sax.BoilerpipeSAXInput;
    import de.l3s.boilerpipe.sax.HTMLDocument;
    import de.l3s.boilerpipe.sax.HTMLFetcher;
     
    public class BoilerpipeContentExtractionService {
     
        public Content content(String url) {
            try {
                final HTMLDocument htmlDoc = HTMLFetcher.fetch(new URL(url));
                final TextDocument doc = new BoilerpipeSAXInput(htmlDoc.toInputSource()).getTextDocument();
                String title = doc.getTitle();
     
                String content = ArticleExtractor.INSTANCE.getText(doc);
     
                final BoilerpipeExtractor extractor = CommonExtractors.KEEP_EVERYTHING_EXTRACTOR;
                final ImageExtractor ie = ImageExtractor.INSTANCE;
     
                List<Image> images = ie.process(new URL(url), extractor);
     
                Collections.sort(images);
                String image = null;
                if (!images.isEmpty()) {
                    image = images.get(0).getSrc();
                }
     
                return new Content(title, content.substring(0, 200), image);
            } catch (Exception e) {
                return null;
            }
     
        }
    }
    View Code

     

    以上代码:

    1. 从给定的url获取文件。
    2. 分析HTML, 返回TextDocument
    3. 从文章内容获取标题。
    4. 最后,从文章提取内容,返回程序值对象的新实例。 

    第五步:激活JAX-RS

    要激活JAX-RS, 创建一个类继承 javax.ws.rs.core.Application, 指定路径用 javax.ws.rs.ApplicationPath

    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;
     
    @ApplicationPath("/api/v1")
    public class JaxrsInitializer extends Application{
     
     
    }
    View Code

    第六步:创建ContentExtractionResource

    现在创建ContentExtractionResource类,让内容最为JSON返回,新建类ContentExtractionResource, 用以下代码替代。

    import javax.inject.Inject;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
     
    import com.newsapp.service.BoilerpipeContentExtractionService;
    import com.newsapp.service.Content;
     
    @Path("/content")
    public class ContentExtractionResource {
     
        @Inject
        private BoilerpipeContentExtractionService boilerpipeContentExtractionService;
     
        @GET
        @Produces(value = MediaType.APPLICATION_JSON)
        public Content extractContent(@QueryParam("url") String url) {
            return boilerpipeContentExtractionService.content(url);
        }
    }
    View Code

    部署到OpenShift

    最后,部署更新到OpenShift.

    $ git add .
    $ git commit -am "NewApp"
    $ git push
    View Code

     

    代码和war成功推送部署后,可以在http://newsapp-{domain-name}.rhcloud.com查看程序,我的示例http://newsapp-t20.rhcloud.com. 

     

    现在可以在程序界面提交一个链接测试。

    这就是今天的内容,继续给反馈吧。

     

    原文:https://www.openshift.com/blogs/day-18-boilerpipe-article-extraction-for-java-developers

  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/endless-on/p/3503996.html
Copyright © 2011-2022 走看看