lingo 1.8.0 → 1.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. data/ChangeLog +13 -0
  2. data/README +49 -29
  3. data/Rakefile +28 -4
  4. data/TODO +2 -9
  5. data/bin/lingo +24 -0
  6. data/bin/lingoctl +24 -0
  7. data/de/lingo-dic.txt +559 -74
  8. data/info/gpl-hdr.txt +21 -24
  9. data/lib/lingo.rb +83 -112
  10. data/lib/lingo/agenda_item.rb +53 -0
  11. data/lib/lingo/attendee.rb +261 -0
  12. data/lib/lingo/attendee/abbreviator.rb +95 -97
  13. data/lib/lingo/attendee/debugger.rb +94 -93
  14. data/lib/lingo/attendee/decomposer.rb +76 -83
  15. data/lib/lingo/attendee/dehyphenizer.rb +141 -144
  16. data/lib/lingo/attendee/formatter.rb +65 -0
  17. data/lib/lingo/attendee/multi_worder.rb +302 -0
  18. data/lib/lingo/attendee/noneword_filter.rb +89 -84
  19. data/lib/lingo/attendee/object_filter.rb +91 -0
  20. data/lib/lingo/attendee/sequencer.rb +159 -158
  21. data/lib/lingo/attendee/synonymer.rb +81 -84
  22. data/lib/lingo/attendee/text_reader.rb +242 -0
  23. data/lib/lingo/attendee/text_writer.rb +169 -0
  24. data/lib/lingo/attendee/tokenizer.rb +192 -191
  25. data/lib/lingo/attendee/variator.rb +152 -156
  26. data/lib/lingo/attendee/vector_filter.rb +140 -135
  27. data/lib/lingo/attendee/word_searcher.rb +98 -0
  28. data/lib/lingo/buffered_attendee.rb +69 -0
  29. data/lib/lingo/cachable.rb +58 -0
  30. data/lib/lingo/call.rb +72 -0
  31. data/lib/lingo/cli.rb +26 -0
  32. data/lib/lingo/config.rb +23 -26
  33. data/lib/lingo/core_ext.rb +42 -0
  34. data/lib/lingo/ctl.rb +239 -173
  35. data/lib/lingo/database.rb +148 -496
  36. data/lib/lingo/database/crypter.rb +85 -0
  37. data/lib/lingo/database/gdbm_store.rb +49 -0
  38. data/lib/lingo/database/hash_store.rb +67 -0
  39. data/lib/lingo/database/libcdb_store.rb +58 -0
  40. data/lib/lingo/database/sdbm_store.rb +64 -0
  41. data/lib/lingo/database/show_progress.rb +81 -0
  42. data/lib/lingo/database/source.rb +134 -0
  43. data/lib/lingo/database/source/key_value.rb +62 -0
  44. data/lib/lingo/database/source/multi_key.rb +65 -0
  45. data/lib/lingo/database/source/multi_value.rb +65 -0
  46. data/lib/lingo/database/source/single_word.rb +60 -0
  47. data/lib/lingo/database/source/word_class.rb +64 -0
  48. data/lib/lingo/error.rb +122 -0
  49. data/lib/lingo/language.rb +78 -518
  50. data/lib/lingo/language/dictionary.rb +173 -0
  51. data/lib/lingo/language/grammar.rb +211 -0
  52. data/lib/lingo/language/lexical.rb +66 -0
  53. data/lib/lingo/language/lexical_hash.rb +88 -0
  54. data/lib/lingo/language/token.rb +48 -0
  55. data/lib/lingo/language/word.rb +130 -0
  56. data/lib/lingo/language/word_form.rb +83 -0
  57. data/lib/lingo/reportable.rb +59 -0
  58. data/lib/lingo/version.rb +1 -1
  59. data/lingo-all.cfg +14 -10
  60. data/lingo-call.cfg +5 -5
  61. data/lingo.cfg +14 -12
  62. data/lingo.rb +26 -0
  63. data/lir.cfg +13 -9
  64. data/spec/spec_helper.rb +1 -0
  65. data/test.cfg +11 -11
  66. data/test/attendee/ts_abbreviator.rb +0 -6
  67. data/test/attendee/ts_decomposer.rb +0 -6
  68. data/test/attendee/{ts_multiworder.rb → ts_multi_worder.rb} +1 -7
  69. data/test/attendee/ts_noneword_filter.rb +1 -7
  70. data/test/attendee/{ts_objectfilter.rb → ts_object_filter.rb} +1 -7
  71. data/test/attendee/ts_sequencer.rb +0 -6
  72. data/test/attendee/ts_synonymer.rb +0 -6
  73. data/test/attendee/{ts_textreader.rb → ts_text_reader.rb} +1 -7
  74. data/test/attendee/{ts_textwriter.rb → ts_text_writer.rb} +1 -7
  75. data/test/attendee/ts_tokenizer.rb +0 -6
  76. data/test/attendee/ts_variator.rb +0 -6
  77. data/test/attendee/ts_vector_filter.rb +1 -7
  78. data/test/attendee/{ts_wordsearcher.rb → ts_word_searcher.rb} +1 -7
  79. data/test/ref/artikel.non +2 -29
  80. data/test/ref/artikel.seq +13 -8
  81. data/test/ref/artikel.vec +30 -15
  82. data/test/ref/artikel.ven +29 -14
  83. data/test/ref/artikel.ver +58 -43
  84. data/test/ref/lir.csv +146 -145
  85. data/test/ref/lir.non +186 -210
  86. data/test/ref/lir.seq +54 -50
  87. data/test/test_helper.rb +41 -36
  88. data/test/ts_database.rb +12 -11
  89. data/test/ts_language.rb +118 -68
  90. metadata +67 -29
  91. data/lib/lingo/attendee/multiworder.rb +0 -301
  92. data/lib/lingo/attendee/objectfilter.rb +0 -86
  93. data/lib/lingo/attendee/textreader.rb +0 -237
  94. data/lib/lingo/attendee/textwriter.rb +0 -196
  95. data/lib/lingo/attendee/wordsearcher.rb +0 -96
  96. data/lib/lingo/attendees.rb +0 -289
  97. data/lib/lingo/const.rb +0 -131
  98. data/lib/lingo/modules.rb +0 -98
  99. data/lib/lingo/types.rb +0 -285
  100. data/lib/lingo/utilities.rb +0 -40
