Die Erkennung von Abkürzungen kann auf vielfältige Weise erfolgen. In jedem
Fall sollte eine sichere Unterscheidung von einem Satzende-Punkt möglich
sein. Der in Lingo gewählte Ansatz befreit
den Tokenizer von dieser Arbeit und
konzentriert die Erkennung in diesem Attendee. Sobald der Abbreviator im Datenstrom auf ein Punkt trifft
(Token = :./PUNC:), prüft er das vorhergehende Token auf eine
gültige Abkürzung im Abkürzungs-Wörterbuch. Wird es als Abkürzung erkannt,
dann wird das Token in ein Word gewandelt und das Punkt-Token aus dem
Zeichenstrom entfernt.
Daten des Typs Token z.B. von Tokenizer
Leitet Token weiter und wandelt erkannte Abkürzungen in den Typ Word z.B. für Wordsearcher
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
Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration
t1.cfg
meeting:
attendees:
- text_reader: { out: lines, files: '$(files)' }
- tokenizer: { in: lines, out: token }
- abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
- debugger: { in: abbrev, prompt: 'out>' }
ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt
out> *FILE('test.txt')
out> :Dies/WORD:
out> :ist/WORD:
out> <ggf. = [(gegebenenfalls/w)]>
out> :eine/WORD:
out> :Abk³rzung/WORD:
out> :./PUNC:
out> *EOL('test.txt')
out> *EOF('test.txt')
# File lib/lingo/attendee/abbreviator.rb, line 78 def control(cmd, param) send_abbr(nil) if [STR_CMD_RECORD, STR_CMD_EOF].include?(cmd) end
# File lib/lingo/attendee/abbreviator.rb, line 74 def init set_dic end
# File lib/lingo/attendee/abbreviator.rb, line 82 def process(obj) if obj.is_a?(Token) if obj.form == CHAR_PUNCT if @abbr && (abbr = find_word(form = @abbr.form)).identified? form << CHAR_PUNCT unless form.end_with?(CHAR_PUNCT) send_abbr(abbr) else send_abbr(@abbr) forward(obj) end else send_abbr(@abbr, obj) end else send_abbr(obj) end end
# File lib/lingo/attendee/abbreviator.rb, line 102 def send_abbr(abbr, obj = nil) @abbr = obj forward(abbr) if abbr end