国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Day 18: BoilerPipe —— Java開(kāi)發(fā)者的文章提取工具

wwq0327 / 3019人閱讀

摘要:今天我決定學(xué)習(xí)如何使用做網(wǎng)頁(yè)鏈接的文本和圖像提取。準(zhǔn)備基本的知識(shí)是必需的,安裝最新的開(kāi)發(fā)工具包,可以是或。第步啟用使用來(lái)進(jìn)行依賴(lài)注入。上下文和依賴(lài)注入是一個(gè)規(guī)范,能夠使依賴(lài)注入在的項(xiàng)目中。在文件夾下建一個(gè)名為中一個(gè)新的文件。

編者注:我們發(fā)現(xiàn)了有趣的系列文章《30天學(xué)習(xí)30種新技術(shù)》,正在翻譯,一天一篇更新,年終禮包。下面是第 18 天的內(nèi)容。


今天我決定學(xué)習(xí)如何使用Java做網(wǎng)頁(yè)鏈接的文本和圖像提取。在大多數(shù)內(nèi)容發(fā)現(xiàn)網(wǎng)站上(如Prismatic)這是一個(gè)非常常見(jiàn)的需求,今天就是學(xué)習(xí)如何使用一個(gè)名為boilerpipe的Java庫(kù)來(lái)完成這個(gè)任務(wù)。

準(zhǔn)備

基本的Java知識(shí)是必需的,安裝最新的Java開(kāi)發(fā)工具包(JDK ),可以是OpenJDK 7或Oracle JDK 7。

注冊(cè)一個(gè)OpenShift帳戶(hù),它是完全免費(fèi)的,可以分配給每個(gè)用戶(hù)1.5 GB的內(nèi)存和3 GB的磁盤(pán)空間。

安裝RHC客戶(hù)端工具,需要有ruby 1.8.7或更新的版本,如果已經(jīng)有ruby gem,輸入 sudo gem install rhc ,確保它是最新版本。要更新RHC的話,執(zhí)行命令 sudo gem update rhc,如需其他協(xié)助安裝RHC命令行工具,請(qǐng)參閱該頁(yè)面: https://www.openshift.com/developers/rhc-client-tools-install

通過(guò) rhc setup 命令設(shè)置您的OpenShift帳戶(hù),此命令將幫助你創(chuàng)建一個(gè)命名空間,并上傳你的SSH keys到OpenShift服務(wù)器。


第1步:創(chuàng)建一個(gè)JBoss EAP的應(yīng)用

首先從創(chuàng)建示例應(yīng)用程序開(kāi)始,把該應(yīng)用稱(chēng)作 newsapp

$ rhc create-app newsapp jbosseap

然后可以使用如下命令:

$ rhc create-app newsapp jbosseap -g medium

這樣會(huì)創(chuàng)建一個(gè)應(yīng)用程序容器,設(shè)置好所有需要的SELinux政策和cgroup配置,OpenShift也將創(chuàng)建一個(gè)私人git倉(cāng)庫(kù)并克隆到本地。最后,OpenShift會(huì)給外界提供一個(gè)DNS,該應(yīng)用程序?qū)⒃?b>http://newsapp-{domain-name}.rhcloud.com/ 下可以訪問(wèn)(將 domain-name 更換為自己的域名)。

第2步:添加Maven依賴(lài)

pom.xml 文件里添加如下依賴(lài):


    de.l3s.boilerpipe
    boilerpipe
    1.2.0


    xerces
    xercesImpl
    2.9.1



    net.sourceforge.nekohtml
    nekohtml
    1.9.13

同時(shí)也需要加一個(gè)新的庫(kù):


    boilerpipe-m2-repo
    http://boilerpipe.googlecode.com/svn/repo/
    
        true
    
    
        false
    

通過(guò)更新 pom.xml 文件里的幾個(gè)特性將Maven項(xiàng)目更新到Java 7:

1.7
1.7

現(xiàn)在就可以更新Maven項(xiàng)目了(右鍵單擊>Maven>更新項(xiàng)目)。

第3步:?jiǎn)⒂肅DI

使用CDI來(lái)進(jìn)行依賴(lài)注入。CDI、上下文和依賴(lài)注入是一個(gè)Java EE 6規(guī)范,能夠使依賴(lài)注入在Java EE 6的項(xiàng)目中。

src/main/webapp/WEB-INF 文件夾下建一個(gè)名為beans.xml中一個(gè)新的XML文件。更換beans.xml中的以下內(nèi)容:




第4步:創(chuàng)建Boilerpipe內(nèi)容提取服務(wù)

現(xiàn)在創(chuàng)建一個(gè)Boilerpipe內(nèi)容提取服務(wù)的服務(wù)類(lèi),這個(gè)類(lèi)會(huì)用一個(gè)url,從這個(gè)url中提取標(biāo)題和文章內(nèi)容。

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 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;
        }

    }
}