@@ -1,117 +1,115 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # LINGO ist ein Indexierungssystem mit Grundformreduktion, Kompositumzerlegung,
5
- # Mehrworterkennung und Relationierung.
6
- #
7
- # Copyright (C) 2005-2007 John Vorhauer
8
- # Copyright (C) 2007-2011 John Vorhauer, Jens Wille
9
- #
10
- # This program is free software; you can redistribute it and/or modify it under
11
- # the terms of the GNU Affero General Public License as published by the Free
12
- # Software Foundation; either version 3 of the License, or (at your option)
13
- # any later version.
14
- #
15
- # This program is distributed in the hope that it will be useful, but WITHOUT
16
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
- # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18
- # details.
19
- #
20
- # You should have received a copy of the GNU Affero General Public License along
21
- # with this program; if not, write to the Free Software Foundation, Inc.,
22
- # 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
23
- #
24
- # For more information visit http://www.lex-lingo.de or contact me at
25
- # welcomeATlex-lingoDOTde near 50°55'N+6°55'E.
26
- #
27
- # Lex Lingo rules from here on
4
+ ###############################################################################
5
+ # #
6
+ # Lingo -- A full-featured automatic indexing system #
7
+ # #
8
+ # Copyright (C) 2005-2007 John Vorhauer #
9
+ # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
+ # #
11
+ # Lingo is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
28
25
  #++
29
26
 
30
27
  class Lingo
31
28
 
