Parsing syllables from a string This method takes a string and parses the syllables. I've broken much of the logic into helper methods. Without getting into the helper methods, it's pretty easy to tell what this is doing. But there are a lot of conditionals. I tried handling the conditions that handle adding to the syllables variable and those that subtract as two separate methods, but syllables kept changing value out from under me.

def count_syllables
  exceptions = YAML::load_file(File.join(__dir__, 'exceptions.yml'))['exceptions']
  return exceptions[word.to_s] if exceptions.keys.include?(word)
  syllables = count_vowels
  syllables += count_ys_in_vowel_role if contains_non_initial_y?
  syllables += 1 if contains_le_vowel_sound?
  syllables += 1 if begins_with_re_vowel? 
  syllables += 1 if ends_in_sm?
  syllables -= 1 if ends_in_silent_e?
  syllables -= count_diphthongs if contains_diphthongs?
  syllables &lt;= 1 ? 1 : syllables
end
Some notes:


YAML::load_file. Loading a file each time a method is called is dubious. I'd load it in the initialize of the class so it's only done once.
return exceptions[word.to_s] if exceptions.keys.include?(word) Inline conditionals are ok as guards (in a fact here it's kind of a guard), but as a general rule indented conditionals are more declarative (granted, at the cost of an indentation level and some lines).
+=, -=. Imperative programming. As always, I'd advise against in-place updates, try to avoid statements in favor of expressions (functional programming).


I'd write:

def count_syllables
  if @exceptions.has_key?(word)
    @exceptions[word]
  else
    counts = [
      count_vowels,
      (count_ys_in_vowel_role if contains_non_initial_y?)
      (+1 if contains_le_vowel_sound?),
      (+1 if begins_with_re_vowel?) 
      (+1 if ends_in_sm?),
      (-1 if ends_in_silent_e?),
      (-count_diphthongs if contains_diphthongs?),
    ]
    [counts.compact.reduce(0, :+), 1].max
  end
end