zenlish 0.2.02 → 0.2.03
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/lib/zenlish/inflect/inflection_table.rb +1 -1
- data/lib/zenlish/inflect/inflection_table_builder.rb +6 -2
- data/lib/zenlish/lang/dictionary.rb +4 -4
- data/lib/zenlish/version.rb +1 -1
- data/lib/zenlish/wclasses/irregular_verb_be.rb +53 -0
- data/lib/zenlish/wclasses/irregular_verb_do.rb +40 -0
- data/lib/zenlish/wclasses/irregular_verb_have.rb +40 -0
- data/spec/zenlish/lang/dictionary_spec.rb +43 -9
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5525de088c625d91774e9f3e33898026f720c697f8901a0dce1764f28137194e
|
4
|
+
data.tar.gz: 4c7be3992f7fa3535a7cba502ad34cf43ecbecb0925a85824dea9682452a4ed4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a729cc73a70e8ea628a02ed3133e16c7bb6bedacc70650d205562ee42cd367e1ebeab403c5699b6390649c8d78721f619e258c8540659a3e83963e688f6d274
|
7
|
+
data.tar.gz: ee8a24b35b41f87fab98c8d441a1a9051fafa07c44e1e8af5c7133a59f268440b883073cfd1cec2151856d23a8f8ae65c8bd0014eb178b8fbe92b19f138b4f1e
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,12 @@
|
|
1
1
|
# CHANGELOG
|
2
|
+
## [0.2.03] - 2020-02-07
|
3
|
+
Zenlish can now inflect the irregular verbs `be`, `do`, and `have`.
|
4
|
+
|
5
|
+
## Changed
|
6
|
+
- Class `WClass::IrreglarVerbBe`: added specific inflection table.
|
7
|
+
- Class `WClass::IrreglarVerbDo`: added specific inflection table.
|
8
|
+
- Class `WClass::IrreglarVerbHave`: added specific inflection table.
|
9
|
+
|
2
10
|
## [0.2.02] - 2020-02-06
|
3
11
|
Extending the inflection model to irregular verbs. Zenlish can inflect all irregular verbs in its dictionary (except modals and be).
|
4
12
|
|
@@ -23,7 +31,6 @@ Extending the inflection model to regular verbs. Zenlish can inflect all regular
|
|
23
31
|
- Class `Inflect::Membership` Now an inflection table can test whether a value is included in a set of values.
|
24
32
|
- Class `Inflect::NotEquals` Now an inflection table can test for inequality
|
25
33
|
|
26
|
-
|
27
34
|
## [0.2.00] - 2020-01-30
|
28
35
|
A lot of internal additions, such an initial feature model, embryonic inflection model.
|
29
36
|
This is WIP.
|
@@ -26,7 +26,7 @@ module Zenlish
|
|
26
26
|
else
|
27
27
|
theConstraints
|
28
28
|
end
|
29
|
-
err_msg = "Table has #{headings.size} headings."
|
29
|
+
err_msg = "Table has #{headings.size} headings, instead of #{constraints.size}"
|
30
30
|
raise StandardError, err_msg if constraints.size != headings.size
|
31
31
|
actuals = []
|
32
32
|
headings.each_with_index do |hd, idx|
|
@@ -83,13 +83,13 @@ module Zenlish
|
|
83
83
|
|
84
84
|
inequality_cond
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
def in?(*theMembers)
|
88
88
|
arg = FormalArgument.new(conds.size)
|
89
89
|
membership_cond = Membership.new(arg, theMembers)
|
90
90
|
conds << membership_cond
|
91
91
|
|
92
|
-
membership_cond
|
92
|
+
membership_cond
|
93
93
|
end
|
94
94
|
|
95
95
|
def dont_care
|
@@ -99,6 +99,10 @@ module Zenlish
|
|
99
99
|
item
|
100
100
|
end
|
101
101
|
|
102
|
+
def literal(aLiteral)
|
103
|
+
LiteralAsIs.new(aLiteral)
|
104
|
+
end
|
105
|
+
|
102
106
|
def col(aColName)
|
103
107
|
col_index = headings.find_index { |hd| hd.label == aColName }
|
104
108
|
err_msg = "Cannot find heading named '#{aColName}'."
|
@@ -71,9 +71,7 @@ unless defined?(Zenlish::Lang::Dictionary)
|
|
71
71
|
add_entry('difficult', 'Adjective')
|
72
72
|
add_entry('different', 'Adjective')
|
73
73
|
add_entry('do', 'AuxiliaryDo')
|
74
|
-
add_entry('do', 'IrregularVerbDo')
|
75
|
-
forms past_simple: 'did', past_participle: 'done'
|
76
|
-
end
|
74
|
+
add_entry('do', 'IrregularVerbDo')
|
77
75
|
add_entry('each', 'DistributiveDeterminer')
|
78
76
|
add_entry('each', 'Pronoun')
|
79
77
|
add_entry('exist', 'RegularVerb')
|
@@ -88,7 +86,9 @@ unless defined?(Zenlish::Lang::Dictionary)
|
|
88
86
|
add_entry('good', 'Adjective')
|
89
87
|
add_entry('have', 'IrregularVerbHave')
|
90
88
|
add_entry('happen', 'RegularVerb')
|
91
|
-
add_entry('hear', 'IrregularLinkingVerb')
|
89
|
+
add_entry('hear', 'IrregularLinkingVerb') do
|
90
|
+
forms past_simple: 'heard', past_participle: 'heard'
|
91
|
+
end
|
92
92
|
add_entry('here', 'Adverb')
|
93
93
|
# example: ...from here (works as a pronoun of a place)
|
94
94
|
add_entry('here', 'CommonNoun', {'NUMBER' => enumeration(:singular),
|
data/lib/zenlish/version.rb
CHANGED
@@ -4,6 +4,59 @@ module Zenlish
|
|
4
4
|
module WClasses
|
5
5
|
# The `be` verb used as a lexical verb (as opposed auxiliary verb).
|
6
6
|
class IrregularVerbBe < IrregularVerb
|
7
|
+
def initialize
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
|
11
|
+
# The mix-in module used to extend the lexeme
|
12
|
+
# @return [Module, NilClass]
|
13
|
+
def extension
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def init_feature_defs
|
20
|
+
super
|
21
|
+
# Create standard feature definitions for irregular verbs.
|
22
|
+
feature_def_dsl {
|
23
|
+
feature_def 'PARADIGM' => [identifier, 'Verb_be_inflection'] # 2nd item is default value
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def init_paradigms
|
28
|
+
builder = Inflect::InflectionTableBuilder.new
|
29
|
+
table = builder.build('Verb_be_inflection') do
|
30
|
+
feature_heading 'PERSON'
|
31
|
+
feature_heading 'NUMBER'
|
32
|
+
feature_heading 'TIME'
|
33
|
+
# PERSON NUMBER TIME
|
34
|
+
rule([equals(:first), equals(:singular), equals(:present) ], literal('am'))
|
35
|
+
rule([equals(:second), equals(:singular), equals(:present) ], literal('are'))
|
36
|
+
rule([equals(:third), equals(:singular), equals(:present) ], literal('is'))
|
37
|
+
rule([dont_care, equals(:plural), equals(:present) ], literal('are'))
|
38
|
+
rule([dont_care, dont_care, equals(:progressive) ], literal('being'))
|
39
|
+
rule([in?(:first, :third), equals(:singular), equals(:past_simple) ], literal('was'))
|
40
|
+
rule([equals(:second), equals(:singular), equals(:past_simple) ], literal('were'))
|
41
|
+
rule([dont_care, equals(:plural), equals(:past_simple) ], literal('were'))
|
42
|
+
rule([dont_care, dont_care, equals(:past_participle)], literal('been'))
|
43
|
+
end
|
44
|
+
add_paradigm(table)
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_paradigm(anInflectionTable)
|
48
|
+
@paradigms[anInflectionTable.name] = anInflectionTable
|
49
|
+
end
|
7
50
|
end # class
|
51
|
+
=begin
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
=end
|
8
61
|
end # module
|
9
62
|
end # module
|
@@ -4,6 +4,46 @@ module Zenlish
|
|
4
4
|
module WClasses
|
5
5
|
# The `do` verb used as a lexical verb (as opposed auxiliary verb).
|
6
6
|
class IrregularVerbDo < IrregularVerb
|
7
|
+
def initialize
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
|
11
|
+
# The mix-in module used to extend the lexeme
|
12
|
+
# @return [Module, NilClass]
|
13
|
+
def extension
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def init_feature_defs
|
20
|
+
super
|
21
|
+
# Create standard feature definitions for irregular verbs.
|
22
|
+
feature_def_dsl {
|
23
|
+
feature_def 'PARADIGM' => [identifier, 'Verb_do_inflection'] # 2nd item is default value
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def init_paradigms
|
28
|
+
builder = Inflect::InflectionTableBuilder.new
|
29
|
+
table = builder.build('Verb_do_inflection') do
|
30
|
+
feature_heading 'PERSON'
|
31
|
+
feature_heading 'NUMBER'
|
32
|
+
feature_heading 'TIME'
|
33
|
+
# PERSON NUMBER TIME
|
34
|
+
rule([not_equal(:third), equals(:singular), equals(:present) ], literal('do'))
|
35
|
+
rule([equals(:third), equals(:singular), equals(:present) ], literal('does'))
|
36
|
+
rule([dont_care, equals(:plural), equals(:present) ], literal('do'))
|
37
|
+
rule([dont_care, dont_care, equals(:progressive) ], literal('doing'))
|
38
|
+
rule([dont_care, dont_care, equals(:past_simple) ], literal('did'))
|
39
|
+
rule([dont_care, dont_care, equals(:past_participle)], literal('done'))
|
40
|
+
end
|
41
|
+
add_paradigm(table)
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_paradigm(anInflectionTable)
|
45
|
+
@paradigms[anInflectionTable.name] = anInflectionTable
|
46
|
+
end
|
7
47
|
end # class
|
8
48
|
end # module
|
9
49
|
end # module
|
@@ -4,6 +4,46 @@ module Zenlish
|
|
4
4
|
module WClasses
|
5
5
|
# The `have` verb used as a lexical verb (as opposed auxiliary verb).
|
6
6
|
class IrregularVerbHave < IrregularVerb
|
7
|
+
def initialize
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
|
11
|
+
# The mix-in module used to extend the lexeme
|
12
|
+
# @return [Module, NilClass]
|
13
|
+
def extension
|
14
|
+
nil
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def init_feature_defs
|
20
|
+
super
|
21
|
+
# Create standard feature definitions for irregular verbs.
|
22
|
+
feature_def_dsl {
|
23
|
+
feature_def 'PARADIGM' => [identifier, 'Verb_have_inflection'] # 2nd item is default value
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def init_paradigms
|
28
|
+
builder = Inflect::InflectionTableBuilder.new
|
29
|
+
table = builder.build('Verb_have_inflection') do
|
30
|
+
feature_heading 'PERSON'
|
31
|
+
feature_heading 'NUMBER'
|
32
|
+
feature_heading 'TIME'
|
33
|
+
# PERSON NUMBER TIME
|
34
|
+
rule([not_equal(:third), equals(:singular), equals(:present) ], literal('have'))
|
35
|
+
rule([equals(:third), equals(:singular), equals(:present) ], literal('has'))
|
36
|
+
rule([dont_care, equals(:plural), equals(:present) ], literal('have'))
|
37
|
+
rule([dont_care, dont_care, equals(:progressive) ], literal('having'))
|
38
|
+
rule([dont_care, dont_care, equals(:past_simple) ], literal('had'))
|
39
|
+
rule([dont_care, dont_care, equals(:past_participle)], literal('had'))
|
40
|
+
end
|
41
|
+
add_paradigm(table)
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_paradigm(anInflectionTable)
|
45
|
+
@paradigms[anInflectionTable.name] = anInflectionTable
|
46
|
+
end
|
7
47
|
end # class
|
8
48
|
end # module
|
9
49
|
end # module
|
@@ -27,16 +27,21 @@ module Zenlish
|
|
27
27
|
expect(common_nouns.all? { |c_n| lemmas.include?(c_n) }).to be_truthy
|
28
28
|
end
|
29
29
|
|
30
|
-
let(:present_1sg)
|
31
|
-
let(:
|
32
|
-
let(:
|
33
|
-
let(:
|
34
|
-
let(:
|
35
|
-
let(:
|
30
|
+
let(:present_1sg) { [:first, :singular, :present, nil] }
|
31
|
+
let(:present_2sg) { [:second, :singular, :present, nil] }
|
32
|
+
let(:present_3sg) { [:third, :singular, :present, nil] }
|
33
|
+
let(:present_1pl) { [:first, :plural, :present, nil] }
|
34
|
+
let(:progressive) { [nil, nil, :progressive, nil] }
|
35
|
+
let(:past_simple) { [:first, :singular, :past_simple, nil] }
|
36
|
+
let(:past_simple_2sg) { [:second, :singular, :past_simple, nil] }
|
37
|
+
let(:past_simple_3sg) { [:third, :singular, :past_simple, nil] }
|
38
|
+
let(:past_simple_1pl) { [:first, :plural, :past_simple, nil] }
|
39
|
+
let(:past_participle) { [nil, nil, :past_participle, nil] }
|
36
40
|
|
37
|
-
def test_inflection_of(verb_lexeme, pairs)
|
41
|
+
def test_inflection_of(verb_lexeme, pairs, drop_last_column = false)
|
38
42
|
pairs.each do |(constraints, expected_form)|
|
39
|
-
|
43
|
+
restriction = drop_last_column ? constraints.slice(0..-2) : constraints
|
44
|
+
expect(verb_lexeme.inflect(restriction)).to eq(expected_form)
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
@@ -61,8 +66,37 @@ module Zenlish
|
|
61
66
|
[past_simple, 'did'],
|
62
67
|
[past_participle, 'done']
|
63
68
|
]
|
64
|
-
test_inflection_of(lexm, expectations_2)
|
69
|
+
test_inflection_of(lexm, expectations_2, true)
|
70
|
+
|
71
|
+
lexm = subject.get_lexeme('have', WClasses::IrregularVerbHave)
|
72
|
+
expectations_3 = [
|
73
|
+
[present_1sg, 'have'],
|
74
|
+
[present_3sg, 'has'],
|
75
|
+
[present_1pl, 'have'],
|
76
|
+
[progressive, 'having'],
|
77
|
+
[past_simple, 'had'],
|
78
|
+
[past_participle, 'had']
|
79
|
+
]
|
80
|
+
test_inflection_of(lexm, expectations_3, true)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should know how to inflect the verb be' do
|
84
|
+
lexm = subject.get_lexeme('be', WClasses::IrregularVerbBe)
|
85
|
+
expectations_1 = [
|
86
|
+
[present_1sg, 'am'],
|
87
|
+
[present_2sg, 'are'],
|
88
|
+
[present_3sg, 'is'],
|
89
|
+
[present_1pl, 'are'],
|
90
|
+
[progressive, 'being'],
|
91
|
+
[past_simple, 'was'],
|
92
|
+
[past_simple_2sg, 'were'],
|
93
|
+
[past_simple_3sg, 'was'],
|
94
|
+
[past_simple_1pl, 'were'],
|
95
|
+
[past_participle, 'been']
|
96
|
+
]
|
97
|
+
test_inflection_of(lexm, expectations_1, true)
|
65
98
|
end
|
99
|
+
|
66
100
|
end # context
|
67
101
|
end # describe
|
68
102
|
end # module
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zenlish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.03
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rley
|