32
- # Die Erkennung von Abkürzungen kann auf vielfältige Weise erfolgen. In jedem Fall
33
- # sollte eine sichere Unterscheidung von einem Satzende-Punkt möglich sein.
34
- # Der in Lingo gewählte Ansatz befreit den Tokenizer von dieser Arbeit und konzentriert
35
- # die Erkennung in diesem Attendee.
36
- # Sobald der Abbreviator im Datenstrom auf ein Punkt trifft (Token = <tt>:./PUNC:</tt>),
37
- # prüft er das vorhergehende Token auf eine gültige Abkürzung im Abkürzungs-Wörterbuch.
38
- # Wird es als Abkürzung erkannt, dann wird das Token in ein Word gewandelt und das
39
- # Punkt-Token aus dem Zeichenstrom entfernt.
40
- #
41
- # === Mögliche Verlinkung
42
- # Erwartet:: Daten des Typs *Token* z.B. von Tokenizer
43
- # Erzeugt:: Leitet Token weiter und wandelt erkannte Abkürzungen in den Typ *Word* z.B. für Wordsearcher
44
- #
45
- # === Parameter
46
- # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
47
- # Alle anderen Parameter müssen zwingend angegeben werden.
48
- # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
49
- # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
50
- # <b>source</b>:: siehe allgemeine Beschreibung des Dictionary
51
- # <b><i>mode</i></b>:: (Standard: all) siehe allgemeine Beschreibung des Dictionary
52
- #
53
- # === Beispiele
54
- # Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration <tt>t1.cfg</tt>
55
- # meeting:
56
- # attendees:
57
- # - textreader: { out: lines, files: '$(files)' }
58
- # - tokenizer: { in: lines, out: token }
59
- # - abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
60
- # - debugger: { in: abbrev, prompt: 'out>' }
61
- # ergibt die Ausgabe über den Debugger: <tt>lingo -c t1 test.txt</tt>
62
- # out> *FILE('test.txt')
63
- # out> :Dies/WORD:
64
- # out> :ist/WORD:
65
- # out> <ggf. = [(gegebenenfalls/w)]>
66
- # out> :eine/WORD:
67
- # out> :Abk³rzung/WORD:
68
- # out> :./PUNC:
69
- # out> *EOL('test.txt')
70
- # out> *EOF('test.txt')
71
-
72
- class Attendee::Abbreviator < BufferedAttendee
73
-
74
- protected
75
-
76
- def init
77
- # Wörterbuch bereitstellen
78
- src = get_array('source')
79
- mod = get_key('mode', 'all')
80
- @dic = Dictionary.new({'source'=>src, 'mode'=>mod}, @lingo)
81
- end
29
+ class Attendee
82
30
 
83
- def control(cmd, par)
84
- @dic.report.each_pair { |key, value| set(key, value) } if cmd == STR_CMD_STATUS
31
+ # Die Erkennung von Abkürzungen kann auf vielfältige Weise erfolgen. In jedem Fall
32
+ # sollte eine sichere Unterscheidung von einem Satzende-Punkt möglich sein.
33
+ # Der in Lingo gewählte Ansatz befreit den Tokenizer von dieser Arbeit und konzentriert
34
+ # die Erkennung in diesem Attendee.
35
+ # Sobald der Abbreviator im Datenstrom auf ein Punkt trifft (Token = <tt>:./PUNC:</tt>),
36
+ # prüft er das vorhergehende Token auf eine gültige Abkürzung im Abkürzungs-Wörterbuch.
37
+ # Wird es als Abkürzung erkannt, dann wird das Token in ein Word gewandelt und das
38
+ # Punkt-Token aus dem Zeichenstrom entfernt.
39
+ #
40
+ # === Mögliche Verlinkung
41
+ # Erwartet:: Daten des Typs *Token* z.B. von Tokenizer
42
+ # Erzeugt:: Leitet Token weiter und wandelt erkannte Abkürzungen in den Typ *Word* z.B. für Wordsearcher
43
+ #
44
+ # === Parameter
45
+ # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
46
+ # Alle anderen Parameter müssen zwingend angegeben werden.
47
+ # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
48
+ # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
49
+ # <b>source</b>:: siehe allgemeine Beschreibung des Dictionary
50
+ # <b><i>mode</i></b>:: (Standard: all) siehe allgemeine Beschreibung des Dictionary
51
+ #
52
+ # === Beispiele
53
+ # Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration <tt>t1.cfg</tt>
54
+ # meeting:
55
+ # attendees:
56
+ # - text_reader: { out: lines, files: '$(files)' }
57
+ # - tokenizer: { in: lines, out: token }
58
+ # - abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
59
+ # - debugger: { in: abbrev, prompt: 'out>' }
60
+ # ergibt die Ausgabe über den Debugger: <tt>lingo -c t1 test.txt</tt>
61
+ # out> *FILE('test.txt')
62
+ # out> :Dies/WORD:
63
+ # out> :ist/WORD:
64
+ # out> <ggf. = [(gegebenenfalls/w)]>
65
+ # out> :eine/WORD:
66
+ # out> :Abk³rzung/WORD:
67
+ # out> :./PUNC:
68
+ # out> *EOL('test.txt')
69
+ # out> *EOF('test.txt')
85
70
 
