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

时间:2010-03-24 03:14:25

标签: ruby

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

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

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

所以格式化全部搞砸了。我相信有人已经在那里解决了这些细节。

9 个答案:

答案 0 :(得分:55)

实际上,这更简单:

require 'rubygems'
require 'nokogiri'

puts Nokogiri::HTML(my_html).text

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

答案 1 :(得分:13)

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

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")

答案 2 :(得分:10)

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

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

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

答案 3 :(得分:4)

我正在使用sanitize宝石。

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

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

答案 4 :(得分:4)

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类。

答案 5 :(得分:2)

你想要hpricot_scrub:

http://github.com/UnderpantsGnome/hpricot_scrub

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

答案 6 :(得分:1)

如果您使用rails,您可以: html = '<div class="asd">hello world</div><p><span>Hola</span><br> que tal</p>' puts ActionView::Base.full_sanitizer.sanitize(html)

答案 7 :(得分:0)

如果它在轨道中,你可以使用它:

html_escape_once(value).gsub("\n", "\r\n<br/>").html_safe

答案 8 :(得分:0)

稍微根据Matchu的回答,这适用于我(非常相似)的要求:

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

希望它让某人的生活更容易: - )