Class: Lingo::Attendee::Variator

Inherits:
Lingo::Attendee show all
Defined in:
lib/lingo/attendee/variator.rb

Overview

– Der Variator ermöglicht bei nicht erkannten Wörtern den listenbasierten Austausch einzelner Wortteile einchließlich erneuter Wörterbuchsuche zur Verbesserung der Worterkennungsquote.

Ursprünglich wurde der Variator entwickelt, um die mangelnde Qualität bei der OCR-Erkennung altdeutscher 's'-Konsonanten zu optimieren. Er kann ebenso bei alternativen Umlautschreibweisen z.B. zur Wandlung von 'Koeln' in 'Köln' dienen.

Mögliche Verlinkung

Erwartet

Daten vom Typ Word (andere werden einfach durchgereicht) z.B. von Wordsearcher

Erzeugt

Daten vom Typ Word zur Weiterleitung z.B. an Synonymer, Decomposer, Multiworder, Sequencer, Noneword_filter oder Vector_filter

Parameter

Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.

in

siehe allgemeine Beschreibung des Attendee

out

siehe allgemeine Beschreibung des Attendee

source

siehe allgemeine Beschreibung des Dictionary

mode

(Standard: all) siehe allgemeine Beschreibung des Dictionary

^check

(Standard: WA_UNKNOWN) Gebrenzt die zu variierenden Worttypen

marker

(Standard: '*') Kennzeichnung durch Variation erkannter Wörter

max-var

(Standard: '10000') Begrenzung der maximal zu prüfenden Permutationen bei der vollständigen Kombination aller auf ein Wort anzuwendenen aufgelisteten Wortteile.

Beispiele

Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration t1.cfg

meeting:
  attendees:
    - text_reader:   { out: lines, files: '$(files)' }
    - tokenizer:     { in: lines, out: token }
    - word_searcher: { in: abbrev, out: words, source: 'sys-dic' }
    - variator:      { in: words, out: varios, source: 'sys-dic' }
    - debugger:      { in: varios, prompt: 'out>' }

ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt

out> *FILE('test.txt')
out> <*Dies = [(dies/w)]>
out> <*ist = [(ist/t)]>
out> <ein = [(ein/t)]>
out> <*Tisch = [(tisch/s)]>
out> :./PUNC:
out> *EOL('test.txt')
out> *EOF('test.txt')

++

Constant Summary

Constant Summary

Constants inherited from Lingo::Attendee

DEFAULT_SKIP, Multi_worder, Multiworder, Noneword_filter, Nonewordfilter, Object_filter, Objectfilter, Text_reader, Text_writer, Textreader, Textwriter, Vector_filter, Vectorfilter, Word_searcher, Wordsearcher

Constants included from Language

Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_OTHER, Language::TA_PUNCTUATION, Language::TA_WORD, Language::WA_COMPOUND, Language::WA_IDENTIFIED, Language::WA_MULTIWORD, Language::WA_SEQUENCE, Language::WA_UNKMULPART, Language::WA_UNKNOWN, Language::WA_UNSET

Instance Attribute Summary

Attributes inherited from Lingo::Attendee

#lingo, #subscribers

Instance Method Summary collapse

Methods inherited from Lingo::Attendee

#command, #forward, #initialize

Constructor Details

This class inherits a constructor from Lingo::Attendee

Instance Method Details

#controlObject



92
93
# File 'lib/lingo/attendee/variator.rb', line 92

def control(*)
end

#initObject

Raises:



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/lingo/attendee/variator.rb', line 77

def init
  @marker = get_key('marker', '*')
  @max    = get_key('max-var', max = 10000).to_i
  @max    = max unless @max > 0
  @var    = get_key('variations')

  raise MissingConfigError.new(:variations) if @var.empty?

  @check = Hash.new(false)
  get_array('check', WA_UNKNOWN).each { |s| @check[s.upcase] = true }

  set_dic
  set_gra
end

#process(obj) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/lingo/attendee/variator.rb', line 95

def process(obj)
  if obj.is_a?(Word) && @check[obj.attr]
    vars, max = [obj.form], @max

    @var.each { |args|
      variate(vars, *args)
      break unless vars.length < max
    }

    vars.each { |var|
      next if (word = find_word(var)).unknown? || (
        word.attr == WA_COMPOUND && word.lexicals.any? { |lex|
          lex.attr.start_with?(LA_TAKEITASIS)
        }
      )

      return forward(word.tap { word.form = @marker + var })
    }
  end

  forward(obj)
end