86
- # Jedes Control-Object ist auch Auslöser der Verarbeitung
87
- process_buffer
88
- end
71
+ class Abbreviator < BufferedAttendee
89
72
 
90
- private
73
+ protected
91
74
 
92
- def process_buffer?
93
- @buffer[-1].kind_of?(Token) && @buffer[-1].form == CHAR_PUNCT
94
- end
75
+ def init
76
+ set_dic
77
+ end
95
78
 
96
- def process_buffer
97
- if @buffer.size < 2
98
- forward_buffer
99
- return
79
+ def control(cmd, par)
80
+ @dic.report.each_pair { |key, value| set(key, value) } if cmd == STR_CMD_STATUS
81
+
82
+ # Jedes Control-Object ist auch Auslöser der Verarbeitung
83
+ process_buffer
100
84
  end
101
85
 
102
- # Wort vor dem Punkt im Abkürzungswörterbuch suchen
103
- if @buffer[-2].kind_of?(Token)
104
- inc('Anzahl gesuchter Abkürzungen')
105
- abbr = @dic.find_word(@buffer[-2].form)
106
- if abbr.attr == WA_IDENTIFIED
107
- inc('Anzahl gefundener Abkürzungen')
108
- abbr.form += CHAR_PUNCT
109
- @buffer[-2] = abbr
110
- @buffer.delete_at(-1)
86
+ private
87
+
88
+ def process_buffer?
89
+ @buffer[-1].kind_of?(Token) && @buffer[-1].form == CHAR_PUNCT
90
+ end
91
+
92
+ def process_buffer
93
+ if @buffer.size < 2
94
+ forward_buffer
95
+ return
96
+ end
97
+
98
+ # Wort vor dem Punkt im Abkürzungswörterbuch suchen
99
+ if @buffer[-2].kind_of?(Token)
100
+ inc('Anzahl gesuchter Abkürzungen')
101
+ abbr = @dic.find_word(@buffer[-2].form)
102
+ if abbr.identified?
103
+ inc('Anzahl gefundener Abkürzungen')
104
+ abbr.form += CHAR_PUNCT
105
+ @buffer[-2] = abbr
106
+ @buffer.delete_at(-1)
107
+ end
111
108
  end
109
+
110
+ forward_buffer
112
111
  end
113
112
 
114
- forward_buffer
115
113
  end
116
114
 
117
115
  end
@@ -1,109 +1,110 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # LINGO ist ein Indexierungssystem mit Grundformreduktion, Kompositumzerlegung,
5
- # Mehrworterkennung und Relationierung.
6
- #
7
- # Copyright (C) 2005-2007 John Vorhauer
8
- # Copyright (C) 2007-2011 John Vorhauer, Jens Wille
9
- #
10
- # This program is free software; you can redistribute it and/or modify it under
11
- # the terms of the GNU Affero General Public License as published by the Free
12
- # Software Foundation; either version 3 of the License, or (at your option)
13
- # any later version.
14
- #
15
- # This program is distributed in the hope that it will be useful, but WITHOUT
16
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
- # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18
- # details.
19
- #
20
- # You should have received a copy of the GNU Affero General Public License along
21
- # with this program; if not, write to the Free Software Foundation, Inc.,
22
- # 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
23
- #
24
- # For more information visit http://www.lex-lingo.de or contact me at
25
- # welcomeATlex-lingoDOTde near 50°55'N+6°55'E.
26
- #
27
- # Lex Lingo rules from here on
4
+ ###############################################################################
5
+ # #
6
+ # Lingo -- A full-featured automatic indexing system #
7
+ # #
8
+ # Copyright (C) 2005-2007 John Vorhauer #
9
+ # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
+ # #
11
+ # Lingo is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
28
25
  #++
29
26
 
30
27
  class Lingo
31
28
 
