class Lingo::Attendee::Abbreviator

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.

Mögliche Verlinkung

Erwartet

Daten des Typs Token z.B. von Tokenizer

Erzeugt

Leitet Token weiter und wandelt erkannte Abkürzungen in den Typ Word z.B. für Wordsearcher

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

source

siehe allgemeine Beschreibung des Dictionary

mode

(Standard: all) siehe allgemeine Beschreibung des Dictionary

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 }
    - 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')

Protected Instance Methods

control(cmd, param) click to toggle source
# File lib/lingo/attendee/abbreviator.rb, line 78
def control(cmd, param)
  report_on(cmd, @dic)
  process_buffer
end
init() click to toggle source
# File lib/lingo/attendee/abbreviator.rb, line 74
def init
  set_dic
end

Private Instance Methods

process_buffer() click to toggle source
# File lib/lingo/attendee/abbreviator.rb, line 89
def process_buffer
  if @buffer.size < 2
    forward_buffer
    return
  end

  if form = form_at(-2, Token)
    inc('Anzahl gesuchter Abkürzungen')

    if (abbr = find_word(form)).identified?
      inc('Anzahl gefundener Abkürzungen')

      abbr.form += CHAR_PUNCT

      @buffer[-2] = abbr
      @buffer.delete_at(-1)
    end
  end

  forward_buffer
end
process_buffer?() click to toggle source
# File lib/lingo/attendee/abbreviator.rb, line 85
def process_buffer?
  form_at(-1, Token) == CHAR_PUNCT
end