class Lingo::Attendee::NonewordFilter

Der NonewordFilter ermöglicht es, alle nicht erkannten Wörter aus dem Datenstrom zu selektieren und weiterzuleiten. Im Prinzip werden alle erkannten Wörter gefiltert. Bei einem Indexierungslauf können so alle nicht durch den Wordsearcher erkannten Wörter, also die, die im Wörterbuch nicht enthalten sind, separat ausgegeben werden und als Grundlage für die Wörterbuchpflege dienen. Der NonewordFilter ist in einer frühen Entwicklungsphase entstanden. Die gleiche Funktion kann auch mit dem universelleren Objectfilter mit dem Ausdruck ‘obj.kind_of?(Word) && obj.attr==WA_UNKNOWN’ durchgeführt werden, mit dem einzigen Unterschied, dass der NonewordFilter nur die Wortform weiterleitet. Der NonewordFilter verschluckt ebenfalls alle Kommandos, ausser dem Dateianfang (*FILE) und Ende (*EOF), sowie dem LIR-Format-Spezifikum (*RECORD).

Hinweis Dieser Attendee sammelt die auszugebenden Daten so lange, bis ein Dateiwechsel oder Record-Wechsel angekündigt wird. Erst dann werden alle Daten auf einmal weitergeleitet.

Mögliche Verlinkung

Erwartet

Daten vom Typ Word, z.B. von Abbreviator, Wordsearcher, Decomposer, Synonymer, Multiworder, Sequencer

Erzeugt

Daten vom Typ String, z.B. für Textwriter

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

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: token, out: words, source: 'sys-dic' }
    - noneword_filter:  { in: words, out: filtr }
    - debugger:         { in: filtr, prompt: 'out>' }

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

out> *FILE('test.txt')
out> "lingo"
out> *EOF('test.txt')

Protected Instance Methods

control(cmd, param) click to toggle source
# File lib/lingo/attendee/noneword_filter.rb, line 76
def control(cmd, param)
  case cmd
    when STR_CMD_FILE
      @nonewords.clear
    when STR_CMD_EOL
      skip_command
    when STR_CMD_RECORD, STR_CMD_EOF
      send_nonewords unless @nonewords.empty?
  end
end
init() click to toggle source
# File lib/lingo/attendee/noneword_filter.rb, line 72
def init
  @nonewords, @sort = [], get_key('sort', true)
end
process(obj) click to toggle source
# File lib/lingo/attendee/noneword_filter.rb, line 87
def process(obj)
  if obj.is_a?(Word) && obj.unknown?
    inc('Anzahl nicht erkannter Wörter')

    non = obj.form.downcase
    @sort ? @nonewords << non : forward(non)
  end
end

Private Instance Methods

send_nonewords() click to toggle source
# File lib/lingo/attendee/noneword_filter.rb, line 98
def send_nonewords
  @nonewords.sort!
  @nonewords.uniq!

  add('Objekte gefiltert', @nonewords.size)
  @nonewords.each(&method(:forward)).clear
end