zenlish 0.1.0 → 0.1.01
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 +25 -0
- data/README.md +1 -0
- data/lib/zenlish/lex/empty_lexicon_factory.rb +9 -7
- data/lib/zenlish/parser/zenlish_grammar.rb +21 -10
- data/lib/zenlish/version.rb +1 -1
- data/lib/zenlish/wclasses/all_word_classes.rb +2 -0
- data/lib/zenlish/wclasses/cardinal.rb +9 -0
- data/lib/zenlish/wclasses/comparative_particle.rb +10 -0
- data/lib/zenlish/wclasses/numeral.rb +9 -0
- data/spec/zenlish/parser/zparser_spec.rb +68 -43
- data/spec/zenlish/support/minimal_lexicon.rb +17 -6
- data/zenlish.gemspec +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f528c0f3df40d32748dde807e2ce52554640228b52595f7509b7f00ca0799f7d
|
4
|
+
data.tar.gz: 5845c212c6850e767720bf2eef53e8ff4fc0cebf7eac93c77d6fe30ab70c852c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecb70f4531e577ecbb15772edc118a3fc0c4b9cd06cc7c62dbe404cc4be2cbe576465d92678fadde229414ee55ad40c068d8a5e76a34ae2726616d450211263c
|
7
|
+
data.tar.gz: 21854cf7b004a6def164ee239448a8ef0dc9a93ff4c490f9f1e505b52dc16a6080c3323a8aeeafff5ff8741d3a92eac281e891baf533b7f72531e7787b76445b
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
|
3
|
+
## [0.1.01] - 2019-10-10
|
4
|
+
__Zenlish__ can parse all the sentences in lessons 1-A, 1-B from [Learn These Words First](http://learnthesewordsfirst.com/).
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- Class `Cardinal` to represent the abstract word class for cardinal and ordinal numbers.
|
8
|
+
- Class `Cardinal` to represent the word class of cardinal numbers.
|
9
|
+
- Class `ComparativeArticle` to represent the word class of the `as` in `same as`.
|
10
|
+
- File `empty_lexion_factory.rb`: added the `Cardinal` and `ComparativeArticle` as word classes in lexicon.
|
11
|
+
- File `minimal_lexicon.rb`: new entries in lexicon `as` (from same ... as expression),
|
12
|
+
`one`, `two`, `person` , `people.`
|
13
|
+
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
- File `README.md` added Rubygems badge.
|
17
|
+
- File `zparser_spec.rb`: tests include all sentences from lesson 1-B.
|
18
|
+
- `ZenlishGrammar`: grammar refactoring and extension.
|
19
|
+
|
20
|
+
|
21
|
+
### Fixed
|
22
|
+
- File `zenlish.gemspec`: fixed typo in a Github hyperlink.
|
23
|
+
|
24
|
+
## [0.1.0] - 2019-10-06
|
25
|
+
Initial project commit in Github and first gem version released.
|
data/README.md
CHANGED
@@ -15,13 +15,15 @@ module Zenlish
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def add_word_classes(aLexicon)
|
18
|
-
aLexicon.add_terminal(WClasses::
|
19
|
-
aLexicon.add_terminal(WClasses::
|
20
|
-
aLexicon.add_terminal(WClasses::
|
21
|
-
aLexicon.add_terminal(WClasses::
|
22
|
-
aLexicon.add_terminal(WClasses::DefiniteArticle.new)
|
23
|
-
aLexicon.add_terminal(WClasses::DemonstrativeDeterminer.new)
|
24
|
-
aLexicon.add_terminal(WClasses::IndefinitePronoun.new)
|
18
|
+
aLexicon.add_terminal(WClasses::Adjective.new.freeze)
|
19
|
+
aLexicon.add_terminal(WClasses::Cardinal.new.freeze)
|
20
|
+
aLexicon.add_terminal(WClasses::CommonNoun.new.freeze)
|
21
|
+
aLexicon.add_terminal(WClasses::ComparativeParticle.new.freeze)
|
22
|
+
aLexicon.add_terminal(WClasses::DefiniteArticle.new.freeze)
|
23
|
+
aLexicon.add_terminal(WClasses::DemonstrativeDeterminer.new.freeze)
|
24
|
+
aLexicon.add_terminal(WClasses::IndefinitePronoun.new.freeze)
|
25
|
+
aLexicon.add_terminal(WClasses::IrregularVerb.new.freeze)
|
26
|
+
aLexicon.add_terminal(WClasses::ProperNoun.new.freeze)
|
25
27
|
end
|
26
28
|
|
27
29
|
def add_punctuation(aLexicon)
|
@@ -12,18 +12,29 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
12
12
|
|
13
13
|
rule 'language' => 'sentence'
|
14
14
|
rule 'sentence' => 'simple_sentence'
|
15
|
-
rule 'simple_sentence' => 'declarative_simple_sentence'
|
16
|
-
rule 'declarative_simple_sentence' => 'noun_phrase verb_phrase
|
17
|
-
rule 'noun_phrase' => '
|
18
|
-
rule '
|
19
|
-
rule '
|
20
|
-
rule '
|
15
|
+
rule 'simple_sentence' => 'declarative_simple_sentence Period'
|
16
|
+
rule 'declarative_simple_sentence' => 'noun_phrase verb_phrase'
|
17
|
+
rule 'noun_phrase' => 'noun_bar'
|
18
|
+
rule 'noun_phrase' => 'determiner noun_bar'
|
19
|
+
rule 'noun_phrase' => 'numeral noun_bar'
|
20
|
+
rule 'noun_phrase' => 'determiner numeral noun_bar'
|
21
|
+
rule 'noun_phrase' => 'ProperNoun'
|
22
|
+
rule 'noun_phrase' => 'IndefinitePronoun'
|
23
|
+
rule 'noun_bar' => 'CommonNoun'
|
24
|
+
rule 'noun_bar' => 'Adjective CommonNoun'
|
25
|
+
rule 'noun_bar' => 'Adjective CommonNoun comparative_clause'
|
26
|
+
rule 'determiner' => 'DemonstrativeDeterminer'
|
27
|
+
rule 'determiner' => 'DefiniteArticle'
|
28
|
+
rule 'verb_phrase' => 'lexical_verb'
|
29
|
+
rule 'verb_phrase' => 'lexical_verb noun_phrase'
|
21
30
|
rule 'lexical_verb' => 'IrregularVerb'
|
22
|
-
rule '
|
23
|
-
rule '
|
24
|
-
rule '
|
25
|
-
rule 'complement' => 'DefiniteArticle Adjective CommonNoun'
|
31
|
+
rule 'numeral' => 'Cardinal'
|
32
|
+
rule 'comparative_clause' => 'comparative_start noun_phrase verb_phrase'
|
33
|
+
rule 'comparative_start' => 'ComparativeParticle'
|
26
34
|
end
|
27
35
|
|
36
|
+
# CGE p. 354 The order of determiners: quantifier > article or demonstrative
|
37
|
+
# or possessive > numeral > head
|
38
|
+
|
28
39
|
# And now build the grammar...
|
29
40
|
ZenlishGrammar = builder.grammar
|
data/lib/zenlish/version.rb
CHANGED
@@ -16,69 +16,94 @@ module Zenlish
|
|
16
16
|
end
|
17
17
|
end # context
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
19
|
+
def get_lexeme(aLemma)
|
20
|
+
$ZenlishLexicon.get_lexeme(aLemma)
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
Lex::Literal.new('thing', $ZenlishLexicon.get_lexeme('thing'), 0)
|
23
|
+
def as ; Lex::Literal.new('as', get_lexeme('as'), 0) ; end
|
24
|
+
def lisa ; Lex::Literal.new('Lisa', get_lexeme('Lisa'), 0) ; end
|
25
|
+
def one ; Lex::Literal.new('one', get_lexeme('one'), 0) ; end
|
26
|
+
def two ; Lex::Literal.new('two', get_lexeme('two'), 0) ; end
|
27
|
+
def other ; Lex::Literal.new('other', get_lexeme('other'), 0) ; end
|
28
|
+
def people ; Lex::Literal.new('people', get_lexeme('people'), 0) ; end
|
29
|
+
def person ; Lex::Literal.new('person', get_lexeme('person'), 0) ; end
|
30
|
+
def same ; Lex::Literal.new('same', get_lexeme('same'), 0) ; end
|
31
|
+
def sees ; Lex::Literal.new('sees', get_lexeme('see'), 0) ; end
|
32
|
+
def something ; Lex::Literal.new('something', get_lexeme('something'), 0) ; end
|
33
|
+
def the ; Lex::Literal.new('the', get_lexeme('the'), 0) ; end
|
34
|
+
def thing ; Lex::Literal.new('thing', get_lexeme('thing'), 0) ; end
|
35
|
+
def things ; Lex::Literal.new('things', get_lexeme('thing'), 0) ; end
|
36
|
+
def this ; Lex::Literal.new('this', get_lexeme('this'), 0) ; end
|
37
|
+
def tony ; Lex::Literal.new('Tony', get_lexeme('Tony'), 0) ; end
|
38
|
+
def dot ; Lex::Literal.new('.', get_lexeme('.'), 0) ; end
|
39
|
+
|
40
|
+
class ZProxy
|
41
|
+
attr_reader :literal
|
42
|
+
|
43
|
+
def initialize(aTarget)
|
44
|
+
@literal = aTarget
|
47
45
|
end
|
48
|
-
|
49
|
-
|
46
|
+
|
47
|
+
def method_missing(name, *args, &aBlock)
|
48
|
+
puts "#{literal.lexeme} about to receive #{name}"
|
49
|
+
$stdout.flush
|
50
|
+
literal.send(name, *args, &aBlock)
|
50
51
|
end
|
52
|
+
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
+
context 'Parsing lessons:' do
|
55
|
+
it 'should parse sample sentences from lesson 1-A' do
|
56
|
+
# Sentence 1-01: "Tony sees Lisa."
|
54
57
|
# in absence of a tokenizer, we create a sequence of literals by hand...
|
58
|
+
# prox_tony = ZProxy.new(tony)
|
55
59
|
literals = [tony, sees, lisa, dot]
|
56
60
|
expect { subject.parse(literals) }.not_to raise_error
|
57
|
-
end
|
58
61
|
|
59
|
-
|
60
|
-
# Sentence is: "Tony sees something."
|
62
|
+
# Sentence 1-02a: "Tony sees something."
|
61
63
|
sentence_literals = [tony, sees, something, dot]
|
62
64
|
expect { subject.parse(sentence_literals) }.not_to raise_error
|
63
|
-
end
|
64
65
|
|
65
|
-
|
66
|
-
# Sentence is: "Lisa sees something"
|
66
|
+
# Sentence 1-02b: "Lisa sees something."
|
67
67
|
sentence_literals = [lisa, sees, something, dot]
|
68
68
|
expect { subject.parse(sentence_literals) }.not_to raise_error
|
69
|
-
end
|
70
69
|
|
71
|
-
|
72
|
-
# Sentence is: "Tony sees this thing."
|
70
|
+
# Sentence 1-03: "Tony sees this thing."
|
73
71
|
sentence_literals = [tony, sees, this, thing, dot]
|
74
72
|
expect { subject.parse(sentence_literals) }.not_to raise_error
|
75
|
-
end
|
76
73
|
|
77
|
-
|
78
|
-
# Sentence is: "Lisa sees the other thing."
|
74
|
+
# Sentence 1-04: "Lisa sees the other thing."
|
79
75
|
sentence_literals = [lisa, sees, the, other, thing, dot]
|
80
76
|
expect { subject.parse(sentence_literals) }.not_to raise_error
|
81
77
|
end
|
78
|
+
|
79
|
+
it 'should parse sample sentences from lesson 1-B' do
|
80
|
+
# Sentence 1-05a: "Lisa sees the same thing."
|
81
|
+
literals = [lisa, sees, the, same, thing, dot]
|
82
|
+
expect { subject.parse(literals) }.not_to raise_error
|
83
|
+
|
84
|
+
# Sentence 1-05b: "Lisa sees the same thing as Tony sees."
|
85
|
+
literals = [lisa, sees, the, same, thing, as, tony, sees, dot]
|
86
|
+
# same is an adjective of equality comparison
|
87
|
+
# as is part of same ... as combination
|
88
|
+
# it introduces a comparative clause
|
89
|
+
expect { subject.parse(literals) }.not_to raise_error
|
90
|
+
|
91
|
+
# Sentence 1-06: "Tony sees one thing."
|
92
|
+
literals = [tony, sees, one, thing, dot]
|
93
|
+
expect { subject.parse(literals) }.not_to raise_error
|
94
|
+
|
95
|
+
# Sentence 1-07: "Lisa sees two things."
|
96
|
+
literals = [lisa, sees, two, things, dot]
|
97
|
+
expect { subject.parse(literals) }.not_to raise_error
|
98
|
+
|
99
|
+
# Sentence 1-08a: "Tony sees one person."
|
100
|
+
literals = [tony, sees, one, person, dot]
|
101
|
+
expect { subject.parse(literals) }.not_to raise_error
|
102
|
+
|
103
|
+
# Sentence 1-08b: "Lisa sees two people."
|
104
|
+
literals = [lisa, sees, two, people, dot]
|
105
|
+
expect { subject.parse(literals) }.not_to raise_error
|
106
|
+
end
|
82
107
|
end # context
|
83
108
|
end # describe
|
84
109
|
end # module
|
@@ -3,11 +3,6 @@ require_relative '../../../lib/zenlish/lex/lexical_entry'
|
|
3
3
|
require_relative '../../../lib/zenlish/lex/lexeme'
|
4
4
|
require_relative '../../../lib/zenlish/lex/lexicon'
|
5
5
|
|
6
|
-
def add_entry(aLemma, aWordClass)
|
7
|
-
entry = Zenlish::Lex::LexicalEntry.new(aLemma)
|
8
|
-
lexeme = Zenlish::Lex::Lexeme.new(aWordClass, entry)
|
9
|
-
$ZenlishLexicon.add_entry(entry)
|
10
|
-
end
|
11
6
|
|
12
7
|
common_noun = $ZenlishLexicon.name2terminal['CommonNoun']
|
13
8
|
adjective = $ZenlishLexicon.name2terminal['Adjective']
|
@@ -15,16 +10,32 @@ proper_noun = $ZenlishLexicon.name2terminal['ProperNoun']
|
|
15
10
|
irregular_verb = $ZenlishLexicon.name2terminal['IrregularVerb']
|
16
11
|
indefinite_pronoun = $ZenlishLexicon.name2terminal['IndefinitePronoun']
|
17
12
|
demonstrative_determiner = $ZenlishLexicon.name2terminal['DemonstrativeDeterminer']
|
18
|
-
definite_article =
|
13
|
+
definite_article = $ZenlishLexicon.name2terminal['DefiniteArticle']
|
14
|
+
cardinal = $ZenlishLexicon.name2terminal['Cardinal']
|
15
|
+
comparative_particle = $ZenlishLexicon.name2terminal['ComparativeParticle']
|
19
16
|
dot = $ZenlishLexicon.name2terminal['Period']
|
20
17
|
|
18
|
+
def add_entry(aLemma, aWordClass)
|
19
|
+
entry = Zenlish::Lex::LexicalEntry.new(aLemma)
|
20
|
+
raise StandardError, 'Unregistered word class' unless aWordClass
|
21
|
+
lexeme = Zenlish::Lex::Lexeme.new(aWordClass, entry).freeze
|
22
|
+
$ZenlishLexicon.add_entry(entry.freeze)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Our minimalistic lexicon
|
26
|
+
add_entry('as', comparative_particle)
|
21
27
|
add_entry('Lisa', proper_noun)
|
28
|
+
add_entry('one', cardinal)
|
22
29
|
add_entry('other', adjective)
|
30
|
+
add_entry('people', common_noun)
|
31
|
+
add_entry('person', common_noun)
|
32
|
+
add_entry('same', adjective)
|
23
33
|
add_entry('see', irregular_verb)
|
24
34
|
add_entry('something', indefinite_pronoun)
|
25
35
|
add_entry('the', definite_article)
|
26
36
|
add_entry('thing', common_noun)
|
27
37
|
add_entry('this', demonstrative_determiner)
|
28
38
|
add_entry('Tony', proper_noun)
|
39
|
+
add_entry('two', cardinal)
|
29
40
|
|
30
41
|
add_entry('.', dot)
|
data/zenlish.gemspec
CHANGED
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
|
43
43
|
spec.summary = %q{A toolkit for the Zenlish language (a simplified English language).}
|
44
44
|
spec.description = %q{A toolkit for the Zenlish language (a simplified English language).}
|
45
|
-
spec.homepage = "https://github.com/famished-tiger/zenlish
|
45
|
+
spec.homepage = "https://github.com/famished-tiger/zenlish"
|
46
46
|
spec.license = 'MIT'
|
47
47
|
|
48
48
|
spec.bindir = 'exe'
|
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.1.
|
4
|
+
version: 0.1.01
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitri Geshef
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rley
|
@@ -76,6 +76,7 @@ extra_rdoc_files:
|
|
76
76
|
files:
|
77
77
|
- ".rspec"
|
78
78
|
- ".yardopts"
|
79
|
+
- CHANGELOG.md
|
79
80
|
- Gemfile
|
80
81
|
- LICENSE.txt
|
81
82
|
- README.md
|
@@ -93,7 +94,9 @@ files:
|
|
93
94
|
- lib/zenlish/wclasses/adjective.rb
|
94
95
|
- lib/zenlish/wclasses/all_word_classes.rb
|
95
96
|
- lib/zenlish/wclasses/article.rb
|
97
|
+
- lib/zenlish/wclasses/cardinal.rb
|
96
98
|
- lib/zenlish/wclasses/common_noun.rb
|
99
|
+
- lib/zenlish/wclasses/comparative_particle.rb
|
97
100
|
- lib/zenlish/wclasses/definite_article.rb
|
98
101
|
- lib/zenlish/wclasses/demonstrative_determiner.rb
|
99
102
|
- lib/zenlish/wclasses/determiner.rb
|
@@ -101,6 +104,7 @@ files:
|
|
101
104
|
- lib/zenlish/wclasses/irregular_verb.rb
|
102
105
|
- lib/zenlish/wclasses/lexical_verb.rb
|
103
106
|
- lib/zenlish/wclasses/noun.rb
|
107
|
+
- lib/zenlish/wclasses/numeral.rb
|
104
108
|
- lib/zenlish/wclasses/pronoun.rb
|
105
109
|
- lib/zenlish/wclasses/proper_noun.rb
|
106
110
|
- lib/zenlish/wclasses/test_hierarchy.rb
|
@@ -120,7 +124,7 @@ files:
|
|
120
124
|
- spec/zenlish/wclasses/proper_noun_spec.rb
|
121
125
|
- spec/zenlish_spec.rb
|
122
126
|
- zenlish.gemspec
|
123
|
-
homepage: https://github.com/famished-tiger/zenlish
|
127
|
+
homepage: https://github.com/famished-tiger/zenlish
|
124
128
|
licenses:
|
125
129
|
- MIT
|
126
130
|
metadata: {}
|