计算字符串中的单词

时间:2013-10-20 19:04:57

标签: ruby-on-rails word-count

下午全部,

我有一个名为content的字段,它是Snippet的字符串。 Snippet是Book的孩子。我希望获得每个片段中所有内容的总字数,以便定义总字数,然后我可以将其限制为验证。

任何人都有任何想法如何做到这一点,或者给我一个内网上其他地方所需代码的例子。

快速扩展到此。我需要为书中当前存储为[0,1,2]的书中的每个尺寸定义不同的字数:书模型中的尺寸。我该怎么做?

2 个答案:

答案 0 :(得分:2)

我对你的问题的第一部分并不完全明白你的意思,但如果你想在Ruby的字符串中找到单词count,你可以这样做:

str.scan(/\w+/).size

答案 1 :(得分:0)

您可以使用'each - do'迭代书中的所有片段:

class Book < ActiveRecord::Base
  has_many :snippets

  ...

  def get_word_count
    @word_count = 0
    self.snippets.each.do |c|
      @word_count += c.content.scan(/\w+/).size
    end
  end
end

class Snippets < ActiveRecord::Base
  belongs_to :book
  ...
end

扩展问题的UPD

您可以通过word_counts数组设置不同的word_count函数,然后使用:size索引'em'

def get_word_count
  #special word_counts for different sizes
  wc_func = [];
  wc_func[0] = { |cont| cont.length } # for size 0
  wc_func[1] = { |cont| cont.scan(/\w+/).size } # for size 1

  #word count
  @word_count = 0
  self.snippets.each.do |c|
    @word_count += wc_func[@size][c.content]
  end
end

或贯穿案件:

def get_word_count
  case @size
  when 0
    wc_func = { |cont| cont.length } # for size 0
  when 1
    wc_func = { |cont| cont.scan(/\w+/).size } # for size 1
  else
    wc_func = { |cont| cont.length/2 + 5 } # for other sizes
  end

  #word count
  @word_count = 0
  self.snippets.each.do |c|
    @word_count += wc_func[c.content]
  end
end