class Rundown::Processors::ReadingGrade

Public Class Methods

known_words() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 16
def self.known_words
  @known_words ||= File.readlines(File.expand_path('../../../../data/known_words.txt', __FILE__)).map(&:chomp)
end

Public Instance Methods

average_sentence_length() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 32
def average_sentence_length
  sen = sentences.map {|s| words_for(s).length }
  sen.reduce(:+).to_f / sen.size
end
difficult_words() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 8
def difficult_words
  @difficult_words ||= (words_without_nouns.uniq.map(&:downcase) - known_words.map(&:downcase)).reject {|w| w.length < 5 }
end
grade() click to toggle source

4.9 and Below Grade 4 and Below 5.0 to 5.9 Grades 5 - 6 6.0 to 6.9 Grades 7 - 8 7.0 to 7.9 Grades 9 - 10 8.0 to 8.9 Grades 11 - 12 9.0 to 9.9 Grades 13 - 15 (College) 10 and Above Grades 16 and Above (College Graduate)

# File lib/rundown/processors/reading_grade.rb, line 50
def grade
  @grades ||= case score
    when 10.0..100.0
      16
    when 9.0..10.0
      13
    when 8.5..9.0
      12
    when 8.0..8.5
      11
    when 7.5..8.0
      10
    when 7.0..7.5
      9
    when 6.5..7.0
      8
    when 6.0..6.5
      7
    when 5.5..6.0
      6
    when 5.0..5.5
      5
    else
      4
  end
end
known_words() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 12
def known_words
  self.class.known_words
end
percent_difficult_words() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 4
def percent_difficult_words
  (difficult_words.length.to_f / words.length.to_f) * 100
end
process() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 77
def process
  grade
end
score() click to toggle source

en.wikipedia.org/wiki/Dale%E2%80%93Chall_readability_formula

# File lib/rundown/processors/reading_grade.rb, line 38
def score
  raw_score = (0.1579 * (percent_difficult_words)) + (0.0496 * average_sentence_length)
  percent_difficult_words > 5.0 ? raw_score + 3.6365 : raw_score
end
words() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 20
def words
  text.split(/[^a-zA-Z']+/)
end
words_for(sentence) click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 28
def words_for(sentence)
  sentence.split(/[^a-zA-Z']+/)
end
words_without_nouns() click to toggle source
# File lib/rundown/processors/reading_grade.rb, line 24
def words_without_nouns
  words.reject { |w| w[0].upcase == w[0] }
end