lingo 1.8.5 → 1.8.6

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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +25 -0
  3. data/README +7 -5
  4. data/Rakefile +58 -55
  5. data/{lingo-call.cfg → config/lingo-call.cfg} +1 -1
  6. data/{lingo.cfg → config/lingo.cfg} +10 -2
  7. data/{lir.cfg → config/lir.cfg} +10 -2
  8. data/{de → dict/de}/lingo-abk.txt +0 -0
  9. data/{de → dict/de}/lingo-dic.txt +0 -0
  10. data/{de → dict/de}/lingo-mul.txt +0 -0
  11. data/{de → dict/de}/lingo-syn.txt +0 -0
  12. data/{de → dict/de}/test_dic.txt +0 -0
  13. data/{de → dict/de}/test_gen.txt +0 -0
  14. data/{de → dict/de}/test_mu2.txt +0 -0
  15. data/{de → dict/de}/test_mul.txt +0 -0
  16. data/{de → dict/de}/test_sgw.txt +0 -0
  17. data/{de → dict/de}/test_syn.txt +0 -0
  18. data/{de → dict/de}/user-dic.txt +0 -0
  19. data/{en → dict/en}/lingo-dic.txt +0 -0
  20. data/{en → dict/en}/lingo-irr.txt +0 -0
  21. data/{en → dict/en}/lingo-mul.txt +0 -0
  22. data/{en → dict/en}/lingo-syn.txt +0 -0
  23. data/{en → dict/en}/lingo-wdn.txt +0 -0
  24. data/{en → dict/en}/user-dic.txt +0 -0
  25. data/{ru → dict/ru}/lingo-dic.txt +0 -0
  26. data/{ru → dict/ru}/lingo-mul.txt +0 -0
  27. data/{ru → dict/ru}/lingo-syn.txt +0 -0
  28. data/{ru → dict/ru}/user-dic.txt +0 -0
  29. data/{de.lang → lang/de.lang} +1 -1
  30. data/{en.lang → lang/en.lang} +0 -0
  31. data/{ru.lang → lang/ru.lang} +0 -0
  32. data/lib/lingo.rb +14 -15
  33. data/lib/lingo/app.rb +4 -2
  34. data/lib/lingo/attendee.rb +23 -43
  35. data/lib/lingo/attendee/abbreviator.rb +5 -5
  36. data/lib/lingo/attendee/debugger.rb +39 -12
  37. data/lib/lingo/attendee/decomposer.rb +3 -4
  38. data/lib/lingo/attendee/dehyphenizer.rb +4 -4
  39. data/lib/lingo/attendee/formatter.rb +1 -3
  40. data/lib/lingo/attendee/multi_worder.rb +3 -4
  41. data/lib/lingo/attendee/noneword_filter.rb +8 -12
  42. data/lib/lingo/attendee/object_filter.rb +6 -3
  43. data/lib/lingo/attendee/sequencer.rb +5 -5
  44. data/lib/lingo/attendee/stemmer.rb +3 -2
  45. data/lib/lingo/attendee/synonymer.rb +3 -4
  46. data/lib/lingo/attendee/text_reader.rb +39 -38
  47. data/lib/lingo/attendee/text_writer.rb +10 -10
  48. data/lib/lingo/attendee/tokenizer.rb +63 -33
  49. data/lib/lingo/attendee/variator.rb +3 -7
  50. data/lib/lingo/attendee/vector_filter.rb +132 -65
  51. data/lib/lingo/attendee/word_searcher.rb +5 -3
  52. data/lib/lingo/buffered_attendee.rb +1 -3
  53. data/lib/lingo/call.rb +4 -3
  54. data/lib/lingo/cli.rb +5 -1
  55. data/lib/lingo/config.rb +11 -5
  56. data/lib/lingo/ctl.rb +3 -3
  57. data/lib/lingo/database.rb +3 -1
  58. data/lib/lingo/database/crypter.rb +1 -3
  59. data/lib/lingo/database/source.rb +3 -1
  60. data/lib/lingo/database/source/key_value.rb +3 -1
  61. data/lib/lingo/database/source/multi_key.rb +3 -1
  62. data/lib/lingo/database/source/multi_value.rb +3 -1
  63. data/lib/lingo/database/source/single_word.rb +3 -1
  64. data/lib/lingo/database/source/word_class.rb +3 -1
  65. data/lib/lingo/debug.rb +5 -5
  66. data/lib/lingo/{agenda_item.rb → deferred_attendee.rb} +21 -12
  67. data/lib/lingo/error.rb +1 -1
  68. data/lib/lingo/language.rb +1 -9
  69. data/lib/lingo/language/dictionary.rb +2 -17
  70. data/lib/lingo/language/grammar.rb +10 -10
  71. data/lib/lingo/language/lexical.rb +2 -0
  72. data/lib/lingo/language/lexical_hash.rb +2 -0
  73. data/lib/lingo/language/token.rb +17 -3
  74. data/lib/lingo/language/word.rb +13 -5
  75. data/lib/lingo/language/word_form.rb +5 -3
  76. data/lib/lingo/progress.rb +2 -2
  77. data/lib/lingo/srv.rb +1 -1
  78. data/lib/lingo/srv/lingosrv.cfg +1 -1
  79. data/lib/lingo/version.rb +1 -1
  80. data/lib/lingo/web.rb +1 -1
  81. data/lib/lingo/web/lingoweb.cfg +1 -1
  82. data/test/attendee/ts_abbreviator.rb +4 -2
  83. data/test/attendee/ts_multi_worder.rb +81 -88
  84. data/test/attendee/ts_noneword_filter.rb +2 -2
  85. data/test/attendee/ts_object_filter.rb +2 -2
  86. data/test/attendee/ts_sequencer.rb +40 -20
  87. data/test/attendee/ts_stemmer.rb +52 -26
  88. data/test/attendee/ts_text_reader.rb +75 -56
  89. data/test/attendee/ts_text_writer.rb +6 -4
  90. data/test/attendee/ts_tokenizer.rb +304 -193
  91. data/test/attendee/ts_vector_filter.rb +242 -9
  92. data/test/ref/artikel.non +3 -0
  93. data/test/ref/artikel.vec +1 -4
  94. data/test/ref/artikel.vef +940 -0
  95. data/test/ref/artikel.ven +0 -3
  96. data/test/ref/artikel.ver +0 -3
  97. data/test/ref/artikel.vet +2580 -0
  98. data/test/ref/lir.non +34 -31
  99. data/test/ref/lir.seq +14 -15
  100. data/test/ref/lir.vec +37 -37
  101. data/test/ref/lir.vef +329 -0
  102. data/test/ref/lir.ven +329 -0
  103. data/test/ref/lir.ver +329 -0
  104. data/test/ref/lir.vet +329 -0
  105. data/test/test_helper.rb +29 -16
  106. data/test/ts_language.rb +6 -47
  107. metadata +74 -87
  108. data/lingo.rb +0 -29
  109. data/spec/spec_helper.rb +0 -5
