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.
Daten vom Typ Word, z.B. von Abbreviator, Wordsearcher, Decomposer, Synonymer, Multiworder, Sequencer
Daten vom Typ String, z.B. für Textwriter
Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung). Alle anderen Parameter müssen zwingend angegeben werden.
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')
# 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
# File lib/lingo/attendee/noneword_filter.rb, line 72 def init @nonewords, @sort = [], get_key('sort', true) end
# 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
# 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