Class: Lingo::Attendee::VectorFilter
- Inherits:
-
Lingo::Attendee
- Object
- Lingo::Attendee
- Lingo::Attendee::VectorFilter
- Includes:
- TextUtils
- Defined in:
- lib/lingo/attendee/vector_filter.rb
Overview
– Die Hauptaufgabe des VectorFilter ist die Erstellung eines Dokumenten-Index-Vektor. Dabei werden die durch die anderen Attendees ermittelten Grundformen eines Wortes gespeichert und bei einem Datei- oder Record-Wechsel weitergeleitet. Der VectorFilter kann bestimmte Wortklassen filtern und die Ergebnisse in verschiedenen Arten aufbereiten. Dabei werden Funktionen wie das einfache Zählen der Häufigkeit innerhalb eines Dokuments, aber auch die Term-Frequenz und unterschiedliche Ausgabeformate unterstützt.
Mögliche Verlinkung
- Erwartet
-
Daten vom Typ Word, z.B. von Abbreviator, Wordsearcher, Decomposer, Synonymer, Multiworder, Sequencer
- Erzeugt
-
Daten vom Typ String, z.B. für Textwriter
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
- lexicals
-
(Standard: ‘[sy]’ => die Wortklassen Substantiv und Synonyme werden gefiltert) Es können in eckige Klammern beliebige Wortklassen angegeben werden (siehe lib/strings.rb). Der Parameter wird als regulärer Ausdruck ausgewertet.
- sort
-
(Standard: ‘normal’) Der Parameter
sort
beeinflußt Verarbeitung und Ausgabeformat des VectorFilters.- normal
-
Jedes gefilterte Wort wird einmalig (keine Doppelnennungen!) in alphabetischer Reihenfolge in der Form “wort” ausgegeben.
- term_abs
-
Jedes gefilterte Wort wird einmalig in absteigender Häufigkeit mit Angabe der absoluten Häufigkeit im Dokument in der Form “12 wort” ausgegeben.
- term_rel
-
Jedes gefilterte Wort wird einmalig in absteigender Häufigkeit mit Angabe der relativen Häufigkeit im Dokument in der Form “0.1234 wort” ausgegeben.
- sto_abs
-
Jedes gefilterte Wort wird einmalig in absteigender Häufigkeit mit Angabe der absoluten Häufigkeit im Dokument in der Form “wort 12” ausgegeben.
- sto_rel
-
Jedes gefilterte Wort wird einmalig in absteigender Häufigkeit mit Angabe der relativen Häufigkeit im Dokument in der Form “wort 00.1234” ausgegeben.
- skip
-
(Standard: TA_PUNCTUATION und TA_OTHER) Hiermit wird angegeben, welche Objekte nicht verarbeitet werden sollen. Die
skip
-Angabe bezieht sich auf das Attributattr
von Token oder Word-Objekten.
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 }
- word_searcher: { in: token, out: words, source: 'sys-dic' }
- vector_filter: { in: words, out: filtr, sort: 'term_rel' }
- debugger: { in: filtr, prompt: 'out>' }
ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt
out> *FILE('test.txt')
out> "0.28571 indexierung"
out> *EOF('test.txt')
++
Constant Summary collapse
- DEFAULT_SRC_SEPARATOR =
'|'
- DEFAULT_POS_SEPARATOR =
'@'
- DEFAULT_DICT_SEPARATOR =
Database::Source::WordClass::DEFAULT_SEPARATOR
- DEFAULT_GENDER_SEPARATOR =
Database::Source::WordClass::GENDER_SEPARATOR
Constants included from TextUtils
TextUtils::DEFAULT_MODE, TextUtils::GZIP_RE, TextUtils::STDIN_EXT, TextUtils::STDOUT_EXT
Constants inherited from Lingo::Attendee
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
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) ⇒ Object
132 133 134 135 136 137 |
# File 'lib/lingo/attendee/vector_filter.rb', line 132 def control(cmd, *) case cmd when :EOL then :skip_command when *TERMINALS then send_vectors unless @docnum end end |
#control_deferred(cmd) ⇒ Object
139 140 141 |
# File 'lib/lingo/attendee/vector_filter.rb', line 139 def control_deferred(cmd, *) @docnum += 1 if TERMINALS.include?(cmd) end |
#init ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/lingo/attendee/vector_filter.rb', line 93 def init @lex = get_re('lexicals', '[sy]') @skip = get_ary('skip', DEFAULT_SKIP, :upcase) @src = @pos = @sort_fmt = @sort_rel = @docnum = nil @tokens, @vectors, @word_count = [], Hash.array(1), Hash.new(0) if @dict = get_key('dict', false) @norm = get_key('norm', false) @dict = DEFAULT_DICT_SEPARATOR if @dict == true else @src = get_key('src', false) @src = DEFAULT_SRC_SEPARATOR if @src == true @pos = get_key('pos', false) @pos = DEFAULT_POS_SEPARATOR if @pos == true @tokens = get_ary('tokens', '', :upcase) @tokens.concat(Tokenizer.rules) if @tokens.delete('ALL') end if sort = get_key('sort', ENV['LINGO_NO_SORT'] ? false : 'normal') @sort_fmt, sort_method = sort.downcase.split('_', 2) @sort_rel = rel = sort_method == 'rel' unless @sort_fmt == 'normal' if @tfidf = get_key('tfidf', false) DeferredAttendee.enhance(self) @docnum, rel = 0, true end _sort_fmt = @sort_fmt == 'sto' ? '%2$s {%1$X}' : '%X %s' @sort_fmt = _sort_fmt.sub('X', rel ? '.5f' : 'd') end end end |
#process(obj) ⇒ Object
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/lingo/attendee/vector_filter.rb', line 143 def process(obj) if obj.is_a?(Token) return unless @tokens.include?(obj.attr) elsif obj.is_a?(Word) return if @skip.include?(obj.attr) else return end @word_count[@docnum] += 1 @dict ? forward_dict(obj) : begin pos = obj.position_and_offset if @pos obj.is_a?(Token) ? forward_vector(obj, pos) : obj.each_lex(@lex) { |lex| forward_vector(lex, pos, lex.src) } end end |