Class: Lingo::Attendee

Inherits:
Object
  • Object
show all
Includes:
Language
Defined in:
lib/lingo/attendee.rb,
lib/lingo/attendee/stemmer.rb,
lib/lingo/attendee/variator.rb,
lib/lingo/attendee/debugger.rb,
lib/lingo/attendee/synonymer.rb,
lib/lingo/attendee/formatter.rb,
lib/lingo/attendee/tokenizer.rb,
lib/lingo/attendee/sequencer.rb,
lib/lingo/attendee/decomposer.rb,
lib/lingo/attendee/text_reader.rb,
lib/lingo/attendee/abbreviator.rb,
lib/lingo/attendee/text_writer.rb,
lib/lingo/attendee/multi_worder.rb,
lib/lingo/attendee/dehyphenizer.rb,
lib/lingo/attendee/object_filter.rb,
lib/lingo/attendee/word_searcher.rb,
lib/lingo/attendee/vector_filter.rb,
lib/lingo/attendee/stemmer/porter.rb,
lib/lingo/attendee/noneword_filter.rb

Overview

Lingo ist als universelles Indexierungssystem entworfen worden. Seine Stärke liegt in der einfachen Konfigurierbarkeit für spezifische Aufgaben und in der schnelle Entwicklung weiterer Funktionen durch systematischen Kapselung der Komplexität auf kleine Verarbeitungseinheiten. Die kleinste Verarbeitungseinheit wird Attendee genannt. Um ein gewünschtes Verarbeitungsergebnis zu bekommen, werden die benötigten Attendees einfach in einer Reihe hinter einander geschaltet. Ein einfaches Beispiel hierfür ist eine direkte Verbindung zwischen einem Textreader, einem Tokenizer und einem Textwriter. Alle drei Klassen sind von der Klasse Attendee abgeleitet.

Der Textreader liest beispielsweise Zeilen aus einer Textdatei und leitet sie weiter an den Tokenizer. Der Tokenizer zerlegt eine Textzeile in einzelne Wörter und gibt diese weiter an den Textwriter, der diese in eine (andere) Datei schreibt. Über vielfältige Konfigurationsmöglichkeiten kann das Verhalten der Attendees an die eigenen Bedürfnisse angepasst werden.

Die Verkettung einzelner Attendees findet über die Schnittstellen listen und talk statt. An listen können beliebige Objekte zur Ver- und Bearbeitung übergeben werden. Nach der Verarbeitung werden sie mittels talk an die verketteten Attendees weiter gegeben. Objekte der Klasse AgendaItem dienen dabei der Steuerung der Verarbeitung und sind nicht Bestandteil der normalen Verarbeitung. Beispiele für AgendaItems sind die Kommandos TALK (Aufforderung zum Start der Verarbeitung), WARN (zur Ausgabe von Warnungen eines Attendees) und EOL (End of Line, Ende einer Textzeile nach Zerlegung in einzelne Wörter). Eine vollständige Übersicht benutzer AgendaItems (oder auf Stream Commands) steht in lib/const.rb mit dem Prefix STR_CMD_.

Um die Entwicklung von neuen Attendees zu beschleunigen, wird durch die Vererbung sind bei wird die gesammte sind in der Regel nur drei abstrakte Methoden zu implementieren: init, control und process. Die Methode init wird bei der Instanziierung eines Objektes einmalig aufgerufen. Sie dient der Vorbereitung der Verarbeitung, z.B. durch das Öffnen und Bereitstellen von Wörterbüchern zur linguistischen Analyse. An die Methode control werden alle eingehenden AgendaItems weitergeleitet. Dort erfolgt die Verarbeitungssteuerung, also z.B. bei STR_CMD_FILE das Öffnen einer Datei und bei STR_CMD_EOF respektive das Schließen. Die echte Verarbeitung von Daten findet daher durch die Methode process statt.

was macht attendee

  • verkettung der attendees anhand von konfigurationsinformationen

  • bereitstellung von globalen und spezifischen konfigurationsinformationen

  • behandlung von bestimmten übergreifenden Kommandos, z.B. STR_CMD_TALK

  • separierung und routing von kommando bzw. datenobjekten

was macht die abgeleitet klasse

  • verarbeitet und/oder transformiert datenobjekte

  • wird gesteuert durch kommandos

  • schreibt verarbeitungsstatistiken

Direct Known Subclasses

Abbreviator, Debugger, Decomposer, NonewordFilter, ObjectFilter, Stemmer, Synonymer, TextReader, TextWriter, Tokenizer, Variator, VectorFilter, WordSearcher, BufferedAttendee

Defined Under Namespace

Classes: Abbreviator, Debugger, Decomposer, Dehyphenizer, Formatter, MultiWorder, NonewordFilter, ObjectFilter, Sequencer, Stemmer, Synonymer, TextReader, TextWriter, Tokenizer, Variator, VectorFilter, WordSearcher

Constant Summary

STR_CMD_TALK =
'TALK'
STR_CMD_LIR =
'LIR-FORMAT'
STR_CMD_FILE =
'FILE'
STR_CMD_EOL =
'EOL'
STR_CMD_RECORD =
'RECORD'
STR_CMD_EOF =
'EOF'
DEFAULT_SKIP =
[TA_PUNCTUATION, TA_OTHER].join(',')
Textreader =

For backwards compatibility.

TextReader
Text_reader =
TextReader
Textwriter =

For backwards compatibility.

TextWriter
Text_writer =
TextWriter
Multiworder =

For backwards compatibility.

MultiWorder
Multi_worder =
MultiWorder
Objectfilter =

For backwards compatibility.

ObjectFilter
Object_filter =
ObjectFilter
Wordsearcher =

For backwards compatibility.

WordSearcher
Word_searcher =
WordSearcher
Vectorfilter =

For backwards compatibility.

VectorFilter
Vector_filter =
VectorFilter
Nonewordfilter =

For backwards compatibility.

NonewordFilter
Noneword_filter =
NonewordFilter

Constants included from Language

Language::CHAR_PUNCT, Language::LA_SORTORDER, Language::TA_OTHER, Language::TA_PUNCTUATION, 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 (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Attendee) initialize(config, lingo)

Returns a new instance of Attendee



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/lingo/attendee.rb', line 80

def initialize(config, lingo)
  @lingo, @config, @subscriber = lingo, config, []

  # Make sure config exists
  lingo.dictionary_config

  @dic = @gra = nil

  init if self.class.method_defined?(:init)

  @can_control = self.class.method_defined?(:control)
  @can_process = self.class.method_defined?(:process)

  @skip_command = false
end

Instance Attribute Details

- (Object) lingo (readonly)

Returns the value of attribute lingo



96
97
98
# File 'lib/lingo/attendee.rb', line 96

def lingo
  @lingo
end

Instance Method Details

- (Object) add_subscriber(subscriber)



98
99
100
# File 'lib/lingo/attendee.rb', line 98

def add_subscriber(subscriber)
  @subscriber.concat(subscriber)
end

- (Object) listen(obj)



102
103
104
105
106
107
108
109
110
# File 'lib/lingo/attendee.rb', line 102

def listen(obj)
  if obj.is_a?(AgendaItem)
    args = obj.to_a
    control(*args) if @can_control
    forward(*args) unless obj.cmd == STR_CMD_TALK || skip_command!
  else
    @can_process ? process(obj) : forward(obj)
  end
end

- (Object) talk(obj)



112
113
114
# File 'lib/lingo/attendee.rb', line 112

def talk(obj)
  @subscriber.each { |attendee| attendee.listen(obj) }
end