@@ -30,12 +30,14 @@ require_relative 'database/source'
30
30
 
31
31
  class Lingo
32
32
 
33
+ #--
33
34
  # Die Klasse Database stellt eine einheitliche Schnittstelle auf Lingo-Datenbanken bereit.
34
35
  # Die Identifizierung der Datenbank erfolgt über die ID der Datenbank, so wie sie in der
35
36
  # Sprachkonfigurationsdatei <tt>de.lang</tt> unter <tt>language/dictionary/databases</tt>
36
37
  # hinterlegt ist.
37
38
  #
38
39
  # Das Lesen und Schreiben der Datenbank erfolgt über die Funktionen []() und []=().
40
+ #++
39
41
 
40
42
  class Database
41
43
 
@@ -68,7 +70,7 @@ class Lingo
68
70
  @srcfile = Lingo.find(:dict, config['name'], relax: true)
69
71
  @crypter = config.key?('crypt') && Crypter.new
70
72
 
71
- @val = Hash.new { |h, k| h[k] = [] }
73
+ @val = Hash.nest { [] }
72
74
 
73
75
  begin
74
76
  @stofile = Lingo.find(:store, @srcfile)
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -31,8 +31,6 @@ class Lingo
31
31
 
32
32
  class Database
33
33
 
34
- # Crypter ermöglicht die Ver- und Entschlüsselung von Wörterbüchern
35
-
36
34
  class Crypter
