Der ObjectFilter ermöglicht es, beliebige Objekte aus dem Datenstrom herauszufiltern. Um die gewünschten Objekte zu identifizieren, sind ein paar Ruby-Kenntnisse und das Wissen um die Lingo Klassen notwendig. Hier sollen kurz die häufigsten Fälle angesprochen werden:
Filtern nach einem bestimmten Typ, z.B. Token oder Word wird beispielsweise
durch den Ausdruck ‘obj.kind_of?(Word)’ ermöglicht. Token und Words haben
jeweils ein Attribut attr. Bei Token gibt attr
an, mit welcher Tokenizer-Regel das Token erkannt wurde. So können z.B.
alle numerischen Token mit dem Ausdruck ‘obj.kind_of?(Token) &&
obj.attr==“NUMS”’ identifiziert werden. Wie bereits gezeigt, können
Bedingungen durch logisches UND (&&) oder ODER (||) verknüpft
werden. Das Attribut form kann genutzt werden, um auf den Text
eines Objektes zuzugreifen, z.B. ‘obj.form==“John”’.
Daten beliebigen Typs von allen Attendees
Daten, die der als Parameter übergebenen Bedingung entsprechen
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
(Standard: true) Gibt einen Ruby-Ausdruck an, der, wenn der Ausdruck als Wahr ausgewertet wird, das Objekt weiterleitet und ansonsten filtert.
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' }
- object_filter: { in: words, out: filtr, objects: 'obj.kind_of?(Word) && obj.lexicals.size>0 && obj.lexicals[0].attr==LA_NOUN' }
- debugger: { in: filtr, prompt: 'out>' }
ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt
out> *FILE('test.txt')
out> <Indexierung = [(indexierung/s)]>
out> <Indexierung = [(indexierung/s)]>
out> *EOL('test.txt')
out> *EOF('test.txt')
# File lib/lingo/attendee/object_filter.rb, line 74 def init @obj_eval = get_key('objects', 'true') end
# File lib/lingo/attendee/object_filter.rb, line 78 def process(obj) forward(obj) if eval(@obj_eval) end