lingo 1.8.0

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 (108) hide show
  1. data/.rspec +1 -0
  2. data/COPYING +663 -0
  3. data/ChangeLog +754 -0
  4. data/README +322 -0
  5. data/Rakefile +100 -0
  6. data/TODO +28 -0
  7. data/bin/lingo +5 -0
  8. data/bin/lingoctl +6 -0
  9. data/de.lang +121 -0
  10. data/de/lingo-abk.txt +74 -0
  11. data/de/lingo-dic.txt +56822 -0
  12. data/de/lingo-mul.txt +3209 -0
  13. data/de/lingo-syn.txt +14841 -0
  14. data/de/test_dic.txt +24 -0
  15. data/de/test_mul.txt +17 -0
  16. data/de/test_mul2.txt +2 -0
  17. data/de/test_singleword.txt +2 -0
  18. data/de/test_syn.txt +4 -0
  19. data/de/test_syn2.txt +1 -0
  20. data/de/user-dic.txt +10 -0
  21. data/en.lang +113 -0
  22. data/en/lingo-dic.txt +55434 -0
  23. data/en/lingo-mul.txt +456 -0
  24. data/en/user-dic.txt +5 -0
  25. data/info/Objekte.png +0 -0
  26. data/info/Typen.png +0 -0
  27. data/info/database.png +0 -0
  28. data/info/db_small.png +0 -0
  29. data/info/download.png +0 -0
  30. data/info/gpl-hdr.txt +27 -0
  31. data/info/kerze.png +0 -0
  32. data/info/language.png +0 -0
  33. data/info/lingo.png +0 -0
  34. data/info/logo.png +0 -0
  35. data/info/meeting.png +0 -0
  36. data/info/types.png +0 -0
  37. data/lib/lingo.rb +321 -0
  38. data/lib/lingo/attendee/abbreviator.rb +119 -0
  39. data/lib/lingo/attendee/debugger.rb +111 -0
  40. data/lib/lingo/attendee/decomposer.rb +101 -0
  41. data/lib/lingo/attendee/dehyphenizer.rb +167 -0
  42. data/lib/lingo/attendee/multiworder.rb +301 -0
  43. data/lib/lingo/attendee/noneword_filter.rb +103 -0
  44. data/lib/lingo/attendee/objectfilter.rb +86 -0
  45. data/lib/lingo/attendee/sequencer.rb +190 -0
  46. data/lib/lingo/attendee/synonymer.rb +105 -0
  47. data/lib/lingo/attendee/textreader.rb +237 -0
  48. data/lib/lingo/attendee/textwriter.rb +196 -0
  49. data/lib/lingo/attendee/tokenizer.rb +218 -0
  50. data/lib/lingo/attendee/variator.rb +185 -0
  51. data/lib/lingo/attendee/vector_filter.rb +158 -0
  52. data/lib/lingo/attendee/wordsearcher.rb +96 -0
  53. data/lib/lingo/attendees.rb +289 -0
  54. data/lib/lingo/cli.rb +62 -0
  55. data/lib/lingo/config.rb +104 -0
  56. data/lib/lingo/const.rb +131 -0
  57. data/lib/lingo/ctl.rb +173 -0
  58. data/lib/lingo/database.rb +587 -0
  59. data/lib/lingo/language.rb +530 -0
  60. data/lib/lingo/modules.rb +98 -0
  61. data/lib/lingo/types.rb +285 -0
  62. data/lib/lingo/utilities.rb +40 -0
  63. data/lib/lingo/version.rb +27 -0
  64. data/lingo-all.cfg +85 -0
  65. data/lingo-call.cfg +15 -0
  66. data/lingo.cfg +78 -0
  67. data/lingo.rb +3 -0
  68. data/lir.cfg +72 -0
  69. data/porter/stem.cfg +311 -0
  70. data/porter/stem.rb +150 -0
  71. data/spec/spec_helper.rb +0 -0
  72. data/test.cfg +79 -0
  73. data/test/attendee/ts_abbreviator.rb +35 -0
  74. data/test/attendee/ts_decomposer.rb +31 -0
  75. data/test/attendee/ts_multiworder.rb +390 -0
  76. data/test/attendee/ts_noneword_filter.rb +19 -0
  77. data/test/attendee/ts_objectfilter.rb +19 -0
  78. data/test/attendee/ts_sequencer.rb +43 -0
  79. data/test/attendee/ts_synonymer.rb +33 -0
  80. data/test/attendee/ts_textreader.rb +58 -0
  81. data/test/attendee/ts_textwriter.rb +98 -0
  82. data/test/attendee/ts_tokenizer.rb +32 -0
  83. data/test/attendee/ts_variator.rb +24 -0
  84. data/test/attendee/ts_vector_filter.rb +62 -0
  85. data/test/attendee/ts_wordsearcher.rb +119 -0
  86. data/test/lir.csv +3 -0
  87. data/test/lir.txt +12 -0
  88. data/test/lir2.txt +12 -0
  89. data/test/mul.txt +1 -0
  90. data/test/ref/artikel.mul +1 -0
  91. data/test/ref/artikel.non +159 -0
  92. data/test/ref/artikel.seq +270 -0
  93. data/test/ref/artikel.syn +16 -0
  94. data/test/ref/artikel.vec +928 -0
  95. data/test/ref/artikel.ven +928 -0
  96. data/test/ref/artikel.ver +928 -0
  97. data/test/ref/lir.csv +328 -0
  98. data/test/ref/lir.mul +1 -0
  99. data/test/ref/lir.non +274 -0
  100. data/test/ref/lir.seq +249 -0
  101. data/test/ref/lir.syn +94 -0
  102. data/test/test_helper.rb +113 -0
  103. data/test/ts_database.rb +269 -0
  104. data/test/ts_language.rb +396 -0
  105. data/txt/artikel-en.txt +157 -0
  106. data/txt/artikel.txt +170 -0
  107. data/txt/lir.txt +1317 -0
  108. metadata +211 -0
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Noneword_filter
8
+ #
9
+ class TestAttendeeNoneword_filter < AttendeeTestCase
10
+
11
+ def test_basic
12
+ @input = [wd('Eins|IDF'), wd('Zwei|?'), wd('Drei|IDF'), wd('Vier|?'), ai('EOF|')]
13
+ @expect = ['vier', 'zwei', ai('EOF|')]
14
+ meet({})
15
+ end
16
+
17
+ end
18
+ #
19
+ ################################################################################
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Objectfilter
8
+ #
9
+ class TestAttendeeObjectfilter < AttendeeTestCase
10
+
11
+ def test_basic
12
+ @input = [wd('Eins|IDF'), wd('zwei|?'), wd('Drei|IDF'), wd('vier|?'), ai('EOF|')]
13
+ @expect = [wd('Eins|IDF'), wd('Drei|IDF'), ai('EOF|')]
14
+ meet({'objects'=>'obj.form =~ /^[A-Z]/'})
15
+ end
16
+
17
+ end
18
+ #
19
+ ################################################################################
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Sequencer
8
+ #
9
+ class TestAttendeeSequencer < AttendeeTestCase
10
+
11
+ def test_basic
12
+ @input = [
13
+ # AS
14
+ wd('Die|IDF', 'die|w'),
15
+ wd('helle|IDF', 'hell|a'),
16
+ wd('Sonne|IDF', 'sonne|s'),
17
+ tk('.|PUNC'),
18
+ # AK
19
+ wd('Der|IDF', 'der|w'),
20
+ wd('schöne|IDF', 'schön|a'),
21
+ wd('Sonnenuntergang|KOM', 'sonnenuntergang|k', 'sonne|s+', 'untergang|s+'),
22
+ ai('EOF|')
23
+ ]
24
+ @expect = [
25
+ # AS
26
+ wd('Die|IDF', 'die|w'),
27
+ wd('sonne, hell|SEQ', 'sonne, hell|q'),
28
+ wd('helle|IDF', 'hell|a'),
29
+ wd('Sonne|IDF', 'sonne|s'),
30
+ tk('.|PUNC'),
31
+ # AK
32
+ wd('Der|IDF', 'der|w'),
33
+ wd('sonnenuntergang, schön|SEQ', 'sonnenuntergang, schön|q'),
34
+ wd('schöne|IDF', 'schön|a'),
35
+ wd('Sonnenuntergang|KOM', 'sonnenuntergang|k', 'sonne|s+', 'untergang|s+'),
36
+ ai('EOF|')
37
+ ]
38
+ meet({'stopper'=>'PUNC,OTHR', 'source'=>'sys-mul'})
39
+ end
40
+
41
+ end
42
+ #
43
+ ################################################################################
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Synonymer
8
+ #
9
+ class TestAttendeeSynonymer < AttendeeTestCase
10
+
11
+ def test_basic
12
+ @input = [wd('abtastzeiten|IDF', 'abtastzeit|s')]
13
+ @expect = [wd('abtastzeiten|IDF', 'abtastzeit|s', 'abtastfrequenz|y', 'abtastperiode|y')]
14
+ meet({'source'=>'sys-syn', 'check'=>'-,MUL'})
15
+ # @expect.each_index {|i| assert_equal(@expect[i], @output[i]) }
16
+ end
17
+
18
+ def test_first
19
+ @input = [wd('Aktienanleihe|IDF', 'aktienanleihe|s')]
20
+ @expect = [wd('Aktienanleihe|IDF', 'aktienanleihe|s', 'aktien-anleihe|y',
21
+ 'reverse convertible bond|y', 'reverse convertibles|y')]
22
+ meet({'source'=>'sys-syn,tst-syn', 'check'=>'-,MUL', 'mode'=>'first'})
23
+ end
24
+
25
+ def test_all
26
+ @input = [wd('Kerlchen|IDF', 'kerlchen|s')]
27
+ @expect = [wd('Kerlchen|IDF', 'kerlchen|s', 'kerlchen|y', 'zwerg-nase|y')]
28
+ meet({'source'=>'sys-syn,tst-syn', 'check'=>'-,MUL', 'mode'=>'all'})
29
+ end
30
+
31
+ end
32
+ #
33
+ ################################################################################
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Textreader
8
+ #
9
+ class TestAttendeeTextreader < AttendeeTestCase
10
+
11
+ def test_lir_file
12
+ @expect = [
13
+ ai('LIR-FORMAT|'), ai('FILE|test/lir.txt'),
14
+ ai('RECORD|00237'),
15
+ '020: GERHARD.',
16
+ '025: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
17
+ '056: Die intellektuelle Erschließung des Internet befindet sich in einer Krise. GERHARD ist derzeit weltweit der einzige.',
18
+ ai('RECORD|00238'),
19
+ '020: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
20
+ '025: das DFG-Projekt GERHARD.',
21
+ ai('RECORD|00239'),
22
+ '020: Information Retrieval und Dokumentmanagement im Multimedia-Zeitalter.',
23
+ '056: "Das Buch ist ein praxisbezogenes VADEMECUM für alle, die in einer Welt der Datennetze Wissen/Informationen sammeln.',
24
+ ai('EOF|test/lir.txt')
25
+ ]
26
+ meet({'files'=>'test/lir.txt', 'lir-record-pattern'=>'^\[(\d+)\.\]'})
27
+ end
28
+
29
+ def test_lir_file_another_pattern
30
+ @expect = [
31
+ ai('LIR-FORMAT|'), ai('FILE|test/lir2.txt'),
32
+ ai('RECORD|00237'),
33
+ '020: GERHARD.',
34
+ '025: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
35
+ '056: Die intellektuelle Erschließung des Internet befindet sich in einer Krise. GERHARD ist derzeit weltweit der einzige.',
36
+ ai('RECORD|00238'),
37
+ '020: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
38
+ '025: das DFG-Projekt GERHARD.',
39
+ ai('RECORD|00239'),
40
+ '020: Information Retrieval und Dokumentmanagement im Multimedia-Zeitalter.',
41
+ '056: "Das Buch ist ein praxisbezogenes VADEMECUM für alle, die in einer Welt der Datennetze Wissen/Informationen sammeln.',
42
+ ai('EOF|test/lir2.txt')
43
+ ]
44
+ meet({'files'=>'test/lir2.txt', 'lir-record-pattern'=>'^\021(\d+)\022'})
45
+ end
46
+
47
+ def test_normal_file
48
+ @expect = [
49
+ ai('FILE|test/mul.txt'),
50
+ 'Die abstrakte Kunst ist schön.',
51
+ ai('EOF|test/mul.txt')
52
+ ]
53
+ meet({'files'=>'test/mul.txt'})
54
+ end
55
+
56
+ end
57
+ #
58
+ ################################################################################
@@ -0,0 +1,98 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Textwriter
8
+ #
9
+ class TestAttendeeTextwriter < AttendeeTestCase
10
+
11
+ def setup
12
+ @data = [
13
+ ai('FILE|test/test.txt'),
14
+ wd('Dies|IDF'),
15
+ wd('ist|IDF'),
16
+ wd('eine|IDF'),
17
+ wd('Zeile|IDF'),
18
+ tk('.|PUNC'),
19
+ ai('EOL|test/test.txt'),
20
+ wd('Dies|IDF'),
21
+ wd('ist|IDF'),
22
+ wd('eine|IDF'),
23
+ wd('zweite|IDF'),
24
+ wd('Zeile|IDF'),
25
+ tk('.|PUNC'),
26
+ ai('EOL|test/test.txt'),
27
+ ai('EOF|test/test.txt')
28
+ ]
29
+ end
30
+
31
+ def test_basic
32
+ @input = @data
33
+ @expect = [ "Dies,ist,eine,Zeile,.\n", "Dies,ist,eine,zweite,Zeile,.\n" ]
34
+ meet({'ext'=>'tst', 'sep'=>','}, false)
35
+
36
+ @output = File.readlines('test/test.tst', encoding: Lingo::ENC)
37
+ assert_equal(@expect, @output)
38
+ end
39
+
40
+ def test_complex
41
+ @input = @data
42
+ @expect = [ "Dies-ist-eine-Zeile-.\n", "Dies-ist-eine-zweite-Zeile-.\n" ]
43
+ meet({'ext'=>'yip', 'sep'=>'-'}, false)
44
+
45
+ @output = File.readlines('test/test.yip', encoding: Lingo::ENC)
46
+ assert_equal(@expect, @output)
47
+ end
48
+
49
+ def test_crlf
50
+ @input = @data
51
+ @expect = [ "Dies\n", "ist\n", "eine\n", "Zeile\n", ".\n", "Dies\n", "ist\n", "eine\n", "zweite\n", "Zeile\n", ".\n" ]
52
+ meet({'sep'=>"\n"}, false)
53
+
54
+ @output = File.readlines('test/test.txt2', encoding: Lingo::ENC)
55
+ assert_equal(@expect, @output)
56
+ end
57
+
58
+ def test_lir_file
59
+ @input = [
60
+ ai('LIR-FORMAT|'), ai('FILE|test/lir.txt'),
61
+ ai('RECORD|00237'),
62
+ '020: GERHARD.',
63
+ '025: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
64
+ "056: Die intellektuelle Erschließung des Internet befindet sich in einer Krise. GERHARD ist derzeit weltweit der einzige.\r",
65
+ ai('RECORD|00238'),
66
+ '020: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen.',
67
+ "025: das DFG-Projekt GERHARD.\r",
68
+ ai('RECORD|00239'),
69
+ '020: Information Retrieval und Dokumentmanagement im Multimedia-Zeitalter.',
70
+ "056: \"Das Buch ist ein praxisbezogenes VADEMECUM für alle, die in einer Welt der Datennetze Wissen/Informationen sammeln.\r",
71
+ ai('EOF|test/lir.txt')
72
+ ]
73
+ @expect = [
74
+ "00237*020: GERHARD. 025: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressour\
75
+ cen. 056: Die intellektuelle Erschließung des Internet befindet sich in einer Krise. GERHARD ist derzeit weltweit der einzige.\r\n",
76
+ "00238*020: Automatisches Sammeln, Klassifizieren und Indexieren von wissenschaftlich relevanten Informationsressourcen. 025: das D\
77
+ FG-Projekt GERHARD.\r\n",
78
+ "00239*020: Information Retrieval und Dokumentmanagement im Multimedia-Zeitalter. 056: \"Das Buch ist ein praxisbezogenes VADEMECUM\
79
+ für alle, die in einer Welt der Datennetze Wissen/Informationen sammeln.\r\n"
80
+ ]
81
+ meet({'ext'=>'csv', 'lir-format'=>nil}, false)
82
+
83
+ @output = File.readlines('test/lir.csv', encoding: Lingo::ENC)
84
+ assert_equal(@expect, @output)
85
+ end
86
+
87
+ def test_nonewords
88
+ @input = [ai('FILE|test/text.txt'), 'Nonwörter', 'Nonsense', ai('EOF|test/text.txt')]
89
+ @expect = [ "Nonwörter\n", "Nonsense" ]
90
+ meet({'ext'=>'non', 'sep'=>"\n"}, false)
91
+
92
+ @output = File.readlines('test/text.non', encoding: Lingo::ENC)
93
+ assert_equal(@expect, @output)
94
+ end
95
+
96
+ end
97
+ #
98
+ ################################################################################
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ ################################################################################
4
+ #
5
+ # Attendee Tokenizer
6
+ #
7
+ class TestAttendeeTokenizer < AttendeeTestCase
8
+
9
+ def test_basic
10
+ @input = ["Dies ist ein Test."]
11
+ @expect = [tk('Dies|WORD'), tk('ist|WORD'), tk('ein|WORD'), tk('Test|WORD'), tk('.|PUNC')]
12
+ meet({})
13
+ end
14
+
15
+ def test_complex
16
+ @input = ["1964 www.vorhauer.de bzw. nasenbär, ()"]
17
+ @expect = [
18
+ tk('1964|NUMS'),
19
+ tk('www.vorhauer.de|URLS'),
20
+ tk('bzw|WORD'),
21
+ tk('.|PUNC'),
22
+ tk('nasenbär|WORD'),
23
+ tk(',|PUNC'),
24
+ tk('(|OTHR'),
25
+ tk(')|OTHR')
26
+ ]
27
+ meet({})
28
+ end
29
+
30
+ end
31
+ #
32
+ ################################################################################
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Variator
8
+ #
9
+ class TestAttendeeVariator < AttendeeTestCase
10
+
11
+ def test_basic
12
+ @input = [wd('fchwarz|?'), wd('fchilling|?'), wd('iehwarzfchilling|?'), wd('fchiiiirg|?')]
13
+ @expect = [
14
+ wd('*schwarz|IDF', 'schwarz|s', 'schwarz|a'),
15
+ wd('*schilling|IDF', 'schilling|s'),
16
+ wd('*schwarzschilling|KOM', 'schwarzschilling|k', 'schwarz|a+', 'schilling|s+', 'schwarz|s+'),
17
+ wd('fchiiiirg|?')
18
+ ]
19
+ meet({'source'=>'sys-dic'})
20
+ end
21
+
22
+ end
23
+ #
24
+ ################################################################################
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Vector_filter
8
+ #
9
+ class TestAttendeeVector_filter < AttendeeTestCase
10
+
11
+ def setup
12
+ @input = [
13
+ ai('FILE|test'),
14
+ wd('Testwort|IDF', 'substantiv|s', 'adjektiv|a', 'verb|v', 'eigenname|e', 'mehrwortbegriff|m'),
15
+ wd('unknown|?'),
16
+ ai('EOF|test')
17
+ ]
18
+ end
19
+
20
+ def test_basic
21
+ @expect = [ai('FILE|test'), 'substantiv', ai('EOF|test')]
22
+ meet({})
23
+ end
24
+
25
+ def test_lexicals
26
+ @expect = [ai('FILE|test'), 'adjektiv', 'eigenname', 'substantiv', 'verb', ai('EOF|test')]
27
+ meet({'lexicals'=>'[save]'})
28
+ end
29
+
30
+ def test_sort_term_abs
31
+ @expect = [ai('FILE|test'), '1 adjektiv', '1 eigenname', '1 substantiv', '1 verb', ai('EOF|test')]
32
+ meet({'lexicals'=>'[save]', 'sort'=>'term_abs'})
33
+ end
34
+
35
+ def test_sort_term_rel
36
+ @expect = [ai('FILE|test'), '0.50000 adjektiv', '0.50000 eigenname', '0.50000 substantiv', '0.50000 verb', ai('EOF|test')]
37
+ meet({'lexicals'=>'[save]', 'sort'=>'term_rel'})
38
+ end
39
+
40
+ def test_sort_sto_abs
41
+ @expect = [ai('FILE|test'), 'adjektiv {1}', 'eigenname {1}', 'substantiv {1}', 'verb {1}', ai('EOF|test')]
42
+ meet({'lexicals'=>'[save]', 'sort'=>'sto_abs'})
43
+ end
44
+
45
+ def test_sort_sto_rel
46
+ @expect = [ai('FILE|test'), 'adjektiv {0.50000}', 'eigenname {0.50000}', 'substantiv {0.50000}', 'verb {0.50000}', ai('EOF|test')]
47
+ meet({'lexicals'=>'[save]', 'sort'=>'sto_rel'})
48
+ end
49
+
50
+ def test_nonword
51
+ @expect = [ai('FILE|test'), 'unknown', ai('EOF|test')]
52
+ meet({'lexicals'=>'\?'})
53
+ end
54
+
55
+ def test_nonword_sort_term_abs
56
+ @expect = [ai('FILE|test'), '1 unknown', ai('EOF|test')]
57
+ meet({'lexicals'=>'\?', 'sort'=>'term_abs'})
58
+ end
59
+
60
+ end
61
+ #
62
+ ################################################################################
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative '../test_helper'
4
+
5
+ ################################################################################
6
+ #
7
+ # Attendee Wordsearcher
8
+ #
9
+ class TestAttendeeWordsearcher < AttendeeTestCase
10
+
11
+ def setup
12
+ @test_synonyms = [
13
+ lx('experiment|y'), lx('kontrolle|y'), lx('probelauf|y'),
14
+ lx('prüfung|y'), lx('test|y'), lx('testlauf|y'),
15
+ lx('testversuch|y'), lx('trockentest|y'), lx('versuch|y')
16
+ ]
17
+ end
18
+
19
+ def test_basic
20
+ @input = [tk('Dies|WORD'), tk('ist|WORD'), tk('ein|WORD'), tk('Test|WORD'), tk('.|PUNC'), ai('EOL|')]
21
+ @expect = [
22
+ wd('Dies|IDF', 'dies|w'),
23
+ wd('ist|IDF', 'sein|v'),
24
+ wd('ein|IDF', 'einen|v', 'ein|w'),
25
+ wd('Test|IDF', 'test|s', 'testen|v'),
26
+ tk('.|PUNC'),
27
+ ai('EOL|')
28
+ ]
29
+ meet({'source'=>'sys-dic,sys-syn,sys-mul'})
30
+ end
31
+
32
+ def test_mode
33
+ @input = [tk('Dies|WORD'), tk('ist|WORD'), tk('ein|WORD'), tk('Test|WORD'), tk('.|PUNC'), ai('EOL|')]
34
+ @expect = [
35
+ wd('Dies|IDF', 'dies|w'),
36
+ wd('ist|IDF', 'sein|v'),
37
+ wd('ein|IDF', 'einen|v', 'ein|w'),
38
+ wd('Test|IDF', 'test|s', 'testen|v'),
39
+ tk('.|PUNC'),
40
+ ai('EOL|')
41
+ ]
42
+ meet({'source'=>'sys-syn,sys-dic', 'mode'=>'first'})
43
+ end
44
+
45
+ def test_two_sources_mode_first
46
+ @input = [
47
+ tk('Hasennasen|WORD'),
48
+ tk('Knaller|WORD'),
49
+ tk('Lex-Lingo|WORD'),
50
+ tk('A-Dur|WORD'),
51
+ ai('EOL|')
52
+ ]
53
+ @expect = [
54
+ wd('Hasennasen|?'),
55
+ wd('Knaller|IDF', 'knaller|s'),
56
+ wd('Lex-Lingo|IDF', 'super indexierungssystem|m'),
57
+ wd('A-Dur|IDF', 'a-dur|s'),
58
+ ai('EOL|')
59
+ ]
60
+ meet({'source'=>'sys-dic,tst-dic', 'mode'=>'first'})
61
+ end
62
+
63
+ def test_two_sources_mode_first_flipped
64
+ @input = [
65
+ tk('Hasennasen|WORD'),
66
+ tk('Knaller|WORD'),
67
+ tk('Lex-Lingo|WORD'),
68
+ tk('A-Dur|WORD'),
69
+ ai('EOL|')
70
+ ]
71
+ @expect = [
72
+ wd('Hasennasen|?'),
73
+ wd('Knaller|IDF', 'knaller|s'),
74
+ wd('Lex-Lingo|IDF', 'super indexierungssystem|m'),
75
+ wd('A-Dur|IDF', 'b-dur|s'),
76
+ ai('EOL|')
77
+ ]
78
+ meet({'source'=>'tst-dic,sys-dic', 'mode'=>'first'})
79
+ end
80
+
81
+ def test_select_two_sources_mode_all
82
+ @input = [
83
+ tk('Hasennasen|WORD'),
84
+ tk('Knaller|WORD'),
85
+ tk('Lex-Lingo|WORD'),
86
+ tk('A-Dur|WORD'),
87
+ ai('EOL|')
88
+ ]
89
+ @expect = [
90
+ wd('Hasennasen|?'),
91
+ wd('Knaller|IDF', 'knaller|s'),
92
+ wd('Lex-Lingo|IDF', 'super indexierungssystem|m'),
93
+ wd('A-Dur|IDF', 'a-dur|s', 'b-dur|s'),
94
+ ai('EOL|')
95
+ ]
96
+ meet({'source'=>'sys-dic,tst-dic', 'mode'=>'all'})
97
+ end
98
+
99
+ def test_select_two_sources_mode_def
100
+ @input = [
101
+ tk('Hasennasen|WORD'),
102
+ tk('Knaller|WORD'),
103
+ tk('Lex-Lingo|WORD'),
104
+ tk('A-Dur|WORD'),
105
+ ai('EOL|')
106
+ ]
107
+ @expect = [
108
+ wd('Hasennasen|?'),
109
+ wd('Knaller|IDF', 'knaller|s'),
110
+ wd('Lex-Lingo|IDF', 'super indexierungssystem|m'),
111
+ wd('A-Dur|IDF', 'a-dur|s', 'b-dur|s'),
112
+ ai('EOL|')
113
+ ]
114
+ meet({'source'=>'sys-dic,tst-dic'})
115
+ end
116
+
117
+ end
118
+ #
119
+ ################################################################################