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.
Daten vom Typ Word (andere werden einfach durchgereicht) z.B. von Wordsearcher
Daten vom Typ Word zur Weiterleitung z.B. an Synonymer, Decomposer, Multiworder, Sequencer, Noneword_filter oder Vector_filter
Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.
siehe allgemeine Beschreibung des Attendee
siehe allgemeine Beschreibung des Attendee
siehe allgemeine Beschreibung des Dictionary
(Standard: all) siehe allgemeine Beschreibung des Dictionary
(Standard: WA_UNKNOWN) Gebrenzt die zu variierenden Worttypen
(Standard: ‘*’) Kennzeichnung durch Variation erkannter Wörter
(Standard: ‘10000’) Begrenzung der maximal zu prüfenden Permutationen bei der vollständigen Kombination aller auf ein Wort anzuwendenen aufgelisteten Wortteile.
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')
# File lib/lingo/attendee/variator.rb, line 91 def control(cmd, param) report_on(cmd, @dic, @gra) end
# File lib/lingo/attendee/variator.rb, line 76 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
# File lib/lingo/attendee/variator.rb, line 95 def process(obj) if obj.is_a?(Word) && @check[obj.attr] inc('Anzahl gesuchter Wörter') @var.each_with_object([obj.form]) { |a, v| variate(v, *a) }. tap { |v| v.slice!(@max..-1) }.each { |var| next if (word = find_word(var)).unknown? || ( word.attr == WA_COMPOUND && word.lexicals.any? { |lex| lex.attr.start_with?(LA_TAKEITASIS) } ) inc('Anzahl gefundener Wörter') return forward(word.tap { word.form = @marker + var }) } end forward(obj) end
Variiere die Bestandteile eines Arrays gemäß den Austauschvorgaben.
variate( ‘Tiieh’, ‘ieh’, ‘sch’ ) => [‘Tiieh’, ‘Tisch’]
# File lib/lingo/attendee/variator.rb, line 120 def variate(variations, from, to) add, change, re = [], [from, to], Regexp.new(from) variations.each { |form| parts = " #{form} ".split(re) 1.upto(2 ** (n = parts.size - 1) - 1) { |i| var = parts.first 1.upto(n) { |j| var += change[i[j - 1]] + parts[j] } add << var.strip } } variations.concat(add) end