Class: Lingo::Attendee::MultiWorder
- Inherits:
-
BufferedAttendee
- Object
- Lingo::Attendee
- BufferedAttendee
- Lingo::Attendee::MultiWorder
- Includes:
- Lingo::ArrayUtils
- Defined in:
- lib/lingo/attendee/multi_worder.rb
Overview
– Mit der bisher beschriebenen Vorgehensweise werden die durch den Tokenizer erkannten Token aufgelöst und in Words verwandelt und über den Abbreviator und Decomposer auch Spezialfälle behandelt, die einzelne Wörter betreffen. Um jedoch auch Namen wie z.B. John F. Kennedy als Sinneinheit erkennen zu können, muss eine Analyse über mehrere Objekte erfolgen. Dies ist die Hauptaufgabe des MultiWorders. Der MultiWorder analysiert die Teile des Datenstroms, die z.B. durch Satzzeichen oder weiteren Einzelzeichen (z.B. ‘(’) begrenzt sind. Erkannte Mehrwortgruppen werden als zusätzliches Objekt in den Datenstrom mit eingefügt.
Mögliche Verlinkung
- Erwartet
-
Daten vom Typ Word z.B. von Wordsearcher, Decomposer, Ocr_variator, MultiWorder
- Erzeugt
-
Daten vom Typ Word (mit Attribut WA_MULTIWORD). Je erkannter Mehrwortgruppe wird
ein zusätzliches Word-Objekt in den Datenstrom eingefügt. Z.B. für Ocr_variator, Sequencer, Vector_filter
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
- source
-
siehe allgemeine Beschreibung des Dictionary
- mode
-
(Standard: all) siehe allgemeine Beschreibung des Dictionary
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 }
- abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
- word_searcher: { in: abbrev, out: words, source: 'sys-dic' }
- decomposer: { in: words, out: comps, source: 'sys-dic' }
- multi_worder: { in: comps, out: multi, source: 'sys-mul' }
- debugger: { in: multi, prompt: 'out>' }
ergibt die Ausgabe über den Debugger: lingo -c t1 test.txt
out> *FILE('test.txt')
out> <Sein = [(sein/s), (sein/v)]>
out> <Name = [(name/s)]>
out> <ist = [(sein/v)]>
out> <johann van siegen|MUL = [(johann van siegen/m)]>
out> <Johann = [(johann/e)]>
out> <van = [(van/w)]>
out> <Siegen = [(sieg/s), (siegen/v), (siegen/e)]>
out> :./PUNC:
out> *EOL('test.txt')
out> *EOF('test.txt')
++
Constant Summary
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 BufferedAttendee
Methods inherited from Lingo::Attendee
#command, #forward, #initialize
Constructor Details
This class inherits a constructor from Lingo::BufferedAttendee
Instance Method Details
#control(cmd) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/lingo/attendee/multi_worder.rb', line 119 def control(cmd, *) if [:RECORD, :EOF].include?(cmd) @eof_handling = true while process_buffer?(2) process_buffer end forward_number_of_token @eof_handling = false end end |
#init ⇒ Object
84 85 86 87 88 89 90 91 92 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 |
# File 'lib/lingo/attendee/multi_worder.rb', line 84 def init # combine lexical variants? # # false = old behaviour # true = first match # 'all' = all matches @combine = get_key('combine', false) @all = @combine.is_a?(String) && @combine.downcase == 'all' lex_src, lex_mod, d = nil, nil, lingo.dictionary_config['databases'] (mul_src = get_ary('source')).each { |src| s, m = d[src].values_at('use-lex', 'lex-mode') if lex_src.nil? || lex_src == s lex_src, lex_mod = s, m else warn "#{self.class}: Dictionaries don't match: #{mul_src.join(',')}" end } lex_src = lex_src.split(SEP_RE) lex_mod = get_key('lex-mode', lex_mod || 'first') @mul_dic = dictionary(mul_src, get_key('mode', 'all')) @lex_dic = dictionary(lex_src, lex_mod) @lex_gra = grammar(lex_src, lex_mod) @syn_dic = if @combine && has_key?('use-syn') dictionary(get_ary('use-syn'), get_key('syn-mode', 'all')) end @expected_tokens_in_buffer, @eof_handling = 3, false end |