Количество слов с рубином - PullRequest
4 голосов
/ 25 октября 2010

Я пытаюсь найти способ подсчета слов в определенной строке, содержащей html.

Пример строки:

<p>Hello World</p>

Есть ли в Ruby способ подсчета слов между тегами p? Или какой-либо тег в этом отношении?

Примеры:

<p>Hello World</p>
<h2>Hello World</h2>
<li>Hello World</li>

Заранее спасибо!

Редактировать (вот мой рабочий код)

Контроллер:

class DashboardController < ApplicationController
  def index
    @pages = Page.find(:all)
    @word_count = []
  end

end

Вид:

<% @pages.each do |page| %>

        <%  page.current_state.elements.each do |el| %>
            <% @count = Hpricot(el.description).inner_text.split.uniq.size  %>
            <% @word_count << @count %>
        <% end %>

            <li><strong>Page Name: <%= page.slug %> (Word Count: <%= @word_count.inject(0){|sum,n| sum+n } %>)</strong></li>

<% end %>

Ответы [ 4 ]

6 голосов
/ 25 октября 2010

Вот как вы можете это сделать:

require 'hpricot'
content = "<p>Hello World...."
doc = Hpricot(content)
doc.inner_text.split.uniq

Даст вам:

[
  [0] "Hello",
  [1] "World"
]

(sidenote: вывод отформатирован с awesome_print , который я настоятельно рекомендую)

2 голосов
/ 25 октября 2010

Sure

  1. Используйте Nokogiri для анализа HTML / XML и XPath, чтобы найти элемент и его текстовое значение.
  2. Разделить пробел для подсчета слов
0 голосов
/ 25 октября 2010

Сначала начните с чего-то, способного анализировать HTML, например Hpricot , затем используйте простое регулярное выражение, чтобы делать то, что вы хотите (вы можете просто разделить пробелы, а затем считать, например)

0 голосов
/ 25 октября 2010

Вы захотите использовать что-то вроде Hpricot для удаления HTML, тогда это просто случай подсчета слов в простом тексте.

Вот пример разбора HTML: http://underpantsgnome.com/2007/01/20/hpricot-scrub/

...