32
- # Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei
33
- # einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den
34
- # letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom
35
- # eingeschleust werden, um Schritt für Schritt zu schauen, durch welchen Attendee das Ergebnis
36
- # verfälscht wird um so den Fehler einzugrenzen und schließlich zu lösen.
37
- #
38
- # Der Debugger wird jedoch auch gerne für die Verfolgung der Verarbeitung am Bildschirm verwendet.
39
- #
40
- # Achtung: Um Irritationen bei der Anwendung mehrerer Debugger zu vermeiden wird empfohlen, den
41
- # Debugger in der Konfiguration immer unmittelbar nach dem Attendee zu platzieren, dessen Ausgabe
42
- # debugt werden soll. Ansonsten kann es zu scheinbar unerklärlichen Interferrenzen bei der Ausgabe
43
- # kommen.
44
- #
45
- # === Mögliche Verlinkung
46
- # Erwartet:: Daten beliebigen Typs
47
- #
48
- # === Parameter
49
- # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
50
- # Alle anderen Parameter müssen zwingend angegeben werden.
51
- # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
52
- # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
53
- # <b><i>eval</i></b>:: (Standard: true) Gibt eine Bedingung an, die erfüllt sein muss, damit ein
54
- # Datenobjekt ausgegeben wird (siehe Beschreibung Objectfilter)
55
- # <b><i>ceval</i></b>:: (Standard: true) Gibt eiune Bedingung an, die erfüllt sein muss, damit ein
56
- # Kommandoobjekt ausgegeben wird.
57
- # <b><i>prompt</i></b>:: (Standard: 'lex:) ') Gibt an, mit welchem Prefix die Ausgabe versehen werden
58
- # soll. Insbesondere wenn mit mehreren Debuggern gearbeitet wird, sollte dies
59
- # genutzt werden.
60
- #
61
- # === Beispiele
62
- # Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des Textwriters mit der Ablaufkonfiguration <tt>t1.cfg</tt>
63
- # meeting:
64
- # attendees:
65
- # - textreader: { out: lines, files: '$(files)' }
66
- # - debugger: { in: lines, prompt: 'LINES:) ' }
67
- # - tokenizer: { in: lines, out: token }
68
- # - debugger: { in: token, prompt: 'TOKEN:) ' }
69
- # ergibt die Ausgabe
70
- # LINES:) *FILE('test.txt')
71
- # TOKEN:) *FILE('test.txt')
72
- # LINES:) "Der Debugger kann was."
73
- # TOKEN:) :Der/WORD:
74
- # TOKEN:) :Debugger/WORD:
75
- # TOKEN:) :kann/WORD:
76
- # TOKEN:) :was/WORD:
77
- # TOKEN:) :./PUNC:
78
- # TOKEN:) *EOL('test.txt')
79
- # LINES:) "Lingo auch :o)"
80
- # TOKEN:) :Lingo/WORD:
81
- # TOKEN:) :auch/WORD:
82
- # TOKEN:) ::/PUNC:
83
- # TOKEN:) :o/WORD:
84
- # TOKEN:) :)/OTHR:
85
- # TOKEN:) *EOL('test.txt')
86
- # LINES:) *EOF('test.txt')
87
- # TOKEN:) *EOF('test.txt')
29
+ class Attendee
88
30
 
