0

我有一个 Ruby-on-Rails 模型:

class Candidate < ActiveRecord::Base
  validates_presence_of :application_essay
  validate :validate_length_of_application_essay

  protected

  def validate_length_of_application_essay
    return if application_essay.blank? # don't add a second error message if they didn't fill it out
    errors.add(:application_essay, :too_long), unless ...
  end
end

在不进入 C 的情况下,检查application_essay包含不超过 500 个单词的最快方法是什么?您可以假设大多数论文至少 200 字,不太可能超过 5000 字,并且是英文的(或有时称为“商务英语”的伪英语)。只要您的分类对典型用户来说是显而易见的,您还可以将任何您想要的内容分类为“单词”。(注意:这里不是讨论什么是“典型用户”的地方:))

4

6 回答 6

7

在 Rails3 中使用:tokenizerwithlambda方法也可以。

validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least 100 words."), :tokenizer => lambda {|str| str.scan(/\w+/) }

它可能不是最快的,但肯定是最干净的方式。

于 2010-12-29T21:03:01.230 回答
2

抱歉,您不会比线性搜索更快(除非这是针对某种文本编辑器,并且您可以逐步跟踪)

于 2010-05-04T01:46:45.370 回答
1

您可以估计一个单词的典型大小并通过除法来猜测单词的数量。

这里有一些提示:http: //blogamundo.net/lab/wordlengths/

您可以尝试 5.1,通过运行一些测试来查看您的准确度。

很可能除以 6.1,因为你有空格。

请记住,您会假设您的文本不仅仅是大量的空格或其他东西。好吧,但是如果您真的只是有兴趣确保它不超过 x 个单词。您可以在 x 上尝试一个较小的数字,也许是 5,如果它的字符数少于 x 乘以 5,您可以很确定它没有超过 x 个单词。

因此,您最好按照其他答案中的说明进行线性搜索。线性搜索一点也不差。这仅取决于您想做什么。

于 2010-05-04T01:48:39.370 回答
1

我会使用类似的东西:

string.split(" ").length <= 500

您看到什么性能问题?一个 500 字左右的字符串应该不是什么大问题。

于 2010-05-04T04:28:13.507 回答
1

有一个插件,我自己没用过:)

http://code.google.com/p/validates-word-count/

该插件将所有相邻的“单词字符”转换为单个字符,然后删除所有非单词字符并计算它们。不确定它是否是最快的。

于 2010-05-04T10:15:24.057 回答
-1

这是一篇你可能会喜欢的好文章

http://dotnetperls.com/word-count

于 2010-05-04T01:50:50.923 回答