Class: Lingo::Attendee::TextWriter

Inherits:
Lingo::Attendee show all
Includes:
TextUtils
Defined in:
lib/lingo/attendee/text_writer.rb

Overview

– 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

++

Direct Known Subclasses

Formatter

Constant Summary

Constants included from TextUtils

TextUtils::DEFAULT_MODE, TextUtils::GZIP_RE, TextUtils::STDIN_EXT, TextUtils::STDOUT_EXT

Constants inherited from Lingo::Attendee

DEFAULT_SKIP, TERMINALS

Constants included from Language

Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_ABBREVIATION, Language::TA_HELP, Language::TA_HTML, Language::TA_NUMBER, Language::TA_OTHER, Language::TA_PUNCTUATION, Language::TA_SKIP, Language::TA_SPACE, Language::TA_URL, Language::TA_WIKI, Language::TA_WORD, Language::WA_COMPOUND, Language::WA_IDENTIFIED, Language::WA_MULTIWORD, Language::WA_SEQUENCE, Language::WA_UNKMULPART, Language::WA_UNKNOWN, Language::WA_UNSET

Instance Attribute Summary

Attributes inherited from Lingo::Attendee

#lingo, #subscribers

Instance Method Summary collapse

Methods inherited from Lingo::Attendee

#command, #forward, #initialize

Constructor Details

This class inherits a constructor from Lingo::Attendee

Instance Method Details

#control(cmd, param = nil) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/lingo/attendee/text_writer.rb', line 97

def control(cmd, param = nil, *)
  case cmd
    when :LIR
      @lir = true unless @lir.nil?
    when :FILE
      @no_sep, @io = true, (@stdout = stdout?(@ext)) ?
        open_stdout : open_path(get_path(param, @ext), 'w')

      @lir_rec_no, @lir_rec_buf = '', []
    when :RECORD
      if @lir
        @no_sep = true

        flush_lir_buffer
        @lir_rec_no = param
      end
    when :EOL
      @no_sep = true
      @io.puts unless @lir || @no_puts
    when :EOF
      flush_lir_buffer if @lir
      @io.close unless @stdout
  end
end

#initObject



84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/lingo/attendee/text_writer.rb', line 84

def init
  @encoding = get_enc

  @ext = get_key('ext', 'txt2')
  @lir = get_key('lir-format', false)

  @sep = get_key('sep', nil) unless @lir
  @sep &&= @sep.evaluate
  @sep ||= ' '

  @no_sep, @no_puts = true, false
end

#process(obj) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/lingo/attendee/text_writer.rb', line 122

def process(obj)
  obj = obj.form if obj.is_a?(WordForm)

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