Sha256: 494f17383590e8392f79c7e8e0a4e7eccd9fdfbd448bc2eded2dea151b6306ca

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

class Rule
  attr_accessor :pattern, :suffix, :rule_num

  def initialize(pattern, suffix, rule_num)
    @pattern = pattern
    @suffix = suffix
    @rule_num = rule_num
  end

  def suffix_size
    @suffix.size
  end

  def handle(word)
    [word.remove_suffix(@suffix_size), @rule_num] if word =~ @pattern
  end
end

class EndingRule < Rule
  def handle(word)
    [word.remove_suffix(@suffix_size), @rule_num] if word.ends_with?(@pattern)
  end
end

class ConcatenatingEndingRule < EndingRule
  attr_accessor :new_suffix

  def initialize(pattern, suffix_size, rule_num, new_suffix)
    super(pattern, suffix_size, rule_num)
    @new_suffix = new_suffix
  end

  def handle(word)
    [word.remove_suffix(@suffix_size) + @new_suffix, @rule_num] if word.ends_with?(@pattern)
  end
end

class CustomRule < Rule
  def initialize(pattern, suffix_size, rule_num)
    super(pattern, suffix_size, rule_num)
  end

  def handle(word)
    [stem_with_duplicate_character_check(word, @suffix_size), @rule_num] if word =~ @pattern
  end

  protected

  def stem_with_duplicate_character_check(word, suffix_size)
    new_suffix_size = word.ends_with?('s') ? suffix_size + 1 : suffix_size
    stemmed_word = word.remove_suffix(new_suffix_size)
    stemmed_word.chop! if stemmed_word =~ /.*(\w)\1$/
    stemmed_word
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ealdent-uea-stemmer-0.9.0 lib/rule.rb