使用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$/, '')
第一个剥离标签,第二个将重复的断行减少到一个,第三个删除字符串开头和结尾的换行符。
我正在使用sanitize
gem。
(" " + 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类。
如果你使用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
希望它能让某人的生活更轻松:-)