上述代碼執(zhí)行以下操作:

首先在給定的url中讀取文件

然后解析HTML文檔并返回TextDocument

接下來(lái)從文本文件中提取標(biāo)題

最后從文本中提取內(nèi)容,返回一個(gè)應(yīng)用的值對(duì)象的新實(shí)例(value object)

第5步:?jiǎn)⒂肑AX-RS

為啟用JAX-RS,建立一個(gè)擴(kuò)展 javax.ws.rs.core.Application 的類(lèi),并通過(guò)如下所示的 javax.ws.rs.ApplicationPath 注釋指定應(yīng)用程序路徑。

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/api/v1")
public class JaxrsInitializer extends Application{


}
第6步:創(chuàng)建ContentExtractionResource

創(chuàng)建ContentExtractionResource類(lèi),它會(huì)返回一個(gè)JSON內(nèi)容對(duì)象。創(chuàng)建一個(gè)名為ContentExtractionResource的新類(lèi),并用如下所示的內(nèi)容替換:

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);
    }
}
部署到OpenShift

最后,更改部署到OpenShift

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

在代碼push和部署完成后,我們可以在 http://newsapp-{{domain-name}.rhcloud.com 查看正在運(yùn)行的應(yīng)用程序。我的示例應(yīng)用程序展示如下。

今天就這些,歡迎反饋。


原文 Day 18: BoilerPipe--Article Extraction for Java Developers
翻譯整理 SegmentFault

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64013.html

相關(guān)文章

  • 文章內(nèi)容提取庫(kù) goose 簡(jiǎn)介

    摘要:是一個(gè)文章內(nèi)容提取器,可以從任意資訊文章類(lèi)的網(wǎng)頁(yè)中提取文章主體,并提取標(biāo)題標(biāo)簽摘要圖片視頻等信息,且支持中文網(wǎng)頁(yè)。 爬蟲(chóng)抓取數(shù)據(jù)有兩個(gè)頭疼的點(diǎn),寫(xiě)過(guò)爬蟲(chóng)的小伙伴們一定都深有體會(huì): 網(wǎng)站的 防抓取 機(jī)制。你要盡可能將自己偽裝成一個(gè)人,騙過(guò)對(duì)方的服務(wù)器反爬驗(yàn)證。 網(wǎng)站的 內(nèi)容提取 。每個(gè)網(wǎng)站都需要你做不同的處理,而且網(wǎng)站一旦改版,你的代碼也得跟著更新。 第一點(diǎn)沒(méi)什么捷徑可走,套路見(jiàn)得多...

    keithxiaoy 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)》讀書(shū)筆記 -第十二章 新日期和時(shí)間 API

    摘要:類(lèi)似地,一天中的時(shí)間,比如,可以使用類(lèi)表示。合并日期和時(shí)間這個(gè)復(fù)合類(lèi)名叫,是和的合體。對(duì)于最常見(jiàn)的用例,日期和時(shí)間已經(jīng)提供了大量預(yù)定義的。你甚至還可以創(chuàng)建這樣的,它使用的歷法系統(tǒng),以相對(duì)于格林尼治時(shí)間的偏差方式表示日期時(shí)間。 一、LocalDate、LocalTime、Instant、Duration 以及 Period 1.使用 LocalDate 和 LocalTime 創(chuàng)建一個(gè)L...

    darry 評(píng)論0 收藏0
  • 正則表達(dá)式在 ES2018新寫(xiě)法

    摘要:自從年推出標(biāo)準(zhǔn)第版以來(lái),正則表達(dá)式已成為語(yǔ)言的一部分。最后,如果在正則表達(dá)式中使用了命名捕獲組,則將它們放在屬性中。支持與相同語(yǔ)法的命名組已經(jīng)模仿了的正則表達(dá)式語(yǔ)法。下面是一個(gè)例子此正則表達(dá)式在句子中查找連續(xù)的重復(fù)單詞。 翻譯:瘋狂的技術(shù)宅原文:https://www.smashingmagazine.... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你推...

    lanffy 評(píng)論0 收藏0
  • JDK1.8-新日期和時(shí)間API

    摘要:這個(gè)月的天數(shù)是否事閏年似地,一天中的時(shí)間,比如,可以使用類(lèi)表示。使用靜態(tài)方法,你可以實(shí)現(xiàn)這一目的合并日期和時(shí)間這個(gè)復(fù)合類(lèi)名叫,是和的合體。對(duì)于最常見(jiàn)的用例,日期和時(shí)間已經(jīng)提供了大量預(yù)定義的。Java的API提供了很多有用的組件,能幫助你構(gòu)建復(fù)雜的應(yīng)用。不過(guò),Java API也不總是完美的。我們相信大多數(shù)有經(jīng)驗(yàn)的程序員都會(huì)贊同Java 8之前的庫(kù)對(duì)日期和時(shí)間的支持就非常不理想。然而,你也不用太...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<