HTML в обычный текст с Ruby? - PullRequest
21 голосов
/ 24 марта 2010

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

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

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

Так что форматирование все испортило.Я уверен, что кто-то где-то там решил такие детали.

Ответы [ 9 ]

55 голосов
/ 24 марта 2010

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

require 'rubygems'
require 'nokogiri'

puts Nokogiri::HTML(my_html).text

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

13 голосов
/ 24 марта 2010

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

require 'open-uri'
require 'rubygems'
require 'nokogiri'

uri = '/1453286/html-v-obychnyi-tekst-s-ruby'
doc = Nokogiri::HTML(open(uri))
doc.css('script, link').each { |node| node.remove }
puts doc.css('body').text.squeeze(" \n")
10 голосов
/ 24 марта 2010

Допустимы ли просто удаление тегов и лишние разрывы строк?

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

Первые удаляют теги, вторые переводят повторяющиеся разрывы строк в единицу, третьи удаляют разрывы строк в начале и конце строки.

4 голосов
/ 26 февраля 2014
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 в блоке.

4 голосов
/ 24 октября 2013

Я использую драгоценный камень sanitize.

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

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

2 голосов
/ 24 марта 2010

Вы хотите hpricot_scrub:

http://github.com/UnderpantsGnome/hpricot_scrub

Вы можете указать, какие теги удалить / сохранить в хэше конфигурации.

1 голос
/ 03 июня 2017

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

0 голосов
/ 08 января 2016

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

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

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

0 голосов
/ 14 августа 2015

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

html_escape_once(value).gsub("\n", "\r\n<br/>").html_safe
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...