class Lingo::Attendee::TextWriter

Der TextWriter ermöglicht die Umleitung des Datenstroms in eine Textdatei. Dabei werden Objekte, die nicht vom Typ String sind in eine sinnvolle Textrepresentation gewandelt. Der Name der Ausgabedatei wird durch den Namen der Eingabedatei (des Textreaders) bestimmt. Es kann lediglich die Extension verändert werden. Der TextWriter kann auch das LIR-Format erzeugen.

Mögliche Verlinkung

Erwartet

Daten verschiedenen Typs

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

ext

(Standard: txt2) Gibt die Dateinamen-Erweiertung für die Ausgabedatei an. Wird z.B. dem TextReader die Datei Dokument.txt angegeben und über die Lingo-Konfiguration alle Indexwörter herausgefiltert, kann mit ext: 'idx' der TextWriter veranlasst werden, die Indexwörter in die Datei Dokument.idx zu schreiben.

sep

(Standard: ‘ ’) Gibt an, mit welchem Trennzeichen zwei aufeinanderfolgende Objekte in der Ausgabedatei getrennt werden sollen. Gängige Werte sind auch noch ‘n’, welches die Ausgabe jedes Objektes in eine Zeile ermöglicht.

lir-format

(Standard: false) Dieser Parameter hat keinen Wert. Wird er angegeben, dann wird er als true ausgewertet. Damit ist es möglich, die Ausgabedatei im für LIR lesbarem Format zu erstellen.

Beispiele

Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des Textwriters 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' }
    - vector_filter:  { in: words, out: filtr, sort: 'term_rel' }
    - text_writer:    { in: filtr, ext: 'vec', sep: '\n' }

ergibt die Ausgabe in der Datei test.vec

0.03846 name
0.01923 ausgabedatei
0.01923 datenstrom
0.01923 extension
0.01923 format
0.01923 objekt
0.01923 string
0.01923 textdatei
0.01923 typ
0.01923 umleitung

Protected Instance Methods

control(cmd, param) click to toggle source
# File lib/lingo/attendee/text_writer.rb, line 92
def control(cmd, param)
  case cmd
    when STR_CMD_LIR
      @lir = true
    when STR_CMD_FILE
      @no_sep = true

      if stdout?(@ext)
        @filename, @file = @ext, @lingo.config.stdout
      else
        inc('Anzahl Dateien')
        @file = File.open(@filename = File.set_ext(param, ".#{@ext}"), 'w')
      end

      @lir_rec_no, @lir_rec_buf = '', []
    when STR_CMD_RECORD
      @no_sep = true

      if @lir
        flush_lir_buffer
        @lir_rec_no = param
      end
    when STR_CMD_EOL
      @no_sep = true

      unless @lir
        inc('Anzahl Zeilen')
        @file.puts unless @no_puts
      end
    when STR_CMD_EOF
      flush_lir_buffer if @lir

      unless stdout?(@filename)
        add('Anzahl Bytes', @file.size)
        @file.close
      end
  end
end
init() click to toggle source
# File lib/lingo/attendee/text_writer.rb, line 81
def init
  @ext = get_key('ext', 'txt2')
  @lir = get_key('lir-format', false)

  @sep   = @config['sep'] unless @lir
  @sep &&= @sep.evaluate
  @sep ||= ' '

  @no_sep, @no_puts = true, false
end
process(obj) click to toggle source
# File lib/lingo/attendee/text_writer.rb, line 131
def process(obj)
  obj = obj.form if obj.is_a?(WordForm)

  @lir ? @lir_rec_buf << obj : begin
    @no_sep ? @no_sep = false : @file.print(@sep)
    @file.print(obj)
  end
end

Private Instance Methods

flush_lir_buffer() click to toggle source
# File lib/lingo/attendee/text_writer.rb, line 142
def flush_lir_buffer
  unless @lir_rec_no.empty? || @lir_rec_buf.empty?
    @file.print(*[@lir_rec_no, @lir_rec_buf.join(@sep), "\n"].tap { |buf|
      @sep =~ %r\n/ ? buf.insert(1, "\n").unshift('*') : buf.insert(1, '*')
    })
  end

  @lir_rec_no = ''
  @lir_rec_buf.clear
end
stdout?(filename) click to toggle source
# File lib/lingo/attendee/text_writer.rb, line 153
def stdout?(filename)
  %w[STDOUT -].include?(filename)
end