Подтвердить что ты не робот

HTML для простого текста с Ruby?

Есть ли что-нибудь, чтобы преобразовать html в обычный текст (возможно, nokogiri script)? Что-то, что удержит разрыв строки, но об этом.

Если я напишу что-то в googledocs, например this, и запустим эту команду, он выведет (удаление css и javascript), это:

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

Итак, форматирование все испортилось. Я уверен, что кто-то решил детали, подобные этим где-то там.

4b9b3361

Ответ 1

На самом деле это намного проще:

require 'rubygems'
require 'nokogiri'

puts Nokogiri::HTML(my_html).text

У вас все еще есть проблемы с разрывом строк, поэтому вам нужно будет выяснить, как вы хотите справиться с ними самостоятельно.

Ответ 2

Вы можете начать с чего-то вроде этого:

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

Ответ 3

Является ли просто зачищающими тегами и допустимыми допустимые перерывы?

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

Первые метки полос, второй - разрывы дубликатов строк до одного, третий удаляет разрывы строк в начале и конце строки.

Ответ 4

Я использую камень для sanitize.

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

Однако он отбрасывает гиперссылки, что может быть проблемой для некоторых приложений. Но я занимаюсь анализом текста НЛП, так что это идеально подходит для моих нужд.

Ответ 5

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 в блоке.

Ответ 7

Если вы используете рельсы, вы можете: html = '<div class="asd">hello world</div><p><span>Hola</span><br> que tal</p>' puts ActionView::Base.full_sanitizer.sanitize(html)

Ответ 8

если это в рельсах, вы можете использовать это:

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

Ответ 9

Строя немного на ответе Matchu, это сработало для моих (очень похожих) требований:

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

Надеюсь, что это немного облегчит жизнь: -)