lingo 1.8.1 → 1.8.2
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.
- data/ChangeLog +23 -5
- data/README +1 -1
- data/Rakefile +5 -7
- data/TODO +2 -0
- data/bin/lingo +5 -1
- data/de.lang +1 -1
- data/en/lingo-syn.txt +0 -0
- data/en.lang +2 -1
- data/lib/lingo/attendee/abbreviator.rb +8 -9
- data/lib/lingo/attendee/debugger.rb +5 -4
- data/lib/lingo/attendee/decomposer.rb +8 -3
- data/lib/lingo/attendee/dehyphenizer.rb +19 -63
- data/lib/lingo/attendee/formatter.rb +1 -1
- data/lib/lingo/attendee/multi_worder.rb +67 -155
- data/lib/lingo/attendee/noneword_filter.rb +16 -9
- data/lib/lingo/attendee/object_filter.rb +1 -1
- data/lib/lingo/attendee/sequencer.rb +32 -63
- data/lib/lingo/attendee/stemmer/porter.rb +343 -0
- data/{info/gpl-hdr.txt → lib/lingo/attendee/stemmer.rb} +33 -0
- data/lib/lingo/attendee/synonymer.rb +10 -9
- data/lib/lingo/attendee/text_reader.rb +102 -76
- data/lib/lingo/attendee/text_writer.rb +23 -26
- data/lib/lingo/attendee/tokenizer.rb +13 -27
- data/lib/lingo/attendee/variator.rb +26 -66
- data/lib/lingo/attendee/vector_filter.rb +42 -43
- data/lib/lingo/attendee/word_searcher.rb +6 -7
- data/lib/lingo/attendee.rb +25 -7
- data/lib/lingo/buffered_attendee.rb +36 -10
- data/lib/lingo/cachable.rb +8 -8
- data/lib/lingo/config.rb +5 -6
- data/lib/lingo/ctl.rb +2 -3
- data/lib/lingo/database/crypter.rb +9 -26
- data/lib/lingo/database/gdbm_store.rb +3 -5
- data/lib/lingo/database/libcdb_store.rb +4 -6
- data/lib/lingo/database/sdbm_store.rb +11 -6
- data/lib/lingo/database/show_progress.rb +3 -43
- data/lib/lingo/database/source/key_value.rb +2 -6
- data/lib/lingo/database/source/multi_key.rb +3 -5
- data/lib/lingo/database/source/multi_value.rb +2 -6
- data/lib/lingo/database/source/single_word.rb +4 -6
- data/lib/lingo/database/source/word_class.rb +4 -10
- data/lib/lingo/database/source.rb +20 -18
- data/lib/lingo/database.rb +84 -59
- data/lib/lingo/error.rb +57 -1
- data/lib/lingo/language/dictionary.rb +21 -18
- data/lib/lingo/language/grammar.rb +40 -49
- data/lib/lingo/language/lexical.rb +6 -6
- data/lib/lingo/language/lexical_hash.rb +6 -0
- data/lib/lingo/language/word.rb +32 -15
- data/lib/lingo/language/word_form.rb +1 -1
- data/lib/lingo/language.rb +14 -25
- data/lib/lingo/reportable.rb +12 -10
- data/lib/lingo/show_progress.rb +81 -0
- data/lib/lingo/version.rb +1 -1
- data/lib/lingo.rb +63 -24
- data/lingo-call.cfg +6 -10
- data/lingo.cfg +60 -44
- data/lir.cfg +42 -41
- data/test/attendee/ts_abbreviator.rb +3 -5
- data/test/attendee/ts_decomposer.rb +3 -5
- data/test/attendee/ts_multi_worder.rb +87 -145
- data/test/attendee/ts_noneword_filter.rb +5 -3
- data/test/attendee/ts_object_filter.rb +5 -3
- data/test/attendee/ts_sequencer.rb +3 -5
- data/test/attendee/ts_stemmer.rb +309 -0
- data/test/attendee/ts_synonymer.rb +15 -11
- data/test/attendee/ts_text_reader.rb +12 -15
- data/test/attendee/ts_text_writer.rb +24 -29
- data/test/attendee/ts_tokenizer.rb +9 -7
- data/test/attendee/ts_variator.rb +4 -4
- data/test/attendee/ts_vector_filter.rb +24 -16
- data/test/attendee/ts_word_searcher.rb +20 -36
- data/test/{lir.csv → lir.vec} +0 -0
- data/test/ref/artikel.vec +943 -943
- data/test/ref/artikel.ven +943 -943
- data/test/ref/lir.non +201 -201
- data/test/ref/lir.seq +178 -178
- data/test/ref/lir.syn +49 -49
- data/test/ref/lir.vec +329 -0
- data/test/test_helper.rb +20 -36
- data/test/ts_database.rb +10 -10
- data/test/ts_language.rb +279 -319
- metadata +93 -104
- data/info/Objekte.png +0 -0
- data/info/Typen.png +0 -0
- data/info/database.png +0 -0
- data/info/db_small.png +0 -0
- data/info/download.png +0 -0
- data/info/kerze.png +0 -0
- data/info/language.png +0 -0
- data/info/lingo.png +0 -0
- data/info/logo.png +0 -0
- data/info/meeting.png +0 -0
- data/info/types.png +0 -0
- data/lingo-all.cfg +0 -89
- data/porter/stem.cfg +0 -311
- data/porter/stem.rb +0 -150
- data/test/ref/lir.csv +0 -329
- data/test.cfg +0 -79
data/lingo-call.cfg
CHANGED
@@ -2,14 +2,10 @@
|
|
2
2
|
meeting:
|
3
3
|
attendees:
|
4
4
|
- text_reader: { }
|
5
|
-
|
6
5
|
- tokenizer: { }
|
7
|
-
- word_searcher: { source:
|
8
|
-
- decomposer: { source:
|
9
|
-
- multi_worder: {
|
10
|
-
- sequencer: {
|
11
|
-
- synonymer: {
|
12
|
-
- debugger: {
|
13
|
-
|
14
|
-
#- vector_filter: { in: 'syn', lexicals: 'y', sort: 'term_abs' }
|
15
|
-
#- text_writer: { ext: 'STDOUT', sep: "\n" }
|
6
|
+
- word_searcher: { source: sys-dic, mode: first }
|
7
|
+
- decomposer: { source: sys-dic }
|
8
|
+
- multi_worder: { source: sys-mul }
|
9
|
+
- sequencer: { }
|
10
|
+
- synonymer: { source: sys-syn, skip: '?,t' }
|
11
|
+
- debugger: { prompt: '', ceval: 'false' }
|
data/lingo.cfg
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
#
|
2
|
+
# Lingo-Konfiguration
|
3
3
|
#
|
4
4
|
---
|
5
5
|
meeting:
|
@@ -7,74 +7,90 @@ meeting:
|
|
7
7
|
attendees:
|
8
8
|
|
9
9
|
########################################
|
10
|
-
#
|
10
|
+
# Text bereitstellen
|
11
11
|
#
|
12
12
|
|
13
|
-
#
|
14
|
-
-
|
13
|
+
# Angegebene Datei zeilenweise einlesen und verarbeiten
|
14
|
+
- text_reader: { files: $(files), progress: true }
|
15
15
|
|
16
16
|
|
17
17
|
########################################
|
18
|
-
#
|
18
|
+
# Inhalte verarbeiten
|
19
19
|
#
|
20
20
|
|
21
|
-
#
|
22
|
-
-
|
21
|
+
# Zeile in einzelnen Sinnbestandteile (Token) zerlegen
|
22
|
+
- tokenizer: { }
|
23
23
|
|
24
|
-
#
|
25
|
-
|
24
|
+
# Abkürzungen erkennen und auflösen
|
25
|
+
# - abbreviator: { source: sys-abk }
|
26
26
|
|
27
|
-
#
|
28
|
-
-
|
27
|
+
# Verbleibende Token im Wörterbuch suchen
|
28
|
+
- word_searcher: { source: sys-dic, mode: first }
|
29
29
|
|
30
|
-
#
|
31
|
-
|
30
|
+
# Schreibweisen variieren und erneut suchen
|
31
|
+
# - variator: { source: sys-dic }
|
32
32
|
|
33
|
-
#
|
34
|
-
|
33
|
+
# Bindestrichergänzungen rekonstruieren
|
34
|
+
# - dehyphenizer: { source: sys-dic }
|
35
35
|
|
36
|
-
#
|
37
|
-
|
36
|
+
# Wortstämme für nicht erkannte Wörter einfügen
|
37
|
+
# - stemmer: { }
|
38
|
+
|
39
|
+
# Nicht erkannte Wörter auf Kompositum testen
|
40
|
+
- decomposer: { source: sys-dic }
|
41
|
+
|
42
|
+
# Mehrwortgruppen im Strom erkennen
|
43
|
+
- multi_worder: { source: sys-mul }
|
44
|
+
|
45
|
+
# Wortsequenzen anhand von Regeln identifizieren
|
46
|
+
- sequencer: { stopper: PUNC,OTHR }
|
47
|
+
|
48
|
+
# Relationierungen einfügen
|
49
|
+
- synonymer: { skip: '?,t', source: sys-syn, out: syn }
|
38
50
|
|
39
51
|
|
40
52
|
########################################
|
41
|
-
#
|
53
|
+
# Datenstrom anzeigen
|
42
54
|
#
|
43
|
-
# -
|
55
|
+
# - debugger: { eval: 'true', ceval: 'cmd!="EOL"', prompt: 'lex:) ' }
|
44
56
|
|
45
57
|
|
46
58
|
########################################
|
47
|
-
#
|
59
|
+
# Ergebnisse ausgeben
|
48
60
|
#
|
49
61
|
|
50
|
-
#
|
51
|
-
-
|
52
|
-
-
|
62
|
+
# Erstelle Datei mit Endung .log für Datenstrom
|
63
|
+
- vector_filter: { in: syn, debug: 'true', prompt: 'lex:) ' }
|
64
|
+
- text_writer: { ext: log, sep: "\n" }
|
65
|
+
|
66
|
+
# Erstelle Datei mit Endung .non für nicht erkannte Wörter
|
67
|
+
- noneword_filter: { in: syn }
|
68
|
+
- text_writer: { ext: non, sep: "\n" }
|
53
69
|
|
54
|
-
#
|
55
|
-
-
|
56
|
-
-
|
70
|
+
# Erstelle Datei mit Endung .ste für Wortstämme
|
71
|
+
- vector_filter: { in: syn, lexicals: z }
|
72
|
+
- text_writer: { ext: ste, sep: "\n" }
|
57
73
|
|
58
|
-
#
|
59
|
-
-
|
60
|
-
-
|
74
|
+
# Erstelle Datei mit Endung .vec für erkannte Indexterme
|
75
|
+
- vector_filter: { in: syn, lexicals: '^[ksavem]$' }
|
76
|
+
- text_writer: { ext: vec, sep: "\n" }
|
61
77
|
|
62
|
-
#
|
63
|
-
-
|
64
|
-
-
|
78
|
+
# Erstelle Datei mit Endung .ven für erkannte Indexterme mit absoluter Häufigkeit
|
79
|
+
- vector_filter: { in: syn, lexicals: '^[ksavem]$', sort: term_abs }
|
80
|
+
- text_writer: { ext: ven, sep: "\n" }
|
65
81
|
|
66
|
-
#
|
67
|
-
-
|
68
|
-
-
|
82
|
+
# Erstelle Datei mit Endung .ver für erkannte Indexterme mit relativer Häufigkeit
|
83
|
+
- vector_filter: { in: syn, lexicals: '^[ksavem]$', sort: term_rel }
|
84
|
+
- text_writer: { ext: ver, sep: "\n" }
|
69
85
|
|
70
|
-
#
|
71
|
-
-
|
72
|
-
-
|
86
|
+
# Erstelle Datei mit Endung .mul für erkannte Mehrwortgruppen
|
87
|
+
- vector_filter: { in: syn, lexicals: m }
|
88
|
+
- text_writer: { ext: mul, sep: "\n" }
|
73
89
|
|
74
|
-
#
|
75
|
-
-
|
76
|
-
-
|
90
|
+
# Erstelle Datei mit Endung .seq für erkannte Wortsequenzen
|
91
|
+
- vector_filter: { in: syn, lexicals: q, sort: term_abs }
|
92
|
+
- text_writer: { ext: seq, sep: "\n" }
|
77
93
|
|
78
|
-
#
|
79
|
-
-
|
80
|
-
-
|
94
|
+
# Erstelle Datei mit Endung .syn für erkannte Synonyme
|
95
|
+
- vector_filter: { in: syn, lexicals: y, sort: term_abs }
|
96
|
+
- text_writer: { ext: syn, sep: "\n" }
|
data/lir.cfg
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
#
|
2
|
-
#
|
2
|
+
# Lingo-Konfiguration für den Test mit einer LIR-Datei
|
3
3
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
4
|
+
# Gebräuchliche Patterns sind
|
5
|
+
#
|
6
|
+
# "^\021(\d+\-\d+)\022"
|
7
|
+
# "^\[(\d+)\.\]"
|
7
8
|
#
|
8
9
|
---
|
9
10
|
meeting:
|
@@ -11,66 +12,66 @@ meeting:
|
|
11
12
|
attendees:
|
12
13
|
|
13
14
|
########################################
|
14
|
-
#
|
15
|
+
# Text bereitstellen
|
15
16
|
#
|
16
17
|
|
17
|
-
#
|
18
|
-
-
|
18
|
+
# Angegebene Datei zeilenweise einlesen und verarbeiten
|
19
|
+
- text_reader: { files: $(files), records: true, progress: true }
|
19
20
|
|
20
21
|
|
21
22
|
########################################
|
22
|
-
#
|
23
|
+
# Inhalte verarbeiten
|
23
24
|
#
|
24
25
|
|
25
|
-
#
|
26
|
-
-
|
26
|
+
# Zeile in einzelnen Sinnbestandteile (Token) zerlegen
|
27
|
+
- tokenizer: { }
|
27
28
|
|
28
|
-
#
|
29
|
-
-
|
29
|
+
# Verbleibende Token im Wörterbuch suchen
|
30
|
+
- word_searcher: { source: sys-dic, mode: first }
|
30
31
|
|
31
|
-
#
|
32
|
-
-
|
32
|
+
# Nicht erkannte Wörter auf Kompositum testen
|
33
|
+
- decomposer: { source: sys-dic }
|
33
34
|
|
34
|
-
#
|
35
|
-
-
|
35
|
+
# Mehrwortgruppen im Strom erkennen
|
36
|
+
- multi_worder: { source: sys-mul }
|
36
37
|
|
37
|
-
#
|
38
|
-
-
|
38
|
+
# Wortsequenzen anhand von Regeln identifizieren
|
39
|
+
- sequencer: { stopper: PUNC,OTHR }
|
39
40
|
|
40
|
-
#
|
41
|
-
-
|
41
|
+
# Relationierungen einfügen
|
42
|
+
- synonymer: { skip: '?,t', source: sys-syn, out: syn }
|
42
43
|
|
43
44
|
|
44
45
|
########################################
|
45
|
-
#
|
46
|
+
# Datenstrom anzeigen
|
46
47
|
#
|
47
|
-
# -
|
48
|
+
# - debugger: { eval: 'true', ceval: 'cmd!="EOL"', prompt: 'lex:) ' }
|
48
49
|
|
49
50
|
|
50
51
|
########################################
|
51
|
-
#
|
52
|
+
# Ergebnisse ausgeben
|
52
53
|
#
|
53
54
|
|
54
|
-
#
|
55
|
-
-
|
56
|
-
-
|
55
|
+
# Erstelle Datei mit Endung .log für Datenstrom
|
56
|
+
- vector_filter: { in: syn, debug: 'true', prompt: 'lex:) ' }
|
57
|
+
- text_writer: { ext: log, sep: "\n" }
|
57
58
|
|
58
|
-
#
|
59
|
-
-
|
60
|
-
-
|
59
|
+
# Erstelle Datei mit Endung .non für nicht erkannte Wörter
|
60
|
+
- noneword_filter: { in: syn }
|
61
|
+
- text_writer: { ext: non, sep: '|' }
|
61
62
|
|
62
|
-
#
|
63
|
-
-
|
64
|
-
-
|
63
|
+
# Erstelle Datei mit Endung .vec für erkannte Indexterme
|
64
|
+
- vector_filter: { in: syn, lexicals: '^[ksavem]$' }
|
65
|
+
- text_writer: { ext: vec, sep: '|' }
|
65
66
|
|
66
|
-
#
|
67
|
-
-
|
68
|
-
-
|
67
|
+
# Erstelle Datei mit Endung .mul für erkannte Mehrwortgruppen
|
68
|
+
- vector_filter: { in: syn, lexicals: m }
|
69
|
+
- text_writer: { ext: mul, sep: '|' }
|
69
70
|
|
70
|
-
#
|
71
|
-
-
|
72
|
-
-
|
71
|
+
# Erstelle Datei mit Endung .seq für erkannte Wortsequenzen
|
72
|
+
- vector_filter: { in: syn, lexicals: q, sort: term_abs }
|
73
|
+
- text_writer: { ext: seq, sep: '|' }
|
73
74
|
|
74
|
-
#
|
75
|
-
-
|
76
|
-
-
|
75
|
+
# Erstelle Datei mit Endung .syn für erkannte Synonyme
|
76
|
+
- vector_filter: { in: syn, lexicals: y, sort: term_abs }
|
77
|
+
- text_writer: { ext: syn, sep: '|' }
|
@@ -5,7 +5,7 @@ require_relative '../test_helper'
|
|
5
5
|
class TestAttendeeAbbreviator < AttendeeTestCase
|
6
6
|
|
7
7
|
def test_basic
|
8
|
-
|
8
|
+
meet({ 'source' => 'sys-abk' }, [
|
9
9
|
tk('z.b|ABRV'), tk('.|PUNC'),
|
10
10
|
tk('im|WORD'),
|
11
11
|
tk('14.|NUMS'),
|
@@ -13,8 +13,7 @@ class TestAttendeeAbbreviator < AttendeeTestCase
|
|
13
13
|
tk('15.|NUMS'),
|
14
14
|
tk('Jh|WORD'), tk('.|PUNC'),
|
15
15
|
ai('EOL|')
|
16
|
-
]
|
17
|
-
@expect = [
|
16
|
+
], [
|
18
17
|
wd('z.b.|IDF', 'zum beispiel|w'),
|
19
18
|
tk('im|WORD'),
|
20
19
|
tk('14.|NUMS'),
|
@@ -22,8 +21,7 @@ class TestAttendeeAbbreviator < AttendeeTestCase
|
|
22
21
|
tk('15.|NUMS'),
|
23
22
|
wd('Jh.|IDF', 'jahrhundert|s'),
|
24
23
|
ai('EOL|')
|
25
|
-
]
|
26
|
-
meet({'source'=>'sys-abk'})
|
24
|
+
])
|
27
25
|
end
|
28
26
|
|
29
27
|
end
|
@@ -5,21 +5,19 @@ require_relative '../test_helper'
|
|
5
5
|
class TestAttendeeDecomposer < AttendeeTestCase
|
6
6
|
|
7
7
|
def test_basic
|
8
|
-
|
8
|
+
meet({ 'source' => 'sys-dic' }, [
|
9
9
|
wd('Kleinseite|?'),
|
10
10
|
wd('Arrafat-Nachfolger|?'),
|
11
11
|
wd('Afganistan-Reisen|?'),
|
12
12
|
wd('Kompositumzerlegung|?'),
|
13
13
|
wd('Kompositumzerlegung|?')
|
14
|
-
]
|
15
|
-
@expect = [
|
14
|
+
], [
|
16
15
|
wd('Kleinseite|KOM', 'kleinseite|k', 'klein|a+', 'seite|s+'),
|
17
16
|
wd('Arrafat-Nachfolger|KOM', 'arrafat-nachfolger|k', 'nachfolger|s+', 'arrafat|x+'),
|
18
17
|
wd('Afganistan-Reisen|KOM', 'afganistan-reise|k', 'reise|s+', 'reisen|v+', 'afganistan|x+'),
|
19
18
|
wd('Kompositumzerlegung|KOM', 'kompositumzerlegung|k', 'kompositum|s+', 'zerlegung|s+'),
|
20
19
|
wd('Kompositumzerlegung|KOM', 'kompositumzerlegung|k', 'kompositum|s+', 'zerlegung|s+')
|
21
|
-
]
|
22
|
-
meet({'source'=>'sys-dic'})
|
20
|
+
])
|
23
21
|
end
|
24
22
|
|
25
23
|
end
|