Class: Lingo::Attendee
- Inherits:
-
Object
- Object
- Lingo::Attendee
- Includes:
- Language
- Defined in:
- lib/lingo/attendee.rb,
lib/lingo/attendee/stemmer.rb,
lib/lingo/attendee/debugger.rb,
lib/lingo/attendee/variator.rb,
lib/lingo/attendee/formatter.rb,
lib/lingo/attendee/sequencer.rb,
lib/lingo/attendee/synonymer.rb,
lib/lingo/attendee/tokenizer.rb,
lib/lingo/attendee/decomposer.rb,
lib/lingo/attendee/hal_filter.rb,
lib/lingo/attendee/lsi_filter.rb,
lib/lingo/attendee/abbreviator.rb,
lib/lingo/attendee/text_reader.rb,
lib/lingo/attendee/text_writer.rb,
lib/lingo/attendee/debug_filter.rb,
lib/lingo/attendee/multi_worder.rb,
lib/lingo/attendee/object_filter.rb,
lib/lingo/attendee/vector_filter.rb,
lib/lingo/attendee/word_searcher.rb,
lib/lingo/attendee/stemmer/porter.rb,
lib/lingo/attendee/analysis_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, AnalysisFilter, Debugger, Decomposer, HalFilter, ObjectFilter, Stemmer, Synonymer, TextReader, TextWriter, Tokenizer, Variator, VectorFilter, WordSearcher, BufferedAttendee, DeferredAttendee
Defined Under Namespace
Classes: Abbreviator, AnalysisFilter, DebugFilter, Debugger, Decomposer, Formatter, HalFilter, LsiFilter, MultiWorder, ObjectFilter, Sequencer, Stemmer, Synonymer, TextReader, TextWriter, Tokenizer, Variator, VectorFilter, WordSearcher
Constant Summary collapse
- TERMINALS =
[:FILE, :RECORD, :EOF]
- DEFAULT_SKIP =
[TA_PUNCTUATION, TA_OTHER].join(',')
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 collapse
-
#lingo ⇒ Object
readonly
Returns the value of attribute lingo.
-
#subscribers ⇒ Object
readonly
Returns the value of attribute subscribers.
Instance Method Summary collapse
- #command(*args) ⇒ Object
- #forward(*args) ⇒ Object
-
#initialize(config, lingo) ⇒ Attendee
constructor
A new instance of Attendee.
Constructor Details
#initialize(config, lingo) ⇒ Attendee
Returns a new instance of Attendee.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/lingo/attendee.rb', line 77 def initialize(config, lingo) @lingo, @config, @subscribers = lingo, config, [] # Make sure config exists lingo.dictionary_config @dic, @gra, @valid_keys = nil, nil, %w[name in out] init unless (invalid_keys = config.keys - @valid_keys).empty? warn( "CONFIGURATION NOTICE: #{self.class.name.sub(/\ALingo::/, '')}" << " options invalid or obsolete: #{invalid_keys.sort.join(', ')}" << " (in #{lingo.config.config_file})" ) end end |
Instance Attribute Details
#lingo ⇒ Object (readonly)
Returns the value of attribute lingo.
96 97 98 |
# File 'lib/lingo/attendee.rb', line 96 def lingo @lingo end |
#subscribers ⇒ Object (readonly)
Returns the value of attribute subscribers.
96 97 98 |
# File 'lib/lingo/attendee.rb', line 96 def subscribers @subscribers end |
Instance Method Details
#command(*args) ⇒ Object
102 103 104 105 106 |
# File 'lib/lingo/attendee.rb', line 102 def command(*args) subscribers.each { |sub| sub.command(*args) unless sub.control(*args) == :skip_command } end |
#forward(*args) ⇒ Object
98 99 100 |
# File 'lib/lingo/attendee.rb', line 98 def forward(*args) subscribers.each { |sub| sub.process(*args) } end |