89
- class Attendee::Debugger < Attendee
31
+ # Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei
32
+ # einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den
33
+ # letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom
34
+ # eingeschleust werden, um Schritt für Schritt zu schauen, durch welchen Attendee das Ergebnis
35
+ # verfälscht wird um so den Fehler einzugrenzen und schließlich zu lösen.
36
+ #
37
+ # Der Debugger wird jedoch auch gerne für die Verfolgung der Verarbeitung am Bildschirm verwendet.
38
+ #
39
+ # Achtung: Um Irritationen bei der Anwendung mehrerer Debugger zu vermeiden wird empfohlen, den
40
+ # Debugger in der Konfiguration immer unmittelbar nach dem Attendee zu platzieren, dessen Ausgabe
41
+ # debugt werden soll. Ansonsten kann es zu scheinbar unerklärlichen Interferrenzen bei der Ausgabe
42
+ # kommen.
43
+ #
44
+ # === Mögliche Verlinkung
45
+ # Erwartet:: Daten beliebigen Typs
46
+ #
47
+ # === Parameter
48
+ # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
49
+ # Alle anderen Parameter müssen zwingend angegeben werden.
50
+ # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
51
+ # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
52
+ # <b><i>eval</i></b>:: (Standard: true) Gibt eine Bedingung an, die erfüllt sein muss, damit ein
53
+ # Datenobjekt ausgegeben wird (siehe Beschreibung Objectfilter)
54
+ # <b><i>ceval</i></b>:: (Standard: true) Gibt eiune Bedingung an, die erfüllt sein muss, damit ein
55
+ # Kommandoobjekt ausgegeben wird.
56
+ # <b><i>prompt</i></b>:: (Standard: 'lex:) ') Gibt an, mit welchem Prefix die Ausgabe versehen werden
57
+ # soll. Insbesondere wenn mit mehreren Debuggern gearbeitet wird, sollte dies
58
+ # genutzt werden.
59
+ #
60
+ # === Beispiele
61
+ # Bei der Verarbeitung der oben angegebenen Funktionsbeschreibung des Textwriters mit der Ablaufkonfiguration <tt>t1.cfg</tt>
62
+ # meeting:
63
+ # attendees:
64
+ # - text_reader: { out: lines, files: '$(files)' }
65
+ # - debugger: { in: lines, prompt: 'LINES:) ' }
66
+ # - tokenizer: { in: lines, out: token }
67
+ # - debugger: { in: token, prompt: 'TOKEN:) ' }
68
+ # ergibt die Ausgabe
69
+ # LINES:) *FILE('test.txt')
70
+ # TOKEN:) *FILE('test.txt')
71
+ # LINES:) "Der Debugger kann was."
72
+ # TOKEN:) :Der/WORD:
73
+ # TOKEN:) :Debugger/WORD:
74
+ # TOKEN:) :kann/WORD:
75
+ # TOKEN:) :was/WORD:
76
+ # TOKEN:) :./PUNC:
77
+ # TOKEN:) *EOL('test.txt')
78
+ # LINES:) "Lingo auch :o)"
79
+ # TOKEN:) :Lingo/WORD:
80
+ # TOKEN:) :auch/WORD:
81
+ # TOKEN:) ::/PUNC:
82
+ # TOKEN:) :o/WORD:
83
+ # TOKEN:) :)/OTHR:
84
+ # TOKEN:) *EOL('test.txt')
85
+ # LINES:) *EOF('test.txt')
86
+ # TOKEN:) *EOF('test.txt')
90
87
 
91
- protected
88
+ class Debugger < self
92
89
 
93
- def init
94
- @obj_eval = get_key('eval', 'true')
95
- @cmd_eval = get_key('ceval', 'true')
96
- @prompt = get_key('prompt', 'lex:) ')
97
- end
90
+ protected
98
91
 
99
- def control(cmd, par)
100
- if cmd!=STR_CMD_STATUS
101
- @lingo.config.stderr.puts "#{@prompt} #{AgendaItem.new(cmd, par).inspect}" if eval(@cmd_eval)
92
+ def init
93
+ @obj_eval = get_key('eval', 'true')
94
+ @cmd_eval = get_key('ceval', 'true')
95
+ @prompt = get_key('prompt', 'lex:) ')
96
+ end
97
+
98
+ def control(cmd, par)
99
+ if cmd != STR_CMD_STATUS
100
+ @lingo.warn "#{@prompt} #{AgendaItem.new(cmd, par).inspect}" if eval(@cmd_eval)
101
+ end
102
+ end
103
+
104
+ def process(obj)
105
+ @lingo.warn "#{@prompt} #{obj.inspect}" if eval(@obj_eval)
102
106
  end
103
- end
104
107
 
105
- def process(obj)
106
- @lingo.config.stderr.puts "#{@prompt} #{obj.inspect}" if eval(@obj_eval)
107
108
  end
108
109
 
109
110
  end
