摘要:今天我決定學習如何使用做網頁鏈接的文本和圖像提取。準備基本的知識是必需的,安裝最新的開發工具包,可以是或。第步啟用使用來進行依賴注入。上下文和依賴注入是一個規范,能夠使依賴注入在的項目中。在文件夾下建一個名為中一個新的文件。
編者注:我們發現了有趣的系列文章《30天學習30種新技術》,正在翻譯,一天一篇更新,年終禮包。下面是第 18 天的內容。
今天我決定學習如何使用Java做網頁鏈接的文本和圖像提取。在大多數內容發現網站上(如Prismatic)這是一個非常常見的需求,今天就是學習如何使用一個名為boilerpipe的Java庫來完成這個任務。
準備基本的Java知識是必需的,安裝最新的Java開發工具包(JDK ),可以是OpenJDK 7或Oracle JDK 7。
注冊一個OpenShift帳戶,它是完全免費的,可以分配給每個用戶1.5 GB的內存和3 GB的磁盤空間。
安裝RHC客戶端工具,需要有ruby 1.8.7或更新的版本,如果已經有ruby gem,輸入 sudo gem install rhc ,確保它是最新版本。要更新RHC的話,執行命令 sudo gem update rhc,如需其他協助安裝RHC命令行工具,請參閱該頁面: https://www.openshift.com/developers/rhc-client-tools-install
通過 rhc setup 命令設置您的OpenShift帳戶,此命令將幫助你創建一個命名空間,并上傳你的SSH keys到OpenShift服務器。
首先從創建示例應用程序開始,把該應用稱作 newsapp。
$ rhc create-app newsapp jbosseap
然后可以使用如下命令:
$ rhc create-app newsapp jbosseap -g medium
這樣會創建一個應用程序容器,設置好所有需要的SELinux政策和cgroup配置,OpenShift也將創建一個私人git倉庫并克隆到本地。最后,OpenShift會給外界提供一個DNS,該應用程序將在http://newsapp-{domain-name}.rhcloud.com/ 下可以訪問(將 domain-name 更換為自己的域名)。
第2步:添加Maven依賴在 pom.xml 文件里添加如下依賴:
de.l3s.boilerpipe boilerpipe 1.2.0 xerces xercesImpl 2.9.1 net.sourceforge.nekohtml nekohtml 1.9.13
同時也需要加一個新的庫:
boilerpipe-m2-repo http://boilerpipe.googlecode.com/svn/repo/ true false
通過更新 pom.xml 文件里的幾個特性將Maven項目更新到Java 7:
1.7 1.7
現在就可以更新Maven項目了(右鍵單擊>Maven>更新項目)。
第3步:啟用CDI使用CDI來進行依賴注入。CDI、上下文和依賴注入是一個Java EE 6規范,能夠使依賴注入在Java EE 6的項目中。
在 src/main/webapp/WEB-INF 文件夾下建一個名為beans.xml中一個新的XML文件。更換beans.xml中的以下內容:
第4步:創建Boilerpipe內容提取服務
現在創建一個Boilerpipe內容提取服務的服務類,這個類會用一個url,從這個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; Listimages = 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; } } }
上述代碼執行以下操作:
首先在給定的url中讀取文件
然后解析HTML文檔并返回TextDocument
接下來從文本文件中提取標題
最后從文本中提取內容,返回一個應用的值對象的新實例(value object)
第5步:啟用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{ }第6步:創建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); } }部署到OpenShift
最后,更改部署到OpenShift
$ git add . $ git commit -am "NewApp" $ git push
在代碼push和部署完成后,我們可以在 http://newsapp-{{domain-name}.rhcloud.com 查看正在運行的應用程序。我的示例應用程序展示如下。
今天就這些,歡迎反饋。
原文 Day 18: BoilerPipe--Article Extraction for Java Developers
翻譯整理 SegmentFault
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64013.html
摘要:是一個文章內容提取器,可以從任意資訊文章類的網頁中提取文章主體,并提取標題標簽摘要圖片視頻等信息,且支持中文網頁。 爬蟲抓取數據有兩個頭疼的點,寫過爬蟲的小伙伴們一定都深有體會: 網站的 防抓取 機制。你要盡可能將自己偽裝成一個人,騙過對方的服務器反爬驗證。 網站的 內容提取 。每個網站都需要你做不同的處理,而且網站一旦改版,你的代碼也得跟著更新。 第一點沒什么捷徑可走,套路見得多...
摘要:類似地,一天中的時間,比如,可以使用類表示。合并日期和時間這個復合類名叫,是和的合體。對于最常見的用例,日期和時間已經提供了大量預定義的。你甚至還可以創建這樣的,它使用的歷法系統,以相對于格林尼治時間的偏差方式表示日期時間。 一、LocalDate、LocalTime、Instant、Duration 以及 Period 1.使用 LocalDate 和 LocalTime 創建一個L...
摘要:自從年推出標準第版以來,正則表達式已成為語言的一部分。最后,如果在正則表達式中使用了命名捕獲組,則將它們放在屬性中。支持與相同語法的命名組已經模仿了的正則表達式語法。下面是一個例子此正則表達式在句子中查找連續的重復單詞。 翻譯:瘋狂的技術宅原文:https://www.smashingmagazine.... 本文首發微信公眾號:jingchengyideng歡迎關注,每天都給你推...
摘要:這個月的天數是否事閏年似地,一天中的時間,比如,可以使用類表示。使用靜態方法,你可以實現這一目的合并日期和時間這個復合類名叫,是和的合體。對于最常見的用例,日期和時間已經提供了大量預定義的。Java的API提供了很多有用的組件,能幫助你構建復雜的應用。不過,Java API也不總是完美的。我們相信大多數有經驗的程序員都會贊同Java 8之前的庫對日期和時間的支持就非常不理想。然而,你也不用太...
閱讀 1537·2023-04-25 18:56
閱讀 1484·2021-09-29 09:34
閱讀 1710·2021-09-22 15:51
閱讀 3483·2021-09-14 18:03
閱讀 1160·2021-07-23 17:54
閱讀 2018·2019-08-29 18:38
閱讀 2900·2019-08-29 12:38
閱讀 610·2019-08-26 13:41