代码之家  ›  专栏  ›  技术社区  ›  James A. Rosen

验证字段不超过n个单词的最快方法是什么?

  •  0
  • James A. Rosen  · 技术社区  · 16 年前

    我有一个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个单词,而且是英文的(或者有时被称为“商务英语”)。你也可以将你想要的任何东西分类为“单词”,只要你的分类对于一个典型的用户来说是显而易见的(注意:这里不是讨论什么是“典型用户”的地方:)

    6 回复  |  直到 16 年前
        1
  •  1
  •   Toby Hede    16 年前

    我只想用这样的方法:

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

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

        2
  •  7
  •   berkes    15 年前

    在Rails3中使用 :tokenizer lambda

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

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

        3
  •  2
  •   BlueRaja - Danny Pflughoeft    16 年前

    抱歉,你不会比线性搜索更快(除非这是某种文本编辑器,你可以增量跟踪)

        4
  •  1
  •   HansDampf    16 年前

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

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

    你可以试着像5.1一样,通过运行一些测试来看看你有多准确。

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

    请记住,您可能会假设您的文本不仅仅是大量的空白或其他内容。 好吧,但如果你真的有兴趣,以确保它不超过x字。你可以尝试在x或者5上使用一个小的数字,如果它少于x乘以5个字符,你可以非常确定它没有超过x的单词。

        5
  •  1
  •   gaqzi    16 年前

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

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

    That plugin 将所有相邻的“单词字符”切换为单个字符,然后删除所有非单词字符并对其进行计数。不知道是不是最快的。

        6
  •  -1
  •   anijhaw    16 年前

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

    http://dotnetperls.com/word-count