37
35
 
38
36
  def self.digest(key)
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -34,6 +34,7 @@ class Lingo
34
34
 
35
35
  class Database
36
36
 
37
+ #--
37
38
  # Die Klasse Source stellt eine einheitliche Schnittstelle auf die unterschiedlichen Formate
38
39
  # von Wörterbuch-Quelldateien bereit. Die Identifizierung der Quelldatei erfolgt über die ID
39
40
  # der Datei, so wie sie in der Sprachkonfigurationsdatei <tt>de.lang</tt> unter
@@ -44,6 +45,7 @@ class Lingo
44
45
  #
45
46
  # Nicht korrekt erkannte Zeilen werden abgewiesen und in eine Revoke-Datei gespeichert, die
46
47
  # an der Dateiendung <tt>.rev</tt> zu erkennen ist.
48
+ #++
47
49
 
48
50
  class Source
49
51
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2013 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -30,10 +30,12 @@ class Lingo
30
30
 
31
31
  class Source
32
32
 
33
+ #--
33
34
  # Abgeleitet von Source behandelt die Klasse Dateien mit dem Format <tt>KeyValue</tt>.
34
35
  # Eine Zeile <tt>"Fachbegriff*Fachterminus\n"</tt> wird gewandelt in <tt>[ 'fachbegriff', ['fachterminus#s'] ]</tt>.
35
36
  # Die Wortklasse kann über den Parameter <tt>def-wc</tt> beeinflusst werden.
36
37
  # Der Trenner zwischen Schlüssel und Projektion kann über den Parameter <tt>separator</tt> geändert werden.
38
+ #++
37
39
 
38
40
  class KeyValue < self
39
41
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2013 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -30,11 +30,13 @@ class Lingo
30
30
 
31
31
  class Source
32
32
 
33
+ #--
33
34
  # Abgeleitet von Source behandelt die Klasse Dateien mit dem Format <tt>MultiKey</tt>.
34
35
  # Eine Zeile <tt>"Triumph;Sieg;Erfolg\n"</tt> wird gewandelt in <tt>[ 'triumph', ['sieg', 'erfolg'] ]</tt>.
35
36
  # Die Sonderbehandlung erfolgt in der Methode Database#convert, wo daraus Schlüssel-Werte-Paare in der Form
36
37
  # <tt>[ 'sieg', ['triumph'] ]</tt> und <tt>[ 'erfolg', ['triumph'] ]</tt> erzeugt werden.
37
38
  # Der Trenner zwischen Schlüssel und Projektion kann über den Parameter <tt>separator</tt> geändert werden.
39
+ #++
38
40
 
39
41
  class MultiKey < self
40
42
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2013 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -30,9 +30,11 @@ class Lingo
30
30
 
31
31
  class Source
32
32
 
33
+ #--
33
34
  # Abgeleitet von Source behandelt die Klasse Dateien mit dem Format <tt>MultiValue</tt>.
34
35
  # Eine Zeile <tt>"Triumph;Sieg;Erfolg\n"</tt> wird gewandelt in <tt>[ nil, ['triumph', 'sieg', 'erfolg'] ]</tt>.
35
36
  # Der Trenner zwischen Schlüssel und Projektion kann über den Parameter <tt>separator</tt> geändert werden.
37
+ #++
36
38
 
37
39
  class MultiValue < self
38
40
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -30,9 +30,11 @@ class Lingo
30
30
 
31
31
  class Source
32
32
 
33
+ #--
33
34
  # Abgeleitet von Source behandelt die Klasse Dateien mit dem Format <tt>SingleWord</tt>.
