2009-10-05 19 views
17

你可以推薦轉換HTML到文本一個開源的Java庫(最好是ASL/BSD/LGPL許可證) - 清除所有的標籤,轉換實體(&, ,等等)並正確處理<br>和表格。開源Java庫,用於HTML文本轉換

更多信息

我有HTML作爲字符串,也沒有必要從網上獲取它。另外,我在尋找什麼是像這樣的方法:

String convertHtmlToPlainText(String html) 
+1

另外[jsoup](http://jsoup.org/)被提及[這裏](http://stackoverflow.com/questions/9631477/retrieve-text-from-html-file-in-java),這是根據自由[MIT許可證](http://jsoup.org/license)分發的。 – cubanacan 2013-10-09 15:32:25

+0

順便說一下,jsoup支持HTML5 – cubanacan 2013-10-09 15:44:58

+0

至少根據文檔它不會做我所問(將頁面轉換爲純文本,而不是HTML操作) – 2013-10-10 07:00:17

回答

17

嘗試Jericho

TextExtractor類聽起來像它會做你想做的。對不起,不能發佈第二個鏈接,因爲我是新用戶,但向下滾動主頁並且有鏈接。

+0

這裏是該類的鏈接:http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/TextExtractor.html – 2009-10-05 12:15:04

+5

謝謝!我實際上在末尾使用了渲染器 – 2009-10-05 13:40:37

+0

對於lazy:'String plainText = new Source(html).getRenderer()。toString();' – 2018-01-03 15:24:46

3

HtmlUnit,它甚至可以顯示處理的JavaScript/AJAX後的頁面。

+0

我看它是如何讓我的響應爲HTML,而不是文本 – 2009-10-05 08:07:47

+0

檢查.asText()[http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/ htmlunit/html/DomNode.html#asText()] – 2009-10-05 08:16:51

+0

謝謝。我在最後去了Jericho,但是我會記住HtmlUnit – 2009-10-05 19:13:31

0

我使用TagSoup,它可用於多種語言,並在HTML中發現「非常好」。它生成HTML或XML的清理版本,然後您可以使用某些DOM/SAX解析器進行處理。

+0

謝謝,但我需要純文本的最終結果 – 2009-10-05 08:08:29

+0

一旦它在XML中,您就可以實現一個SAX解析器來僅輸出文本節點(例如,一個DefaultHandler除了'characters'外沒有其他所有方法的實現) – 2009-10-05 08:38:30

-1

我用Apache Commons Lang去換個方法。但它看起來像它可以通過StringEscapeUtils做你需要的。

+0

我找不到任何htmlToText()方法 - HTML方法使「你好」將被轉換爲「<b>你好</b >」而不是「你好」 – 2013-02-27 07:10:21

+0

啊,是的,我沒有看到你想要純文本。這是真的。 – firefly2442 2013-02-27 19:24:48

1

bliki引擎可以做到這一點,在兩個步驟。見info.bliki.wiki/Home

  1. 如何將HTML轉換到MediaWiki文本 - nediawiki文本已經是一個相當純文本格式,但你可以把它轉換進一步
  2. 如何到MediaWiki文本轉換爲純文本 - 你的目標。

這將是一些代碼行7-8,這樣的:

// html to wiki 
import info.bliki.html.HTML2WikiConverter; 
import info.bliki.html.wikipedia.ToWikipedia; 
// wiki to plain text 
import info.bliki.wiki.filter.PlainTextConverter; 
import info.bliki.wiki.model.WikiModel; 
... 
String sbodyhtml = readFile(infilepath); //get content as string 
    HTML2WikiConverter conv = new HTML2WikiConverter(); 
    conv.setInputHTML(sbodyhtml); 
String resultwiki = conv.toWiki(new ToWikipedia()); 
    WikiModel wikiModel = new WikiModel("${image}", "${title}"); 
String plainStr = wikiModel.render(new PlainTextConverter(false), resultwiki); 
System.out.println(plainStr); 

Jsoup可以做到這一點簡單:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
... 
Document doc = Jsoup.parse(sbodyhtml); 
String plainStr = doc.body().text(); 

但結果你失去所有段落格式 - - 不會有任何換行符。