Class: Morphy::Word

Inherits:
Object
  • Object
show all
Defined in:
lib/word.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(word, para_id, index) ⇒ Word

Returns a new instance of Word.



7
8
9
10
11
12
13
14
# File 'lib/word.rb', line 7

def initialize(word, para_id, index)
  @word = word
  @para_id = para_id.to_i
  @index = index.to_i
  @prefix_id = ::Morphy.paradigms[@para_id][@index * 3]
  @suffix_id = ::Morphy.paradigms[@para_id][@index * 3 + 1]
  @grammeme_id = ::Morphy.paradigms[@para_id][@index * 3 + 2]
end

Instance Attribute Details

#para_idObject

Returns the value of attribute para_id.



5
6
7
# File 'lib/word.rb', line 5

def para_id
  @para_id
end

Instance Method Details

#grammemesObject



26
27
28
# File 'lib/word.rb', line 26

def grammemes
  ::Morphy.grammemes[@grammeme_id]
end

#inflect(grammemes) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/word.rb', line 54

def inflect(grammemes)
  words = lexemme
  words.each do |word|
    return word if (word.grammemes & grammemes).length == grammemes.length
  end
  nil
end

#inspectObject



62
63
64
# File 'lib/word.rb', line 62

def inspect
  @word
end

#lexemmeObject



45
46
47
48
49
50
51
52
# File 'lib/word.rb', line 45

def lexemme
  (0..(::Morphy.paradigms[@para_id].length / 3) - 1).map do |index|
    prefix = ::Morphy.prefixes[::Morphy.paradigms[@para_id][index * 3]]
    suffix = ::Morphy.suffixes[::Morphy.paradigms[@para_id][index * 3 + 1]]
    grammeme = ::Morphy.grammemes[::Morphy.paradigms[@para_id][index * 3 + 2]]
    Word.new(prefix + stem + suffix, @para_id, index)
  end
end

#normal_formObject



20
21
22
23
24
# File 'lib/word.rb', line 20

def normal_form
  prefix = ::Morphy.prefixes[::Morphy.paradigms[@para_id][0]]
  suffix = ::Morphy.suffixes[::Morphy.paradigms[@para_id][1]]
  "#{prefix}#{stem}#{suffix}"
end

#same_paradigm?(other) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/word.rb', line 37

def same_paradigm?(other)
  @para_id == other.para_id
end

#stemObject



30
31
32
33
34
35
# File 'lib/word.rb', line 30

def stem
  word = @word.dup
  word.sub!(::Morphy.prefixes[@prefix_id], '')
  word = word.reverse.sub(::Morphy.suffixes[@suffix_id].reverse, '').reverse
  word
end

#tagObject



41
42
43
# File 'lib/word.rb', line 41

def tag
  ::Morphy.grammemes[@grammeme_id].join(',')
end

#to_sObject



16
17
18
# File 'lib/word.rb', line 16

def to_s
  @word
end