34
35
  # Eine Zeile <tt>"Fachbegriff\n"</tt> wird gewandelt in <tt>[ 'fachbegriff', ['#s'] ]</tt>.
35
36
  # Die Wortklasse kann über den Parameter <tt>def-wc</tt> beeinflusst werden.
37
+ #++
36
38
 
37
39
  class SingleWord < self
38
40
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2013 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -30,9 +30,11 @@ class Lingo
30
30
 
31
31
  class Source
32
32
 
33
+ #--
33
34
  # Abgeleitet von Source behandelt die Klasse Dateien mit dem Format <tt>WordClass</tt>.
34
35
  # Eine Zeile <tt>"essen,essen #v essen #o esse #s\n"</tt> wird gewandelt in <tt>[ 'essen', ['esse#s', 'essen#v', 'essen#o'] ]</tt>.
35
36
  # Der Trenner zwischen Schlüssel und Projektion kann über den Parameter <tt>separator</tt> geändert werden.
37
+ #++
36
38
 
37
39
  class WordClass < self
38
40
 
@@ -35,7 +35,7 @@ class Lingo
35
35
 
36
36
  PS_RE = File.executable?(PS_COMMAND) ? %r{\A#{ENV['LINGO_DEBUG_PS']}\z} : nil
37
37
 
38
- PS_NO_HEADING = Hash.new { |h, k| h[k] = true; false }
38
+ PS_NO_HEADING = Hash.seen
39
39
 
40
40
  def ps(name)
41
41
  system(PS_COMMAND,
@@ -62,10 +62,10 @@ class Lingo
62
62
  base += "-#{mode}" if mode && !mode.empty?
63
63
 
64
64
  {
65
- :txt => :FlatPrinter,
66
- :lines => :FlatPrinterWithLineNumbers,
67
- :html => :GraphHtmlPrinter,
68
- :stack => :CallStackPrinter
65
+ txt: :FlatPrinter,
66
+ lines: :FlatPrinterWithLineNumbers,
67
+ html: :GraphHtmlPrinter,
68
+ stack: :CallStackPrinter
69
69
  }.each { |ext, name|
70
70
  File.open("#{base}.#{ext}", 'a+', encoding: ENC) { |f|
71
71
  RubyProf.const_get(name).new(result).print(f)
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -26,26 +26,35 @@
26
26
 
27
27
  class Lingo
28
28
 
29
- class AgendaItem
29
+ class DeferredAttendee < Attendee
30
30
 
31
- include Comparable
31
+ def self.enhance(base)
32
+ base.instance_variable_set(:@deferr_buffer, [])
32
33
 
33
- attr_reader :cmd, :param
34
+ def base.command(*args)
35
+ @deferr_buffer << buf = [args]
34
36
 
35
- def initialize(cmd, param = nil)
36
- @cmd, @param = cmd || '', param || ''
37
+ args.first != :EOT ? buf << control_deferred(*args) :
38
+ flush_deferred { |block|
39
+ @deferr_buffer.each { |command_args, control_args|
40
+ super(*command_args)
41
+ block[*control_args] if control_args
42
+ }
43
+ }
44
+ end
37
45
  end
38
46
 
39
- def <=>(other)
40
- other.is_a?(self.class) ? to_a <=> other.to_a : 1
47
+ def initialize(config, lingo)
48
+ self.class.enhance(self)
49
+ super
41
50
  end
42
51
 
43
- def to_a
44
- [cmd, param]
52
+ def control_deferred(cmd, *)
53
+ raise NotImplementedError, 'must be implemented by subclass'
45
54
  end
46
55
 
47
- def inspect
48
- "*#{cmd.upcase}('#{param}')"
56
+ def flush_deferred(&block)
57
+ raise NotImplementedError, 'must be implemented by subclass'
49
58
  end
50
59
 
51
60
  end
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -37,26 +37,18 @@ class Lingo
37
37
 
38
38
  module Language
39
39
 
40
- # String-Konstanten im Datenstrom
41
40
  CHAR_PUNCT = '.'
42
41
 
43
42
  TA_WORD = 'WORD'
44
43
  TA_PUNCTUATION = 'PUNC'
45
44
  TA_OTHER = 'OTHR'
46
45
 
47
- # Standardattribut bei der Initialisierung eines Word-Objektes
48
46
  WA_UNSET = '-'
49
- # Status, nachdem das Word im Wörterbuch gefunden wurde
50
47
  WA_IDENTIFIED = 'IDF'
51
- # Status, wenn das Word nicht gefunden werden konnte
52
48
  WA_UNKNOWN = '?'
53
- # Wort ist als Kompositum erkannt worden
54
49
  WA_COMPOUND = 'KOM'
55
- # Wort ist eine Mehrwortgruppe
56
50
  WA_MULTIWORD = 'MUL'
57
- # Wort ist eine Mehrwortgruppe
58
51
  WA_SEQUENCE = 'SEQ'
59
- # Word ist unbekannt, jedoch Teil einer Mehrwortgruppe
60
52
  WA_UNKMULPART = 'MU?'
61
53
 
62
54
  LA_SORTORDER = [
@@ -64,12 +64,8 @@ class Lingo
64
64
  @src.each { |i| i.close }
65
65
  end
66
66
 
67
- # _dic_.find_word( _aString_ ) -> _aNewWord_
68
- #
69
- # Erstellt aus dem String ein Wort und sucht nach diesem im Wörterbuch.
70
- def find_word(str)
71
- (@_word ||= {})[str] ||=
72
- Word.new(str, WA_UNKNOWN).identify(select_with_suffix(str))
67
+ def find_word(str, token = nil)
68
+ Word.new(str, WA_UNKNOWN, token).identify(select_with_suffix(str))
73
69
  end
74
70
 
75
71
  def find_synonyms(obj, syn = [], com = true)
@@ -86,9 +82,6 @@ class Lingo
86
82
  syn
87
83
  end
88
84
 
89
- # _dic_.select( _aString_ ) -> _ArrayOfLexicals_
90
- #
91
- # Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+)
92
85
  def select(str, lex = [])
93
86
  @src.each { |src|
94
87
  lex.concat(src[str] || next)
@@ -99,10 +92,6 @@ class Lingo
99
92
  lex
100
93
  end
101
94
 
102
- # _dic_.select_with_suffix( _aString_ ) -> _ArrayOfLexicals_
103
- #
104
- # Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+).
105
- # Sucht dabei auch Wörter, die um wortklassenspezifische Suffixe bereinigt wurden.
106
95
  def select_with_suffix(str)
107
96
  select(str) { |lex|
108
97
  each_affix(str) { |form, attr|
@@ -117,10 +106,6 @@ class Lingo
117
106
  }
118
107
  end
119
108
 
120
- # _dic_.select_with_infix( _aString_ ) -> _ArrayOfLexicals_
121
- #
122
- # Sucht alle Wörterbücher durch und gibt den ersten Treffer zurück (+mode = first+), oder alle Treffer (+mode = all+).
123
- # Sucht dabei auch Wörter, die eine Fugung am Ende haben.
124
109
  def select_with_infix(str)
125
110
  select(str) { |lex|
126
111
  each_affix(str, :infix) { |form, _| select(form, lex) }
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2013 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,10 +28,12 @@ class Lingo
28
28
 
29
29
  module Language
30
30
 
31
+ #--
31
32
  # Die Klasse Grammar beinhaltet grammatikalische Spezialitäten einer Sprache. Derzeit findet die
32
33
  # Kompositumerkennung hier ihren Platz, die mit der Methode find_compound aufgerufen werden kann.
33
34
  # Die Klasse Grammar wird genau wie ein Dictionary initialisiert. Das bei der Initialisierung angegebene Wörterbuch ist Grundlage
34
35
  # für die Erkennung der Kompositumteile.
36
+ #++
35
37
 
36
38
  class Grammar
37
39
 
@@ -46,7 +48,9 @@ class Lingo
46
48
  def initialize(config, lingo)
47
49
  @dic, @suggestions = Dictionary.new(config, lingo), []
48
50
 
49
- lingo.deprecate(:compositum, :compound, self) if lingo.dictionary_config.key?('compositum')
51
+ if lingo.dictionary_config.key?('compositum')
52
+ lingo.config.deprecate(:compositum, :compound, self)
53
+ end
50
54
 
51
55
  cfg = lingo.dictionary_config['compound'] ||
52
56
  lingo.dictionary_config['compositum'] # DEPRECATE compositum
@@ -57,15 +61,19 @@ class Lingo
57
61
  instance_variable_set("@#{k}", cfg.fetch(k.to_s.tr('_', '-'), v).to_i)
58
62
  }
59
63
 
64
+ #--
60
65
  # Die Wortklasse eines Kompositum-Wortteils kann separat gekennzeichnet
61
66
  # werden, um sie von Wortklassen normaler Wörter unterscheiden zu
62
67
  # können z.B. Hausmeister => ['haus/s', 'meister/s'] oder Hausmeister
63
68
  # => ['haus/s+', 'meister/s+'] mit append-wordclass = '+'
69
+ #++
64
70
  @append_wc = cfg.fetch('append-wordclass', '')
65
71
 
72
+ #--
66
73
  # Bestimmte Sequenzen können als ungültige Komposita erkannt werden,
67
74
  # z.B. ist ein Kompositum aus zwei Adjetiven kein Kompositum, also
68
75
  # skip-sequence = 'aa'
76
+ #++
69
77
  @sequences = cfg.fetch('skip-sequences', []).map! { |i| i.downcase }
70
78
  end
71
79
 
@@ -73,11 +81,6 @@ class Lingo
73
81
  @dic.close
74
82
  end
75
83
 
76
- # find_compound(str) -> word wenn level=1
77
- # find_compound(str) -> [lex, sta] wenn level!=1
78
- #
79
- # find_compound arbeitet in verschiedenen Leveln, da die Methode auch rekursiv aufgerufen wird. Ein Level größer 1
80
- # entspricht daher einem rekursiven Aufruf
81
84
  def find_compound(str, level = 1, tail = false)
82
85
  level == 1 ? (@_compound ||= {})[str] ||=
83
86
  permute_compound(Word.new(str, WA_UNKNOWN), str, level, tail) :
@@ -120,9 +123,6 @@ class Lingo
120
123
  ret
121
124
  end
122
125
 
123
- # test_compound() -> [lex, sta, seq]
124
- #
125
- # Testet einen definiert zerlegten String auf Kompositum
126
126
  def test_compound(fstr, infix, bstr, level = 1, tail = false)
127
127
  sta, seq, empty = [fstr.length, bstr.length], %w[? ?], [[], [], '']
128
128
 
@@ -28,11 +28,13 @@ class Lingo
28
28
 
29
29
  module Language
30
30
 
31
+ #--
31
32
  # Die Klasse Lexical, abgeleitet von der Klasse WordForm, stellt den Container
32
33
  # für eine Grundform eines Wortes bereit, welches mit der Wortklasse versehen ist.
33
34
  #
34
35
  # Wird z.B. aus dem Wörterbuch eine Grundform gelesen, so wird dies in Form eines
35
36
  # Lexical-Objektes zurückgegeben, z.B. Lexical.new('Rennen', 'S') -> (rennen/s)
37
+ #++
36
38
 
37
39
  class Lexical < WordForm
38
40
 
@@ -28,9 +28,11 @@ class Lingo
28
28
 
29
29
  module Language
30
30
 
31
+ #--
31
32
  # Die Klasse LexicalHash ermöglicht den Zugriff auf die Lingodatenbanken. Im Gegensatz zur
32
33
  # Klasse Database, welche nur Strings als Ergebnis zurück gibt, wird hier als Ergebnis ein
33
34
  # Array von Lexical-Objekten zurück gegeben.
35
+ #++
34
36
 
35
37
  class LexicalHash
36
38