使用Ruby将HTML转换为纯文本?

有没有什么可以将HTML转换为纯文本(也许是nokogiri脚本)? 可以保持换行的东西,但就是这样。

如果我在googledocs上写一些东西,像这样 ,并运行该命令,它输出(删除css和javascript),这:

\n\n\n\n\nh1. Test h2. HELLO THEREI am some teexton the next line!!!OKAY!#*!)$! 

所以格式化都搞砸了。 我相信有人已经在某处解决了这些细节。

实际上,这更简单:

 require 'rubygems' require 'nokogiri' puts Nokogiri::HTML(my_html).text 

但是你仍然有换行问题,所以你必须弄清楚你想如何自己处理这些问题。

你可以从这样的事情开始:

 require 'open-uri' require 'rubygems' require 'nokogiri' uri = 'http://stackoverflow.com/questions/2505104/html-to-plain-text-with-ruby' doc = Nokogiri::HTML(open(uri)) doc.css('script, link').each { |node| node.remove } puts doc.css('body').text.squeeze(" \n") 

只是剥离标签和多余的换行符可以接受吗?

 html.gsub(/<\/?[^>]*>/, '').gsub(/\n\n+/, "\n").gsub(/^\n|\n$/, '') 

第一个剥离标签,第二个将重复的断行减少到一个,第三个删除字符串开头和结尾的换行符。

我正在使用sanitizegem。

(" " + Sanitize.clean(html).gsub("\n", "\n\n").strip).gsub(/^ /, "\t")

它确实丢弃了超链接,这可能是某些应用程序的问题。 但是我正在进行NLP文本分析,所以这对我的需求来说是完美的。

 require 'open-uri' require 'nokogiri' url = 'http://en.wikipedia.org/wiki/Wolfram_language' doc = Nokogiri::HTML(open(url)) text = '' doc.css('p,h1').each do |e| text << e.content end puts text 

这只从网页中提取所需的文本(大部分时间)。 例如,如果您还想包含链接,则在块中添加a css类。

你想要hpricot_scrub:

http://github.com/UnderpantsGnome/hpricot_scrub

您可以指定要在配置哈希中删除/保留的标记。

如果你使用rails,你可以: html = '

hello world

Hola
que tal

' puts ActionView::Base.full_sanitizer.sanitize(html)

如果它在轨道上,你可以使用这个:

 html_escape_once(value).gsub("\n", "\r\n
").html_safe

在Matchu的答案上略微建立,这适用于我(非常相似)的要求:

 html.gsub(/<\/?[^>]*>/, ' ').gsub(/\n\n+/, '\n').gsub(/^\n|\n$/, ' ').squish 

希望它能让某人的生活更轻松:-)