@@ -1,99 +1,92 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  #--
4
- # LINGO ist ein Indexierungssystem mit Grundformreduktion, Kompositumzerlegung,
5
- # Mehrworterkennung und Relationierung.
6
- #
7
- # Copyright (C) 2005-2007 John Vorhauer
8
- # Copyright (C) 2007-2011 John Vorhauer, Jens Wille
9
- #
10
- # This program is free software; you can redistribute it and/or modify it under
11
- # the terms of the GNU Affero General Public License as published by the Free
12
- # Software Foundation; either version 3 of the License, or (at your option)
13
- # any later version.
14
- #
15
- # This program is distributed in the hope that it will be useful, but WITHOUT
16
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
- # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18
- # details.
19
- #
20
- # You should have received a copy of the GNU Affero General Public License along
21
- # with this program; if not, write to the Free Software Foundation, Inc.,
22
- # 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
23
- #
24
- # For more information visit http://www.lex-lingo.de or contact me at
25
- # welcomeATlex-lingoDOTde near 50°55'N+6°55'E.
26
- #
27
- # Lex Lingo rules from here on
4
+ ###############################################################################
5
+ # #
6
+ # Lingo -- A full-featured automatic indexing system #
7
+ # #
8
+ # Copyright (C) 2005-2007 John Vorhauer #
9
+ # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
10
+ # #
11
+ # Lingo is free software; you can redistribute it and/or modify it under the #
12
+ # terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # Lingo is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with Lingo. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
28
25
  #++
29
26
 
30
27
  class Lingo
31
28
 
32
- # Komposita, also zusammengesetzte Wörter, sind eine Spezialität der deutschen Sprache
33
- # (z.B. Indexierungssystem oder Kompositumerkennung).
34
- # Könnte man alle Kombinationen in den Wörterbüchern hinterlegen, dann würde der
35
- # Wordsearcher die Erkennung bereits erledigt haben. Die hohe Anzahl der möglichen
36
- # Kombinationen verbietet jedoch einen solchen Ansatz aufgrund des immensen Pflegeaufwands,
37
- # eine algorithmische Lösung erscheint sinnvoller.
38
- # Der Decomposer wertet alle vom Wordsearcher nicht erkannten Wörter aus und prüft sie
39
- # auf Kompositum.
40
- #
41
- # === Mögliche Verlinkung
42
- # Erwartet:: Daten vom Typ *Word* (andere werden einfach durchgereicht) z.B. von Wordsearcher
43
- # Erzeugt:: Daten vom Typ *Word* (erkannte Komposita werden entsprechend erweitert) z.B. für Synonymer, Ocr_variator, Multiworder, Sequencer, Noneword_filter, Vector_filter
44
- #
45
- # === Parameter
46
- # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
47
- # Alle anderen Parameter müssen zwingend angegeben werden.
48
- # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
49
- # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
50
- # <b>source</b>:: siehe allgemeine Beschreibung des Dictionary
51
- # <b><i>mode</i></b>:: (Standard: all) siehe allgemeine Beschreibung des Dictionary
52
- #
53
- # === Beispiele
54
- # Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration <tt>t1.cfg</tt>
55
- # meeting:
56
- # attendees:
57
- # - textreader: { out: lines, files: '$(files)' }
58
- # - tokenizer: { in: lines, out: token }
59
- # - abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
60
- # - wordsearcher: { in: abbrev, out: words, source: 'sys-dic' }
61
- # - decomposer: { in: words, out: comps, source: 'sys-dic' }
62
- # - debugger: { in: comps, prompt: 'out>' }
63
- # ergibt die Ausgabe über den Debugger: <tt>lingo -c t1 test.txt</tt>
64
- # out> *FILE('test.txt')
65
- # out> <Lingo|?>
66
- # out> :,/PUNC:
67
- # out> <ein = [(ein/w)]>
68
- # out> <Indexierungssystem|KOM = [(indexierungssystem/k), (indexierung/s), (system/s)]>
69
- # out> <mit = [(mit/w)]>
70
- # out> <Kompositumerkennung|KOM = [(kompositumerkennung/k), (erkennung/s), (kompositum/s)]>
71
- # out> :./PUNC:
72
- # out> *EOL('test.txt')
73
- # out> *EOF('test.txt')
29
+ class Attendee
74
30
 
