class Lingo::Language::Word

Die Klasse Word bündelt spezifische Eigenschaften eines Wortes mit den dazu notwendigen Methoden.

Public Class Methods

new(form, attr = WA_UNSET) click to toggle source

Exakte Representation der originären Zeichenkette, so wie sie im Satz gefunden wurde, z.B. form = "RubyLing"

Ergebnis der Wörterbuch-Suche. Sie stellt die Grundform des Wortes dar. Dabei kann es mehrere mögliche Grundformen geben, z.B. kann abgeschoben als Grundform das Adjektiv abgeschoben sein, oder aber das Verb abschieben.

lemma = [['abgeschoben', '#a'], ['abschieben', '#v']].

Achtung: Lemma wird nicht durch die Word-Klasse bestückt, sondern extern durch die Klasse Dictionary

# File lib/lingo/language/word.rb, line 60
def initialize(form, attr = WA_UNSET)
  super
  @lexicals = []
end
new_lexical(form, attr, lex_attr) click to toggle source
# File lib/lingo/language/word.rb, line 41
def new_lexical(form, attr, lex_attr)
  new_lexicals(form, attr, Lexical.new(form, lex_attr))
end
new_lexicals(form, attr, lex) click to toggle source
# File lib/lingo/language/word.rb, line 37
def new_lexicals(form, attr, lex)
  new(form, attr) << lex
end

Public Instance Methods

<<(*other) click to toggle source
# File lib/lingo/language/word.rb, line 126
def <<(*other)
  lexicals.concat(other.tap(&:flatten!))
  self
end
<=>(other) click to toggle source
# File lib/lingo/language/word.rb, line 131
def <=>(other)
  other.nil? ? 1 : to_a.push(lexicals) <=> other.to_a.push(other.lexicals)
end
add_lexicals(lex) click to toggle source
# File lib/lingo/language/word.rb, line 81
def add_lexicals(lex)
  @lexicals.concat(lex)

  @lexicals.sort!
  @lexicals.uniq!

  self
end
attrs(compound_parts = true) click to toggle source
# File lib/lingo/language/word.rb, line 90
def attrs(compound_parts = true)
  lexicals(compound_parts).map(&:attr)
end
compo_form() click to toggle source
# File lib/lingo/language/word.rb, line 118
def compo_form
  get_class(LA_COMPOUND).first if attr == WA_COMPOUND
end
full_compound?() click to toggle source
# File lib/lingo/language/word.rb, line 122
def full_compound?
  attr == WA_COMPOUND && get_class('x+').empty?
end
get_class(wc_re) click to toggle source

Gibt genau die Grundform der Wortklasse zurück, die der RegExp des Übergabe-Parameters entspricht, z.B. word.get_wc(/a/) = ['abgeschoben', '#a']

# File lib/lingo/language/word.rb, line 104
def get_class(wc_re)
  wc_re = Regexp.new(wc_re) unless wc_re.is_a?(Regexp)

  unless lexicals.empty?
    lexicals.select { |lex| lex.attr =~ wc_re }
  else
    attr =~ wc_re ? [self] : []
  end
end
lexicals(compound_parts = true) click to toggle source
# File lib/lingo/language/word.rb, line 65
def lexicals(compound_parts = true)
  if !compound_parts && attr == WA_COMPOUND
    @lexicals.select { |lex| lex.attr == LA_COMPOUND }
  else
    @lexicals
  end
end
lexicals=(lex) click to toggle source
# File lib/lingo/language/word.rb, line 73
def lexicals=(lex)
  if lex.is_a?(Array)
    @lexicals = lex.sort.uniq
  else
    raise TypeError, "wrong argument type #{lex.class} (expected Array)"
  end
end
min_part_size() click to toggle source
# File lib/lingo/language/word.rb, line 98
def min_part_size
  form.length
end
norm() click to toggle source
# File lib/lingo/language/word.rb, line 114
def norm
  identified? ? lexicals.first.form : form
end
parts() click to toggle source
# File lib/lingo/language/word.rb, line 94
def parts
  1
end
to_s() click to toggle source
# File lib/lingo/language/word.rb, line 135
def to_s
  s =  "<#{form}"
  s << "|#{attr}" unless identified?
  s << " = #{lexicals.inspect}" unless lexicals.empty?
  s << '>'
end