我有一个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个单词,并且是英文(或伪英语有时称为“business-ese”)。您也可以将任何您想要的内容归类为“单词”,只要您的分类对于典型用户来说是显而易见的。 (注意:这不是讨论“典型用户”是什么的地方:))
答案 0 :(得分:7)
在使用带有:tokenizer
方法的lambda
的Rails3中也可以。
validates_length_of :essay, :minimum => 100, :too_short => "Your essay must be at least 100 words."), :tokenizer => lambda {|str| str.scan(/\w+/) }
它可能不是最快的,但肯定是最干净的方式。
答案 1 :(得分:2)
你不会比线性搜索更快,抱歉(除非这是用于某种文本编辑器,你可以逐步跟踪)
答案 2 :(得分:1)
您可以估算单词的典型大小,并通过除法来猜测单词的数量。
这里有一些提示:http://blogamundo.net/lab/wordlengths/
您可以尝试使用5.1,并通过运行一些测试来了解您的准确程度。
因为你有空格,所以很可能除以6.1。
请记住,您会假设您的文字不仅仅是大量的空白或其他内容。 好吧,但如果你真的只是有兴趣确保它不超过x字。你可以在x上尝试一个低数字5,如果它少于x乘以5个字符,你就可以确定它没有超过x个单词。
所以你可能会更好地做其他答案中所述的线性搜索。线性搜索根本就不好。这取决于你想做什么。
答案 3 :(得分:1)
我会使用类似的东西:
string.split(" ").length <= 500
您看到了哪些性能问题? 一个字符串500左右的单词不应该是一个大问题。
答案 4 :(得分:1)
有一个插件,我自己没有使用过它:)
http://code.google.com/p/validates-word-count/
That plugin将所有相邻的“单词字符”切换为单个字符,然后删除所有非单词字符并对其进行计数。不确定它是否是最快的。
答案 5 :(得分:-1)
这是一篇你可能喜欢的好文章