75
- class Attendee::Decomposer < Attendee
31
+ # Komposita, also zusammengesetzte Wörter, sind eine Spezialität der deutschen Sprache
32
+ # (z.B. Indexierungssystem oder Kompositumerkennung).
33
+ # Könnte man alle Kombinationen in den Wörterbüchern hinterlegen, dann würde der
34
+ # Wordsearcher die Erkennung bereits erledigt haben. Die hohe Anzahl der möglichen
35
+ # Kombinationen verbietet jedoch einen solchen Ansatz aufgrund des immensen Pflegeaufwands,
36
+ # eine algorithmische Lösung erscheint sinnvoller.
37
+ # Der Decomposer wertet alle vom Wordsearcher nicht erkannten Wörter aus und prüft sie
38
+ # auf Kompositum.
39
+ #
40
+ # === Mögliche Verlinkung
41
+ # Erwartet:: Daten vom Typ *Word* (andere werden einfach durchgereicht) z.B. von Wordsearcher
42
+ # Erzeugt:: Daten vom Typ *Word* (erkannte Komposita werden entsprechend erweitert) z.B. für Synonymer, Ocr_variator, Multiworder, Sequencer, Noneword_filter, Vector_filter
43
+ #
44
+ # === Parameter
45
+ # Kursiv dargestellte Parameter sind optional (ggf. mit Angabe der Voreinstellung).
46
+ # Alle anderen Parameter müssen zwingend angegeben werden.
47
+ # <b>in</b>:: siehe allgemeine Beschreibung des Attendee
48
+ # <b>out</b>:: siehe allgemeine Beschreibung des Attendee
49
+ # <b>source</b>:: siehe allgemeine Beschreibung des Dictionary
50
+ # <b><i>mode</i></b>:: (Standard: all) siehe allgemeine Beschreibung des Dictionary
51
+ #
52
+ # === Beispiele
53
+ # Bei der Verarbeitung einer normalen Textdatei mit der Ablaufkonfiguration <tt>t1.cfg</tt>
54
+ # meeting:
55
+ # attendees:
56
+ # - text_reader: { out: lines, files: '$(files)' }
57
+ # - tokenizer: { in: lines, out: token }
58
+ # - abbreviator: { in: token, out: abbrev, source: 'sys-abk' }
59
+ # - word_searcher: { in: abbrev, out: words, source: 'sys-dic' }
60
+ # - decomposer: { in: words, out: comps, source: 'sys-dic' }
61
+ # - debugger: { in: comps, prompt: 'out>' }
62
+ # ergibt die Ausgabe über den Debugger: <tt>lingo -c t1 test.txt</tt>
63
+ # out> *FILE('test.txt')
64
+ # out> <Lingo|?>
65
+ # out> :,/PUNC:
66
+ # out> <ein = [(ein/w)]>
67
+ # out> <Indexierungssystem|KOM = [(indexierungssystem/k), (indexierung/s), (system/s)]>
68
+ # out> <mit = [(mit/w)]>
69
+ # out> <Kompositumerkennung|KOM = [(kompositumerkennung/k), (erkennung/s), (kompositum/s)]>
70
+ # out> :./PUNC:
71
+ # out> *EOL('test.txt')
72
+ # out> *EOF('test.txt')
76
73
 
77
- protected
74
+ class Decomposer < self
78
75
 
79
- def init
80
- # Wörterbuch bereitstellen
81
- src = get_array('source')
82
- mod = get_key('mode', 'all')
83
- @grammar = Grammar.new({'source'=>src, 'mode'=>mod}, @lingo)
84
- end
76
+ protected
85
77
 
86
- def control(cmd, par)
87
- @grammar.report.each_pair { |key, value|
88
- set(key, value)
89
- } if cmd == STR_CMD_STATUS
90
- end
78
+ def init
79
+ set_gra
80
+ end
91
81
 
92
- def process(obj)
93
- if obj.is_a?(Word) && obj.attr == WA_UNKNOWN
94
- obj = @grammar.find_compositum(obj.form)
82
+ def control(cmd, par)
83
+ @gra.report.each { |key, val| set(key, val) } if cmd == STR_CMD_STATUS
95
84
  end
96
- forward(obj)
85
+
86
+ def process(obj)
87
+ forward(obj.is_a?(Word) && obj.unknown? ? @gra.find_compositum(obj.form) : obj)
88
+ end
89
+
97
90
  end
98
91
 
99
92
  end