开源的Java库,用于将HTML转换为文本

22

你能否推荐一个开源的Java库(最好是ASL/BSD/LGPL许可证),用于将HTML转换为纯文本 - 清除所有标签,转换实体(&、 等),并正确处理<br>和表格。

更多信息

我有HTML字符串,无需从网络获取。此外,我正在寻找类似于以下方法:

String convertHtmlToPlainText(String html)

2
此外,这里提到了[jsoup](http://jsoup.org/),它在[这里](https://dev59.com/bWHVa4cB1Zd3GeqPl1dW)被提到它是根据自由的[MIT许可证](http://jsoup.org/license)发行的。 - cubanacan
顺便说一下,jsoup支持HTML5。 - cubanacan
根据文档,它至少没有做我要求的事情(将页面转换为纯文本,而不是HTML操作)。 - David Rabinowitz
5
这里是 Jsoup.parse(html).text() - cubanacan
@cubanacan 谢谢,很高兴知道还有另一种选择。 - David Rabinowitz
Jsoup太棒了!如果你正在寻找一些“轻量级”的输出文本格式化(例如在<p>标签周围添加换行符等),那么Jsoup存储库中有一个示例,这是一个很好的起点:HtmlToPlainText.java - Till F.
5个回答

21

尝试使用Jericho

TextExtractor类看起来可以满足你的需求。很抱歉由于我是一个新用户,无法发布第二个链接,但在主页上向下滚动一点就能看到它的链接。


这是那个类的链接:http://jericho.htmlparser.net/docs/javadoc/net/htmlparser/jericho/TextExtractor.html - Chris R
5
谢谢!实际上我最后使用了渲染器。 - David Rabinowitz
2
懒人专用:String plainText = new Source(html).getRenderer().toString(); - Mike Gleason jr Couturier

3

HtmlUnit可以处理JavaScript/Ajax,并且在处理完后还可以展示网页。


我看到它以HTML形式给了我响应,而不是文本。 - David Rabinowitz
检查 .asText() [http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/html/DomNode.html#asText()] - Ahmed Ashour
谢谢。我最终选择了Jericho,但我会记住HtmlUnit的。 - David Rabinowitz

2
翻译: bliki 引擎可以通过两步骤来实现这一点。请参见 info.bliki.wiki/Home
  1. 如何将 HTML 转换为 Mediawiki 文本,Mediawiki 文本已经是一个相当纯文本格式,但您可以进一步转换它
  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();

但结果是您将失去所有段落格式 - 没有任何换行符。

0

我使用TagSoup,它适用于多种语言,并且对于在“野外”找到的HTML有很好的处理效果。它可以产生经过清理的HTML或XML版本,然后你可以使用一些DOM/SAX解析器进行处理。


感谢您,但我需要最终结果的纯文本。 - David Rabinowitz
一旦它转换为XML格式,你可以使用SAX解析器来输出只有文本节点的内容(例如,一个DefaultHandler类的所有方法都是空操作,除了characters方法)。 - Rich Seller

-1

我找不到任何htmlToText()方法 - 有一些转义HTML的方法,使得"<b>hello</b>"将被转换为"<b>hello</b>"而不是"hello" - David Rabinowitz
啊,是的,我没有看到你想要纯文本。这是真的。 - firefly2442

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接