class Lingo::Language::Dictionary

Public Class Methods

new(config, lingo) click to toggle source
# File lib/lingo/language/dictionary.rb, line 41
def initialize(config, lingo)
  unless config.has_key?('source')
    raise ArgumentError, 'Required parameter `source\ missing.'
  end

  init_cachable
  init_reportable

  @suffixes, @infixes = [], []

  Array(lingo.dictionary_config['suffix']).each { |t, s|
    t.downcase!

    a = t == 'f' ? @infixes : @suffixes

    s.split.each { |r|
      f, e = r.split('/')
      a << [%r#{f}$/, e || '*', t]
    }
  }

  @src = config['source'].map { |src| lingo.lexical_hash(src) }
  @all = config['mode'].nil? || config['mode'].downcase == 'all'

  lingo.dictionaries << self
end
open(*args) { |dictionary = new(*args)| ... } click to toggle source
# File lib/lingo/language/dictionary.rb, line 35
def self.open(*args)
  yield dictionary = new(*args)
ensure
  dictionary.close if dictionary
end

Public Instance Methods

close() click to toggle source
# File lib/lingo/language/dictionary.rb, line 68
def close
  @src.each(&:close)
end
find_synonyms(obj) click to toggle source
# File lib/lingo/language/dictionary.rb, line 95
def find_synonyms(obj)
  lex = obj.lexicals
  lex = [obj] if lex.empty? && obj.unknown?

  # multiworder optimization

  ref = %r{\A#{Database::KEY_REF_ESC}\d+}

  lex.each_with_object([]) { |l, s|
    next if l.attr == LA_SYNONYM
    next if l.attr != LA_COMPOUND && obj.attr == WA_COMPOUND

    select(l.form).each { |y| s << y unless y =~ ref }
  }
end
find_word(str) click to toggle source

dic.#find_word( aString ) -> aNewWord

Erstellt aus dem String ein Wort und sucht nach diesem im Wörterbuch.

# File lib/lingo/language/dictionary.rb, line 79
def find_word(str)
  if hit?(key = str.downcase)
    inc('cache hits')
    return retrieve(key).tap { |word| word.form = str }
  end

  word = Word.new(str, WA_UNKNOWN)

  unless (lexicals = select_with_suffix(str)).empty?
    word.lexicals = lexicals
    word.attr = WA_IDENTIFIED
  end

  store(key, word)
end
infix_lexicals(str) click to toggle source

dic.gap_lexicals( aString ) -> ArrayOfLexicals

Gibt alle möglichen Lexicals zurück, die von der Endung her auf den String anwendbar sind:

# File lib/lingo/language/dictionary.rb, line 149
def infix_lexicals(str)
  affix_lexicals(:infix, str)
end
report() click to toggle source
# File lib/lingo/language/dictionary.rb, line 72
def report
  super.tap { |rep| @src.each { |src| rep.update(src.report) } }
end
select(str) click to toggle source

dic.select( aString ) -> ArrayOfLexicals

Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+)

# File lib/lingo/language/dictionary.rb, line 113
def select(str)
  @src.each_with_object([]) { |src, lex|
    l = src[str] or next
    lex.concat(l)
    break lex unless @all
  }.tap { |lex| lex.sort!; lex.uniq! }
end
select_with_infix(str) click to toggle source

dic.#select_with_infix( aString ) -> ArrayOfLexicals

Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+). Sucht dabei auch Wörter, die eine Fugung am Ende haben.

# File lib/lingo/language/dictionary.rb, line 133
def select_with_infix(str)
  select_with_affix(:infix, str)
end
select_with_suffix(str) click to toggle source

dic.#select_with_suffix( aString ) -> ArrayOfLexicals

Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+). Sucht dabei auch Wörter, die um wortklassenspezifische Suffixe bereinigt wurden.

# File lib/lingo/language/dictionary.rb, line 125
def select_with_suffix(str)
  select_with_affix(:suffix, str)
end
suffix_lexicals(str) click to toggle source

dic.#suffix_lexicals( aString ) -> ArrayOfLexicals

Gibt alle möglichen Lexicals zurück, die von der Endung her auf den String anwendbar sind:

dic.suffix_lexicals(“Hasens”) -> [(hasen/s), (hasen/e), (has/e)]

# File lib/lingo/language/dictionary.rb, line 142
def suffix_lexicals(str)
  affix_lexicals(:suffix, str)
end

Private Instance Methods

affix_lexicals(affix, str) click to toggle source
# File lib/lingo/language/dictionary.rb, line 165
def affix_lexicals(affix, str)
  instance_variable_get("@#{affix}es").each_with_object([]) { |(r, e, t), l|
    l << Lexical.new("#{$`}#{e == '*' ? '' : e}#{$'}", t) if str =~ r
  }
end
select_with_affix(affix, str) click to toggle source
# File lib/lingo/language/dictionary.rb, line 155
def select_with_affix(affix, str)
  select(str).tap { |l|
    if l.empty?
      affix_lexicals(affix, str).each { |a| select(a.form).each { |b|
        l << b if affix != :suffix || a.attr == b.attr
      } }
    end
  }
end