zenlish 0.1.13 → 0.1.14
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 +16 -0
- data/README.md +181 -139
- data/lib/zenlish/lang/dictionary.rb +109 -0
- data/lib/zenlish/{parser → lang}/zenlish_grammar.rb +31 -11
- data/lib/zenlish/lex/empty_lexicon_factory.rb +3 -0
- data/lib/zenlish/lex/lexeme.rb +11 -6
- data/lib/zenlish/parser/zparser.rb +1 -1
- data/lib/zenlish/version.rb +1 -1
- data/lib/zenlish/wclasses/all_word_classes.rb +3 -0
- data/lib/zenlish/wclasses/irregular_verb_know.rb +9 -0
- data/lib/zenlish/wclasses/irregular_verb_think.rb +9 -0
- data/lib/zenlish/wclasses/personal_pronoun.rb +12 -0
- data/lib/zenlish.rb +2 -1
- data/spec/zenlish/{parser → lang}/zenlish_grammar_spec.rb +1 -1
- data/spec/zenlish/parser/zparser_spec.rb +98 -3
- data/spec/zenlish/support/minimal_lexicon.rb +5 -132
- metadata +9 -6
- data/lib/zenlish/lex/empty_lexicon.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01e0c43e4804049c23ed6eca8272d7ad968bd24aa136710317925eef885f3e58
|
4
|
+
data.tar.gz: eb9d2697419c830b2e4598ed4ed050d0413f6577237fd975376d61c9d79d7f1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f36e1611d1e208f3d310c0efc82e584e37552764a3ea465b70cfbc69d88f5f952a53b8720f51191f50eb1540f7dd10088fed4111861dfd997c14c8aab0f7d337
|
7
|
+
data.tar.gz: 3801a22a41463933ba58ff4931cee97ffe1d1fc8c34462be16df9e64f2ec6790738d8febacf72c1178adf7bfb7951ebacdb69dc7113a69bbd4f2b259096b9441
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## [0.1.14] - 2019-11-01
|
4
|
+
__Zenlish__ can parse all sentences in lesson 1 and 2-A..2-F from
|
5
|
+
[Learn These Words First](http://learnthesewordsfirst.com/).
|
6
|
+
|
7
|
+
### Added
|
8
|
+
- Class `IrregularVerbKnow` to represent the verb `know`.
|
9
|
+
- Class `IrregularVerbThink` to represent the verb `think`.
|
10
|
+
- Class `PersonalPronoun` to represent the pronouns `I`, `you`.
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
- Folder structure under `lib` and `spec`.
|
14
|
+
- File `zparser_spec.rb`: tests include all sentences from lesson 2-E (136 sentences in total).
|
15
|
+
- `ZenlishGrammar`: new production rules for multiple sentence parsing, personal pronouns and dependent clauses without conjunctions.
|
16
|
+
- File `dictionary.rb`: new entries in lexicon `I`, `me`, `you`, `here`, `now`.
|
17
|
+
- File `README.md` Reshuffled sections, added one code snippet, updated the metrics table
|
18
|
+
|
3
19
|
## [0.1.13] - 2019-10-28
|
4
20
|
__Zenlish__ can parse all sentences in lesson 1 and 2-A..2-E from
|
5
21
|
[Learn These Words First](http://learnthesewordsfirst.com/).
|
data/README.md
CHANGED
@@ -1,139 +1,181 @@
|
|
1
|
-
# Zenlish
|
2
|
-
[](https://travis-ci.org/famished-tiger/Zenlish)
|
3
|
-
[](https://ci.appveyor.com/project/famished-tiger/zenlish)
|
4
|
-
[](https://badge.fury.io/rb/zenlish)
|
5
|
-
[](https://github.com/famished-tiger/Zenlish/blob/master/LICENSE.txt)
|
6
|
-
### What is __Zenlish__ ?
|
7
|
-
|
8
|
-
Zenlish = Zen + English
|
9
|
-
|
10
|
-
__Zenlish__ will be a Controlled Natural Language based on English.
|
11
|
-
A [Controlled Natural Language](https://en.wikipedia.org/wiki/Controlled_natural_language)
|
12
|
-
is a subset of a natural language -here English- limited to specific problem domains.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
- A
|
32
|
-
- A
|
33
|
-
-
|
34
|
-
- A
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
1
|
+
# Zenlish
|
2
|
+
[](https://travis-ci.org/famished-tiger/Zenlish)
|
3
|
+
[](https://ci.appveyor.com/project/famished-tiger/zenlish)
|
4
|
+
[](https://badge.fury.io/rb/zenlish)
|
5
|
+
[](https://github.com/famished-tiger/Zenlish/blob/master/LICENSE.txt)
|
6
|
+
### What is __Zenlish__ ?
|
7
|
+
|
8
|
+
Zenlish = Zen + English
|
9
|
+
|
10
|
+
__Zenlish__ will be a Controlled Natural Language based on English.
|
11
|
+
A [Controlled Natural Language](https://en.wikipedia.org/wiki/Controlled_natural_language)
|
12
|
+
is a subset of a natural language -here English- limited to specific problem domains.
|
13
|
+
|
14
|
+
|
15
|
+
### What is the purpose of __Zenlish__ ?
|
16
|
+
The goal of this project is to implement a toolkit for a subset of the English language.
|
17
|
+
With __Zenlish__ it should be possible for a Ruby application to interact with
|
18
|
+
users with a language that is close enough to English.
|
19
|
+
|
20
|
+
### Project status
|
21
|
+
|
22
|
+
The project is still in inception. Currently, zenlish is able to parse all
|
23
|
+
sentences of the first lesson.
|
24
|
+
|
25
|
+
The intent is to deliver gem versions in small increments.
|
26
|
+
|
27
|
+
#### Zenlish as a library (gem)
|
28
|
+
Over time, the zenlish gem will contain:
|
29
|
+
- A tokenizer (tagging, lemmatizer)[TODO]
|
30
|
+
- A lexicon [STARTED]
|
31
|
+
- A context-free grammar [STARTED]
|
32
|
+
- A parser [STARTED]
|
33
|
+
- Feature unification (for number, gender agreement)[TODO]
|
34
|
+
- A simplified ontology[TODO]
|
35
|
+
|
36
|
+
|
37
|
+
#### Some project metrics (v. 0.1.14)
|
38
|
+
|Metric|Value|
|
39
|
+
|:-:|:-:|
|
40
|
+
| Number of lemmas in dictionary | 80 |
|
41
|
+
| [Coverage 100 commonest English words](https://en.wikipedia.org/wiki/Most_common_words_in_English) | 43 |
|
42
|
+
| Number of production rules in grammar | 116 |
|
43
|
+
| Number of lessons covered | 14 |
|
44
|
+
| Number of sentences in spec files | 136 |
|
45
|
+
|
46
|
+
|
47
|
+
## Installation...
|
48
|
+
### ...with Rubygem
|
49
|
+
Install the gem yourself as:
|
50
|
+
|
51
|
+
$ gem install zenlish
|
52
|
+
|
53
|
+
### ...with Bundler
|
54
|
+
Add this line to your application's Gemfile:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
gem 'zenlish'
|
58
|
+
```
|
59
|
+
|
60
|
+
And then execute:
|
61
|
+
|
62
|
+
$ bundle
|
63
|
+
|
64
|
+
|
65
|
+
### Some code snippets
|
66
|
+
|
67
|
+
#### Interacting with the dictionary:
|
68
|
+
```ruby
|
69
|
+
require 'zenlish'
|
70
|
+
|
71
|
+
# Retrieving a "word" (more precisely, a lexeme) from the dictionary.
|
72
|
+
lexeme = Zenlish::Lang::Dictionary.get_lexeme('move')
|
73
|
+
|
74
|
+
# What is the Ruby class of a lexeme?
|
75
|
+
p lexeme.class # => Zenlish::Lex::Lexeme
|
76
|
+
|
77
|
+
# What is the word class of verb 'move'?
|
78
|
+
p lexeme.wclass.class # => Zenlish::WClasses::RegularVerb
|
79
|
+
|
80
|
+
# Here is some Zenlish text to analyze:
|
81
|
+
some_text = 'one person can move to the same place.'
|
82
|
+
p some_text
|
83
|
+
|
84
|
+
some_text.scan(/(?:\w+)|[\.,:"]/).each do |entry|
|
85
|
+
lexeme = Zenlish::Lang::Dictionary.get_lexeme(entry)
|
86
|
+
p lexeme.wclass.class
|
87
|
+
end
|
88
|
+
|
89
|
+
# Loop result should be:
|
90
|
+
# Zenlish::WClasses::Cardinal
|
91
|
+
# Zenlish::WClasses::CommonNoun
|
92
|
+
# Zenlish::WClasses::ModalVerbCan
|
93
|
+
# Zenlish::WClasses::RegularVerb
|
94
|
+
# Zenlish::WClasses::Preposition
|
95
|
+
# Zenlish::WClasses::DefiniteArticle
|
96
|
+
# Zenlish::WClasses::Adjective
|
97
|
+
# Zenlish::WClasses::CommonNoun
|
98
|
+
# Rley::Syntax::Terminal
|
99
|
+
```
|
100
|
+
|
101
|
+
More to come...
|
102
|
+
|
103
|
+
## Principles behind the Zenlish language
|
104
|
+
|
105
|
+
|
106
|
+
#### Minimalism
|
107
|
+
The name of the language is a combination of 'Zen' and 'English'.
|
108
|
+
It reflects a desire to make Zenlish a simple language:
|
109
|
+
- The focus is put on a simplified syntax,
|
110
|
+
- A limited lexicon. Priority on most commonly used words.
|
111
|
+
|
112
|
+
|
113
|
+
#### Expressiveness
|
114
|
+
Zenlish should be rich enough to express ideas, facts in a fluid way (vs. contrived, artificial way).
|
115
|
+
Litmus test: a Zenlish text should be easy to read to a English reading person.
|
116
|
+
|
117
|
+
|
118
|
+
## Roadmap
|
119
|
+
|
120
|
+
Here a tentative roadmap:
|
121
|
+
|
122
|
+
#### A) Ability to parse sentences from [Learn These Words First](http://learnthesewordsfirst.com/)
|
123
|
+
*STARTED*. 14.5% complete
|
124
|
+
This website advocates the idea of a multi-layered dictionary.
|
125
|
+
At the core, there are about 300 essential words.
|
126
|
+
The choice of these words is inspired by the semantic primitives of [NSM
|
127
|
+
(Natural Semantic Metalanguage)](https://en.wikipedia.org/wiki/Natural_semantic_metalanguage).
|
128
|
+
The essential words are introduced in twelve lessons. Each lesson put the words
|
129
|
+
in exemplar sentences and pictures.
|
130
|
+
|
131
|
+
The milestone sub-goals are:
|
132
|
+
- To inject the 300 core words into Zenlish lexicon,
|
133
|
+
- Zenlish should be able to parse all the example sentences
|
134
|
+
|
135
|
+
#### B) Associate lexical features to terms in lexicon
|
136
|
+
The sub-goals are:
|
137
|
+
- To enrich the lexicon entries with lexical and syntactical features.
|
138
|
+
- Zenlish should be able to derive the declensions of nouns, conjugation of verbs,
|
139
|
+
- Also Zenlish should detect agreement errors
|
140
|
+
- Ideally, Zenlish should have a lemmatizer
|
141
|
+
|
142
|
+
#### C) Enrich lexicon entries with semantical features and relationships
|
143
|
+
The sub-goals are:
|
144
|
+
- To enrich the lexicon entries with lexical and syntactical features.
|
145
|
+
- Zenlish should be able to derive the declensions of nouns, conjugation of verbs,
|
146
|
+
- Also Zenlish should detect agreement errors
|
147
|
+
|
148
|
+
#### D) Build a generic ontology and map Zenlish text to it.
|
149
|
+
The sub-goals are:
|
150
|
+
- To have a simplified ontology that covers the concepts covered in the lesson sentences.
|
151
|
+
- Hopefully Zenlish should be answer to queries related to the lesson sentences.
|
152
|
+
|
153
|
+
#### E) Capability to parse a complete book
|
154
|
+
A good candidate book is "The Edge of the Sky" by Roberto Trotta (ISBN 978-0-465-04471-9 : hardcover, ISBN 978-0-465-04490-0 : ebook).
|
155
|
+
Professor Trotta challenged himself by writing a book on Cosmology with the 1000 most used words. More details [here](http://robertotrotta.com/the-edge-of-the-sky/).
|
156
|
+
|
157
|
+
In order to achieve this goal, Zenlish should:
|
158
|
+
- Incorporate the 1000 words in its lexicon
|
159
|
+
- Have a grammar that allows the parsing of the sentences in the book.
|
160
|
+
|
161
|
+
#### F) Capability to interpret the meaning of a complete book
|
162
|
+
Probably, far-fetched. But it will be nice to launch query to Zenlish to check if
|
163
|
+
it has some understanding of the text it reads (i.e. has a semantic representation).
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
## Usage
|
168
|
+
|
169
|
+
TODO: Write usage instructions here
|
170
|
+
|
171
|
+
## Contributing
|
172
|
+
|
173
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/famished-tiger/Zenlish. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
174
|
+
|
175
|
+
## License
|
176
|
+
|
177
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
178
|
+
|
179
|
+
## Code of Conduct
|
180
|
+
|
181
|
+
Everyone interacting in the Zenlish project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/famished-tiger/Zenlish/blob/master/CODE_OF_CONDUCT.md).
|
@@ -0,0 +1,109 @@
|
|
1
|
+
unless defined?(Zenlish::Lang::Dictionary)
|
2
|
+
module Zenlish
|
3
|
+
module Lang
|
4
|
+
require_relative '../lex/empty_lexicon_factory'
|
5
|
+
require_relative '../lex/lexical_entry'
|
6
|
+
require_relative '../lex/lexeme'
|
7
|
+
|
8
|
+
sandbox = Object.new
|
9
|
+
sandbox.extend(Zenlish::Lex::EmptyLexiconFactory)
|
10
|
+
Dictionary = sandbox.create_empty_lexicon
|
11
|
+
|
12
|
+
def self.add_entry(aLemma, aWClassName)
|
13
|
+
entry = Zenlish::Lex::LexicalEntry.new(aLemma)
|
14
|
+
wclass = Dictionary.name2terminal[aWClassName]
|
15
|
+
raise StandardError, "Undefined word class for '#{aLemma}'" unless wclass
|
16
|
+
lexeme = Zenlish::Lex::Lexeme.new(wclass, entry).freeze
|
17
|
+
Dictionary.add_entry(entry.freeze)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Our minimalistic lexicon
|
21
|
+
add_entry('a', 'IndefiniteArticle')
|
22
|
+
add_entry('about', 'Preposition')
|
23
|
+
add_entry('above', 'Preposition')
|
24
|
+
add_entry('alive', 'Adjective')
|
25
|
+
add_entry('all', 'IndefiniteQuantifier')
|
26
|
+
add_entry('another', 'Adjective')
|
27
|
+
add_entry('as', 'ComparativeParticle')
|
28
|
+
add_entry('at', 'Preposition')
|
29
|
+
add_entry('bad', 'Adjective')
|
30
|
+
add_entry('be', 'AuxiliaryBe')
|
31
|
+
add_entry('be', 'IrregularVerbBe')
|
32
|
+
add_entry('because', 'SubordinatingConjunction')
|
33
|
+
add_entry('before', 'Adverb')
|
34
|
+
add_entry('before', 'SubordinatingConjunction')
|
35
|
+
add_entry('big', 'Adjective')
|
36
|
+
add_entry('can', 'ModalVerbCan')
|
37
|
+
add_entry('do', 'AuxiliaryDo')
|
38
|
+
add_entry('do', 'IrregularVerbDo')
|
39
|
+
add_entry('false', 'Adjective')
|
40
|
+
add_entry('far', 'Adverb')
|
41
|
+
add_entry('feel', 'IrregularVerb')
|
42
|
+
add_entry('for', 'Preposition')
|
43
|
+
add_entry('from', 'Preposition')
|
44
|
+
add_entry('good', 'Adjective')
|
45
|
+
add_entry('have', 'IrregularVerbHave')
|
46
|
+
add_entry('happen', 'RegularVerb')
|
47
|
+
add_entry('hear', 'IrregularVerb')
|
48
|
+
add_entry('here', 'Adverb')
|
49
|
+
add_entry('I', 'PersonalPronoun')
|
50
|
+
add_entry('if', 'SubordinatingConjunction')
|
51
|
+
add_entry('in', 'Preposition')
|
52
|
+
add_entry('inside', 'Preposition')
|
53
|
+
add_entry('kind', 'CommonNoun')
|
54
|
+
add_entry('know', 'IrregularVerbKnow')
|
55
|
+
add_entry('like', 'Preposition')
|
56
|
+
add_entry('living', 'Adjective')
|
57
|
+
add_entry('long', 'Adjective')
|
58
|
+
add_entry('many', 'IndefiniteQuantifier')
|
59
|
+
add_entry('me', 'PersonalPronoun')
|
60
|
+
add_entry('more', 'Adjective')
|
61
|
+
add_entry('move', 'RegularVerb')
|
62
|
+
add_entry('near to', 'Preposition')
|
63
|
+
add_entry('now', 'Adverb')
|
64
|
+
add_entry('not', 'AdverbNot')
|
65
|
+
add_entry('of', 'PrepositionOf')
|
66
|
+
add_entry('on', 'Preposition')
|
67
|
+
add_entry('one', 'Cardinal')
|
68
|
+
add_entry('other', 'Adjective')
|
69
|
+
add_entry('part', 'CommonNoun')
|
70
|
+
add_entry('people', 'CommonNoun')
|
71
|
+
add_entry('person', 'CommonNoun')
|
72
|
+
add_entry('place', 'CommonNoun')
|
73
|
+
add_entry('same', 'Adjective')
|
74
|
+
add_entry('say', 'IrregularVerbSay')
|
75
|
+
add_entry('see', 'IrregularVerb')
|
76
|
+
add_entry('short', 'Adjective')
|
77
|
+
add_entry('side', 'CommonNoun')
|
78
|
+
add_entry('small', 'Adjective')
|
79
|
+
add_entry('some', 'IndefiniteQuantifier')
|
80
|
+
add_entry('something', 'IndefinitePronoun')
|
81
|
+
add_entry('than', 'PrepositionThan')
|
82
|
+
add_entry('the', 'DefiniteArticle')
|
83
|
+
add_entry('then', 'LinkingAdverb')
|
84
|
+
add_entry('there', 'AdverbThere')
|
85
|
+
add_entry('thing', 'CommonNoun')
|
86
|
+
add_entry('think', 'IrregularVerbThink')
|
87
|
+
add_entry('this', 'DemonstrativeDeterminer')
|
88
|
+
add_entry('this', 'DemonstrativePronoun')
|
89
|
+
add_entry('this one', 'DemonstrativePronoun')
|
90
|
+
add_entry('time', 'CommonNoun')
|
91
|
+
add_entry('to', 'Preposition')
|
92
|
+
add_entry('touch', 'RegularVerb')
|
93
|
+
add_entry('true', 'Adjective')
|
94
|
+
add_entry('two', 'Cardinal')
|
95
|
+
add_entry('very', 'DegreeAdverb')
|
96
|
+
add_entry('want', 'RegularVerbWant')
|
97
|
+
add_entry('what','ConjunctivePronoun')
|
98
|
+
add_entry('with','Preposition')
|
99
|
+
add_entry('word', 'CommonNoun')
|
100
|
+
add_entry('you', 'PersonalPronoun')
|
101
|
+
|
102
|
+
# Punctuation signs...
|
103
|
+
add_entry(':', 'Colon')
|
104
|
+
add_entry(',', 'Comma')
|
105
|
+
add_entry('.', 'Period')
|
106
|
+
add_entry('"', 'Quote')
|
107
|
+
end # module
|
108
|
+
end # module
|
109
|
+
end # defined?
|
@@ -2,17 +2,25 @@
|
|
2
2
|
# It is called Zenlish
|
3
3
|
|
4
4
|
require 'rley' # Load the Rley parsing library
|
5
|
-
require_relative '
|
5
|
+
require_relative 'dictionary'
|
6
6
|
|
7
7
|
########################################
|
8
8
|
# Define a grammar for a highly English-like language
|
9
9
|
builder = Rley::Syntax::GrammarBuilder.new do
|
10
|
-
add_terminals(
|
10
|
+
add_terminals(*Zenlish::Lang::Dictionary.terminals)
|
11
|
+
|
12
|
+
rule 'zenlish' => 'prose'
|
13
|
+
|
14
|
+
# Temporary limitation: from 1 to 3 sentences
|
15
|
+
rule 'prose' => 'sentence'
|
16
|
+
rule 'prose' => 'sentence sentence'
|
17
|
+
rule 'prose' => 'sentence sentence sentence'
|
11
18
|
|
12
|
-
rule 'language' => 'sentence'
|
13
19
|
rule 'sentence' => 'simple_sentence Period'
|
14
20
|
rule 'sentence' => 'complex_sentence Period'
|
15
21
|
rule 'simple_sentence' => 'declarative_simple_sentence'
|
22
|
+
|
23
|
+
# Case of dropped ´that´ conjunction
|
16
24
|
rule 'complex_sentence' => 'main_clause subordination_marker dependent_clause'
|
17
25
|
rule 'complex_sentence' => 'main_clause Comma subordination_marker dependent_clause'
|
18
26
|
rule 'complex_sentence' => 'subordination_marker dependent_clause Comma main_clause'
|
@@ -46,6 +54,10 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
46
54
|
rule 'simple_noun_phrase' => 'determiner nominal'
|
47
55
|
rule 'simple_noun_phrase' => 'numeral nominal'
|
48
56
|
rule 'simple_noun_phrase' => 'determiner numeral nominal'
|
57
|
+
rule 'simple_noun_phrase' => 'ProperNoun'
|
58
|
+
rule 'simple_noun_phrase' => 'PersonalPronoun'
|
59
|
+
rule 'simple_noun_phrase' => 'IndefinitePronoun'
|
60
|
+
rule 'simple_noun_phrase' => 'IndefinitePronoun Adjective'
|
49
61
|
rule 'simple_noun_phrase' => 'simple_noun_phrase simple_noun_phrase verb_phrase'
|
50
62
|
|
51
63
|
# Case: (all|many|some) one of (this|these)
|
@@ -53,11 +65,6 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
53
65
|
|
54
66
|
# CGE p.359, 360: <numeral> of + definite noun phrase
|
55
67
|
rule 'simple_noun_phrase' => 'numeral_of noun_phrase'
|
56
|
-
rule 'simple_noun_phrase' => 'ProperNoun'
|
57
|
-
# rule 'simple_noun_phrase' => 'DemonstrativePronoun'
|
58
|
-
rule 'simple_noun_phrase' => 'IndefinitePronoun'
|
59
|
-
rule 'simple_noun_phrase' => 'IndefinitePronoun Adjective'
|
60
|
-
|
61
68
|
|
62
69
|
rule 'compound_noun_phrase' => 'simple_noun_phrase propositional_phrase'
|
63
70
|
rule 'compound_noun_phrase' => 'simple_noun_phrase comparative_clause'
|
@@ -79,21 +86,31 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
79
86
|
rule 'verb_phrase' => 'RegularVerb propositional_phrase'
|
80
87
|
rule 'verb_phrase' => 'RegularVerbWant Preposition verb_group'
|
81
88
|
rule 'verb_phrase' => 'RegularVerbWant Preposition verb_group noun_phrase'
|
89
|
+
rule 'verb_phrase' => 'RegularVerbWant simple_noun_phrase Preposition verb_group noun_phrase'
|
82
90
|
rule 'verb_phrase' => 'IrregularVerbDo DemonstrativePronoun'
|
83
91
|
rule 'verb_phrase' => 'IrregularVerbDo DemonstrativePronoun propositional_phrase'
|
84
92
|
rule 'verb_phrase' => 'ModalVerbCan verb_group DemonstrativePronoun'
|
85
93
|
rule 'verb_phrase' => 'IrregularVerbBe verb_be_complement'
|
94
|
+
|
95
|
+
# Cover case where ´that´ conjunction is dropped.
|
96
|
+
rule 'verb_phrase' => 'mental_verb dependent_clause'
|
97
|
+
rule 'verb_phrase' => 'IrregularVerbSay DemonstrativePronoun Preposition noun_phrase'
|
98
|
+
rule 'verb_phrase' => 'IrregularVerbSay Colon affirmative_sentence'
|
86
99
|
rule 'verb_phrase' => 'IrregularVerbSay Colon Quote affirmative_sentence Period Quote'
|
100
|
+
rule 'verb_phrase' => 'IrregularVerbSay Preposition noun_phrase Colon Quote affirmative_sentence Period Quote'
|
101
|
+
rule 'mental_verb' => 'IrregularVerbKnow'
|
102
|
+
rule 'mental_verb' => 'IrregularVerbThink'
|
87
103
|
rule 'verb_complement' => 'noun_phrase'
|
104
|
+
rule 'verb_complement' => 'adverb_phrase'
|
105
|
+
rule 'verb_complement' => 'noun_phrase adverb_phrase'
|
106
|
+
|
88
107
|
# perception verb (hear, see, watch, notice, ...): verb + object + infinitive
|
89
108
|
rule 'verb_complement' => 'simple_noun_phrase lexical_verb'
|
90
109
|
rule 'verb_complement' => 'Adjective propositional_phrase'
|
91
|
-
rule 'verb_complement' => 'noun_phrase IrregularVerbBe verb_be_complement'
|
92
|
-
rule 'verb_complement' => 'adverb_phrase'
|
93
|
-
rule 'verb_complement' => 'noun_phrase adverb_phrase'
|
94
110
|
rule 'verb_be_complement' => 'noun_phrase'
|
95
111
|
rule 'verb_be_complement' => 'adjective_as_complement' # Specific to be as lexical verb
|
96
112
|
rule 'verb_be_complement' => 'propositional_phrase'
|
113
|
+
rule 'verb_be_complement' => 'noun_phrase adverb_phrase'
|
97
114
|
rule 'adjective_as_complement' => 'DegreeAdverb Adjective'
|
98
115
|
rule 'adjective_as_complement' => 'Adjective'
|
99
116
|
rule 'adjective_as_complement' => 'Adjective comparative_clause'
|
@@ -110,6 +127,8 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
110
127
|
rule 'lexical_verb' => 'IrregularVerbBe'
|
111
128
|
rule 'lexical_verb' => 'IrregularVerbDo'
|
112
129
|
rule 'lexical_verb' => 'IrregularVerbHave'
|
130
|
+
rule 'lexical_verb' => 'IrregularVerbKnow'
|
131
|
+
rule 'lexical_verb' => 'IrregularVerbThink'
|
113
132
|
rule 'lexical_verb' => 'IrregularVerbSay'
|
114
133
|
rule 'numeral' => 'Cardinal'
|
115
134
|
rule 'comparative_clause' => 'comparative_start noun_phrase'
|
@@ -118,6 +137,7 @@ builder = Rley::Syntax::GrammarBuilder.new do
|
|
118
137
|
rule 'comparative_start' => 'PrepositionThan'
|
119
138
|
rule 'comparative_start' => 'ComparativeParticle'
|
120
139
|
rule 'adverb_phrase' => 'Adverb'
|
140
|
+
rule 'adverb_phrase' => 'Adverb Adverb' # 'here now'
|
121
141
|
rule 'adverb_phrase' => 'Adverb propositional_phrase'
|
122
142
|
rule 'propositional_phrase' => 'preposition propositional_complement'
|
123
143
|
rule 'propositional_phrase' => 'preposition'
|
@@ -35,9 +35,12 @@ module Zenlish
|
|
35
35
|
aLexicon.add_terminal(WClasses::IrregularVerbBe.new.freeze)
|
36
36
|
aLexicon.add_terminal(WClasses::IrregularVerbDo.new.freeze)
|
37
37
|
aLexicon.add_terminal(WClasses::IrregularVerbHave.new.freeze)
|
38
|
+
aLexicon.add_terminal(WClasses::IrregularVerbKnow.new.freeze)
|
38
39
|
aLexicon.add_terminal(WClasses::IrregularVerbSay.new.freeze)
|
40
|
+
aLexicon.add_terminal(WClasses::IrregularVerbThink.new.freeze)
|
39
41
|
aLexicon.add_terminal(WClasses::LinkingAdverb.new.freeze)
|
40
42
|
aLexicon.add_terminal(WClasses::ModalVerbCan.new.freeze)
|
43
|
+
aLexicon.add_terminal(WClasses::PersonalPronoun.new.freeze)
|
41
44
|
aLexicon.add_terminal(WClasses::Preposition.new.freeze)
|
42
45
|
aLexicon.add_terminal(WClasses::PrepositionOf.new.freeze)
|
43
46
|
aLexicon.add_terminal(WClasses::PrepositionThan.new.freeze)
|
data/lib/zenlish/lex/lexeme.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
module Zenlish
|
2
2
|
module Lex
|
3
|
-
#
|
3
|
+
# A word in the abstract sense; an individual, distinct item of a lexicon
|
4
|
+
# that belongs to a word class and of which a number of actual word forms
|
5
|
+
# may exist. For instance, the word forms: 'hide', 'hides', 'hid', 'hidden'
|
6
|
+
# relate to the lexeme for verb 'hide'. Also called 'dictionary word'.
|
4
7
|
class Lexeme
|
5
8
|
# @return Zenlish::WClasses::WordClass
|
6
9
|
attr_reader :wclass
|
7
|
-
|
8
|
-
# @return Zenlish::Lex::LexicalEntry
|
9
|
-
attr_reader :entry
|
10
10
|
|
11
11
|
def initialize(aWordClass, anEntry)
|
12
12
|
@wclass = aWordClass
|
13
|
-
@entry = anEntry
|
14
|
-
|
13
|
+
@entry = anEntry.object_id
|
14
|
+
anEntry.add_lexeme(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return Zenlish::Lex::LexicalEntry
|
18
|
+
def entry
|
19
|
+
ObjectSpace._id2ref(@entry)
|
15
20
|
end
|
16
21
|
|
17
22
|
def lemma
|
data/lib/zenlish/version.rb
CHANGED
@@ -17,7 +17,9 @@ require_relative 'irregular_verb'
|
|
17
17
|
require_relative 'irregular_verb_be'
|
18
18
|
require_relative 'irregular_verb_do'
|
19
19
|
require_relative 'irregular_verb_have'
|
20
|
+
require_relative 'irregular_verb_know'
|
20
21
|
require_relative 'irregular_verb_say'
|
22
|
+
require_relative 'irregular_verb_think'
|
21
23
|
require_relative 'definite_article'
|
22
24
|
require_relative 'demonstrative_determiner'
|
23
25
|
require_relative 'conjunctive_pronoun'
|
@@ -27,6 +29,7 @@ require_relative 'indefinite_pronoun'
|
|
27
29
|
require_relative 'indefinite_quantifier'
|
28
30
|
require_relative 'linking_adverb'
|
29
31
|
require_relative 'modal_verb_can'
|
32
|
+
require_relative 'personal_pronoun'
|
30
33
|
require_relative 'preposition'
|
31
34
|
require_relative 'preposition_of'
|
32
35
|
require_relative 'preposition_than'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'pronoun'
|
2
|
+
|
3
|
+
module Zenlish
|
4
|
+
module WClasses
|
5
|
+
# Personal pronouns refer to people or things involved in the text.
|
6
|
+
# They change according to person, number, gender and case.
|
7
|
+
# Subject forms: I, you, he/she/it, we, you, they
|
8
|
+
# Object forms: Me, you, him, her, it, us, you, them
|
9
|
+
class PersonalPronoun < Pronoun
|
10
|
+
end # class
|
11
|
+
end # module
|
12
|
+
end # module
|
data/lib/zenlish.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative '../../spec_helper' # Use the RSpec framework
|
4
|
-
require_relative '../../../lib/zenlish/
|
4
|
+
require_relative '../../../lib/zenlish/lang/zenlish_grammar' # Load the class under test
|
5
5
|
|
6
6
|
module Zenlish
|
7
7
|
module Parser
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative '../../spec_helper' # Use the RSpec framework
|
4
|
-
require_relative '../support/minimal_lexicon'
|
5
4
|
require_relative '../../../lib/zenlish/lex/literal'
|
5
|
+
require_relative '../support/minimal_lexicon'
|
6
6
|
require_relative '../../../lib/zenlish/parser/zparser' # Load the class under test
|
7
7
|
|
8
8
|
module Zenlish
|
@@ -17,7 +17,7 @@ module Zenlish
|
|
17
17
|
end # context
|
18
18
|
|
19
19
|
def get_lexeme(aLemma, aWordClass = nil)
|
20
|
-
|
20
|
+
Zenlish::Lang::Dictionary.get_lexeme(aLemma, aWordClass)
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.literal2var(aLemma, aLiteral, aSuffix = '')
|
@@ -46,7 +46,7 @@ module Zenlish
|
|
46
46
|
literal2var('big', 'big')
|
47
47
|
literal2var('big', 'bigger')
|
48
48
|
literal2var('can', 'can')
|
49
|
-
|
49
|
+
def did ; Lex::Literal.new('did', get_lexeme('do', WClasses::IrregularVerbDo), 0) ; end
|
50
50
|
def do_ ; Lex::Literal.new('do', get_lexeme('do', WClasses::IrregularVerbDo), 0) ; end
|
51
51
|
def does ; Lex::Literal.new('does', get_lexeme('do', WClasses::IrregularVerbDo), 0) ; end
|
52
52
|
def does_aux ; Lex::Literal.new('does', get_lexeme('do', WClasses::AuxiliaryDo), 0) ; end
|
@@ -57,28 +57,36 @@ module Zenlish
|
|
57
57
|
literal2var('for', 'for', '_')
|
58
58
|
literal2var('from', 'from')
|
59
59
|
literal2var('good', 'good')
|
60
|
+
literal2var('happen', 'happened')
|
60
61
|
literal2var('happen', 'happens')
|
61
62
|
literal2var('have', 'has')
|
62
63
|
literal2var('have', 'have')
|
63
64
|
literal2var('hear', 'hears')
|
65
|
+
literal2var('here', 'here')
|
66
|
+
literal2var('I', 'I', '')
|
64
67
|
literal2var('if', 'if', '_')
|
68
|
+
def i_pronoun ; Lex::Literal.new('I', get_lexeme('I'), 0) ; end
|
65
69
|
literal2var('in', 'in', '_')
|
66
70
|
literal2var('inside', 'inside')
|
67
71
|
def is ; Lex::Literal.new('is', get_lexeme('be', WClasses::IrregularVerbBe), 0) ; end
|
68
72
|
def is_aux ; Lex::Literal.new('is', get_lexeme('be', WClasses::AuxiliaryBe), 0) ; end
|
69
73
|
literal2var('kind', 'kind')
|
74
|
+
literal2var('know', 'know')
|
70
75
|
literal2var('know', 'knows')
|
71
76
|
literal2var('like', 'like')
|
72
77
|
literal2var('Lisa', 'Lisa')
|
73
78
|
literal2var('living', 'living')
|
74
79
|
literal2var('long', 'long')
|
75
80
|
literal2var('many', 'many')
|
81
|
+
literal2var('me', 'me')
|
76
82
|
literal2var('more', 'more')
|
77
83
|
literal2var('move', 'move')
|
78
84
|
literal2var('move', 'moved')
|
79
85
|
literal2var('move', 'moves')
|
80
86
|
literal2var('near to', 'near_to')
|
81
87
|
literal2var('not', 'not', '_')
|
88
|
+
literal2var('now', 'now')
|
89
|
+
literal2var('of', 'of')
|
82
90
|
literal2var('on', 'on')
|
83
91
|
literal2var('one', 'one')
|
84
92
|
literal2var('other', 'other')
|
@@ -115,11 +123,15 @@ module Zenlish
|
|
115
123
|
literal2var('true', 'true', '_')
|
116
124
|
literal2var('two', 'two')
|
117
125
|
literal2var('very', 'very')
|
126
|
+
literal2var('want', 'want')
|
118
127
|
literal2var('want', 'wants')
|
119
128
|
def was ; Lex::Literal.new('was', get_lexeme('be', WClasses::IrregularVerbBe), 0) ; end
|
129
|
+
def were ; Lex::Literal.new('were', get_lexeme('be', WClasses::IrregularVerbBe), 0) ; end
|
120
130
|
literal2var('what', 'what')
|
121
131
|
literal2var('with', 'with')
|
122
132
|
literal2var('word', 'words')
|
133
|
+
def x_as_noun ; Lex::Literal.new('X', get_lexeme('X'), 0) ; end
|
134
|
+
literal2var('you', 'you')
|
123
135
|
|
124
136
|
def colon ; Lex::Literal.new(':', get_lexeme(':'), 0) ; end
|
125
137
|
def comma ; Lex::Literal.new(',', get_lexeme(','), 0) ; end
|
@@ -652,6 +664,89 @@ module Zenlish
|
|
652
664
|
literals = [tony, is, near_to, lisa, because, tony, moved, dot]
|
653
665
|
expect { subject.parse(literals) }.not_to raise_error
|
654
666
|
end
|
667
|
+
|
668
|
+
it 'should parse sample sentences from lesson 2-F' do
|
669
|
+
# Sentence 2-19a: 'Tony says: "I did X.".'
|
670
|
+
literals = [tony, says, colon, quote, i_pronoun, did, x_as_noun, dot, quote, dot]
|
671
|
+
expect { subject.parse(literals) }.not_to raise_error
|
672
|
+
|
673
|
+
# Sentence 2-19a definiendum: 'Tony says: "I did X.".'
|
674
|
+
literals = [tony, says, colon, quote, i_pronoun, did, x_as_noun, dot, quote, dot]
|
675
|
+
expect { subject.parse(literals) }.not_to raise_error
|
676
|
+
|
677
|
+
# Sentence 2-19a definiens: 'Tony says something about Tony. Tony says: Tony did X.'
|
678
|
+
literals = [tony, says, something, about, tony, dot,
|
679
|
+
tony, says, colon, tony, did, x_as_noun, dot]
|
680
|
+
expect { subject.parse(literals) }.not_to raise_error
|
681
|
+
|
682
|
+
# Sentence 2-19a: 'Tony says: "I see Lisa.".'
|
683
|
+
literals = [tony, says, colon, quote, i_pronoun, see, lisa, dot, quote, dot]
|
684
|
+
expect { subject.parse(literals) }.not_to raise_error
|
685
|
+
|
686
|
+
# Sentence 2-19b definiendum: 'Lisa says: "X happened to me.".'
|
687
|
+
literals = [lisa, says, colon, quote, x_as_noun, happened, to, me, dot, quote, dot]
|
688
|
+
expect { subject.parse(literals) }.not_to raise_error
|
689
|
+
|
690
|
+
# Sentence 2-19b definiens: 'Lisa says something about Lisa. Lisa says: X happened to Lisa.'
|
691
|
+
literals = [lisa, says, something, about, lisa, dot,
|
692
|
+
lisa, says, colon, x_as_noun, happened, to, lisa, dot]
|
693
|
+
expect { subject.parse(literals) }.not_to raise_error
|
694
|
+
|
695
|
+
# Sentence 2-19c: 'Lisa says: "Tony sees me."'
|
696
|
+
literals = [lisa, says, colon, quote, tony, sees, me, dot, quote, dot]
|
697
|
+
expect { subject.parse(literals) }.not_to raise_error
|
698
|
+
|
699
|
+
# Sentence 2-20a definiendum: 'Tony says to Lisa: "I can see you.".'
|
700
|
+
literals = [tony, says, to, lisa, colon, quote, i_pronoun, can, see, you, dot, quote, dot]
|
701
|
+
expect { subject.parse(literals) }.not_to raise_error
|
702
|
+
|
703
|
+
# Sentence 2-20a definiens: 'Tony says something about Lisa.
|
704
|
+
# Tony says this to Lisa. Tony says: Tony can see Lisa.'
|
705
|
+
literals = [tony, says, something, about, lisa, dot,
|
706
|
+
tony, says, this_as_pronoun, to, lisa, dot,
|
707
|
+
tony, says, colon, tony, can, see, lisa, dot]
|
708
|
+
expect { subject.parse(literals) }.not_to raise_error
|
709
|
+
|
710
|
+
# Sentence 2-20b: "I know you have something good."
|
711
|
+
literals = [i_pronoun, know, you, have, something, good, dot]
|
712
|
+
expect { subject.parse(literals) }.not_to raise_error
|
713
|
+
|
714
|
+
# Sentence 2-20c: "I want you to do something good for me."
|
715
|
+
literals = [i_pronoun, want, you, to, do_, something, good, for_, me, dot]
|
716
|
+
expect { subject.parse(literals) }.not_to raise_error
|
717
|
+
|
718
|
+
# Sentence 2-21a definiendum: 'Tony says: "X happens here.".'
|
719
|
+
literals = [tony, says, colon, quote, x_as_noun, happens, here, dot, quote, dot]
|
720
|
+
expect { subject.parse(literals) }.not_to raise_error
|
721
|
+
|
722
|
+
# Sentence 2-21a definiens: "Tony is in a place. Tony says: X happens in this place."
|
723
|
+
literals = [tony, is, in_, a_as_art, place, dot,
|
724
|
+
tony, says, colon, x_as_noun, happens, in_, this, place, dot]
|
725
|
+
expect { subject.parse(literals) }.not_to raise_error
|
726
|
+
|
727
|
+
# Sentence 2-21b: "Many people were here at one time."
|
728
|
+
literals = [many, people, were, here, at, one, time, dot]
|
729
|
+
expect { subject.parse(literals) }.not_to raise_error
|
730
|
+
|
731
|
+
# Sentence 2-22a definiendum: 'Lisa says: "X happens now.".'
|
732
|
+
literals = [lisa, says, colon, quote, x_as_noun, happens, now, dot, quote, dot]
|
733
|
+
expect { subject.parse(literals) }.not_to raise_error
|
734
|
+
|
735
|
+
# Sentence 2-21a definiens: 'Lisa says something at a time.
|
736
|
+
# Lisa says: X happens at this same time.'
|
737
|
+
literals = [lisa, says, something, at, a_as_art, time, dot,
|
738
|
+
lisa, says, colon, x_as_noun, happens, at, this, time, dot]
|
739
|
+
expect { subject.parse(literals) }.not_to raise_error
|
740
|
+
|
741
|
+
# Sentence 2-21b: "There are not many people here now."
|
742
|
+
literals = [there, are, not_, many, people, here, now , dot]
|
743
|
+
expect { subject.parse(literals) }.not_to raise_error
|
744
|
+
|
745
|
+
# Sentence 2-Fa: "Lisa says to Tony: "I can see many living things here."."
|
746
|
+
literals = [lisa, says, to, tony, colon, quote, i_pronoun,
|
747
|
+
can, see, many, living, things, here, dot, quote, dot]
|
748
|
+
expect { subject.parse(literals) }.not_to raise_error
|
749
|
+
end
|
655
750
|
=begin
|
656
751
|
TODO
|
657
752
|
|
@@ -1,134 +1,7 @@
|
|
1
|
-
require_relative '../../../lib/zenlish/
|
2
|
-
require_relative '../../../lib/zenlish/lex/lexical_entry'
|
3
|
-
require_relative '../../../lib/zenlish/lex/lexeme'
|
4
|
-
require_relative '../../../lib/zenlish/lex/lexicon'
|
1
|
+
require_relative '../../../lib/zenlish/lang/dictionary'
|
5
2
|
|
3
|
+
# Add a few words to dictionary for testing purposes...
|
4
|
+
Zenlish::Lang::add_entry('Lisa', 'ProperNoun')
|
5
|
+
Zenlish::Lang::add_entry('Tony', 'ProperNoun')
|
6
|
+
Zenlish::Lang::add_entry('X', 'CommonNoun')
|
6
7
|
|
7
|
-
|
8
|
-
adjective = $ZenlishLexicon.name2terminal['Adjective']
|
9
|
-
adverb = $ZenlishLexicon.name2terminal['Adverb']
|
10
|
-
adverb_not = $ZenlishLexicon.name2terminal['AdverbNot']
|
11
|
-
adverb_there = $ZenlishLexicon.name2terminal['AdverbThere']
|
12
|
-
degree_adverb = $ZenlishLexicon.name2terminal['DegreeAdverb']
|
13
|
-
auxiliary_be = $ZenlishLexicon.name2terminal['AuxiliaryBe']
|
14
|
-
auxiliary_do = $ZenlishLexicon.name2terminal['AuxiliaryDo']
|
15
|
-
common_noun = $ZenlishLexicon.name2terminal['CommonNoun']
|
16
|
-
linking_adverb = $ZenlishLexicon.name2terminal['LinkingAdverb']
|
17
|
-
proper_noun = $ZenlishLexicon.name2terminal['ProperNoun']
|
18
|
-
preposition = $ZenlishLexicon.name2terminal['Preposition']
|
19
|
-
preposition_of = $ZenlishLexicon.name2terminal['PrepositionOf']
|
20
|
-
preposition_than = $ZenlishLexicon.name2terminal['PrepositionThan']
|
21
|
-
regular_verb = $ZenlishLexicon.name2terminal['RegularVerb']
|
22
|
-
regular_verb_want = $ZenlishLexicon.name2terminal['RegularVerbWant']
|
23
|
-
irregular_verb = $ZenlishLexicon.name2terminal['IrregularVerb']
|
24
|
-
irregular_verb_be = $ZenlishLexicon.name2terminal['IrregularVerbBe']
|
25
|
-
irregular_verb_do = $ZenlishLexicon.name2terminal['IrregularVerbDo']
|
26
|
-
irregular_verb_have = $ZenlishLexicon.name2terminal['IrregularVerbHave']
|
27
|
-
irregular_verb_say = $ZenlishLexicon.name2terminal['IrregularVerbSay']
|
28
|
-
indefinite_pronoun = $ZenlishLexicon.name2terminal['IndefinitePronoun']
|
29
|
-
conjunctive_pronoun = $ZenlishLexicon.name2terminal['ConjunctivePronoun']
|
30
|
-
demonstrative_pronoun = $ZenlishLexicon.name2terminal['DemonstrativePronoun']
|
31
|
-
demonstrative_determiner = $ZenlishLexicon.name2terminal['DemonstrativeDeterminer']
|
32
|
-
definite_article = $ZenlishLexicon.name2terminal['DefiniteArticle']
|
33
|
-
indefinite_article = $ZenlishLexicon.name2terminal['IndefiniteArticle']
|
34
|
-
cardinal = $ZenlishLexicon.name2terminal['Cardinal']
|
35
|
-
comparative_particle = $ZenlishLexicon.name2terminal['ComparativeParticle']
|
36
|
-
indefinite_quantifier = $ZenlishLexicon.name2terminal['IndefiniteQuantifier']
|
37
|
-
modal_verb_can = $ZenlishLexicon.name2terminal['ModalVerbCan']
|
38
|
-
subordinating_conjunction = $ZenlishLexicon.name2terminal['SubordinatingConjunction']
|
39
|
-
|
40
|
-
colon = $ZenlishLexicon.name2terminal['Colon']
|
41
|
-
comma = $ZenlishLexicon.name2terminal['Comma']
|
42
|
-
dot = $ZenlishLexicon.name2terminal['Period']
|
43
|
-
quote = $ZenlishLexicon.name2terminal['Quote']
|
44
|
-
|
45
|
-
def add_entry(aLemma, aWordClass)
|
46
|
-
entry = Zenlish::Lex::LexicalEntry.new(aLemma)
|
47
|
-
raise StandardError, "Undefined word class for '#{aLemma}'" unless aWordClass
|
48
|
-
lexeme = Zenlish::Lex::Lexeme.new(aWordClass, entry).freeze
|
49
|
-
$ZenlishLexicon.add_entry(entry.freeze)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Our minimalistic lexicon
|
53
|
-
add_entry('a', indefinite_article)
|
54
|
-
add_entry('about', preposition)
|
55
|
-
add_entry('above', preposition)
|
56
|
-
add_entry('alive', adjective)
|
57
|
-
add_entry('all', indefinite_quantifier)
|
58
|
-
add_entry('another', adjective)
|
59
|
-
add_entry('as', comparative_particle)
|
60
|
-
add_entry('at', preposition)
|
61
|
-
add_entry('bad', adjective)
|
62
|
-
add_entry('be', auxiliary_be)
|
63
|
-
add_entry('be', irregular_verb_be)
|
64
|
-
add_entry('because', subordinating_conjunction)
|
65
|
-
add_entry('before', adverb)
|
66
|
-
add_entry('before', subordinating_conjunction)
|
67
|
-
add_entry('big', adjective)
|
68
|
-
add_entry('can', modal_verb_can)
|
69
|
-
add_entry('do', auxiliary_do)
|
70
|
-
add_entry('do', irregular_verb_do)
|
71
|
-
add_entry('false', adjective)
|
72
|
-
add_entry('far', adverb)
|
73
|
-
add_entry('feel', irregular_verb)
|
74
|
-
add_entry('for', preposition)
|
75
|
-
add_entry('from', preposition)
|
76
|
-
add_entry('good', adjective)
|
77
|
-
add_entry('have', irregular_verb_have)
|
78
|
-
add_entry('happen', regular_verb)
|
79
|
-
add_entry('hear', irregular_verb)
|
80
|
-
add_entry('if', subordinating_conjunction)
|
81
|
-
add_entry('in', preposition)
|
82
|
-
add_entry('inside', preposition)
|
83
|
-
add_entry('kind', common_noun)
|
84
|
-
add_entry('know', irregular_verb)
|
85
|
-
add_entry('like', preposition)
|
86
|
-
add_entry('Lisa', proper_noun)
|
87
|
-
add_entry('living', adjective)
|
88
|
-
add_entry('long', adjective)
|
89
|
-
add_entry('many', indefinite_quantifier)
|
90
|
-
add_entry('more', adjective)
|
91
|
-
add_entry('move', regular_verb)
|
92
|
-
add_entry('near to', preposition)
|
93
|
-
add_entry('not', adverb_not)
|
94
|
-
add_entry('of', preposition_of)
|
95
|
-
add_entry('on', preposition)
|
96
|
-
add_entry('one', cardinal)
|
97
|
-
add_entry('other', adjective)
|
98
|
-
add_entry('part', common_noun)
|
99
|
-
add_entry('people', common_noun)
|
100
|
-
add_entry('person', common_noun)
|
101
|
-
add_entry('place', common_noun)
|
102
|
-
add_entry('same', adjective)
|
103
|
-
add_entry('say', irregular_verb_say)
|
104
|
-
add_entry('see', irregular_verb)
|
105
|
-
add_entry('short', adjective)
|
106
|
-
add_entry('side', common_noun)
|
107
|
-
add_entry('small', adjective)
|
108
|
-
add_entry('some', indefinite_quantifier)
|
109
|
-
add_entry('something', indefinite_pronoun)
|
110
|
-
add_entry('than', preposition_than)
|
111
|
-
add_entry('the', definite_article)
|
112
|
-
add_entry('then', linking_adverb)
|
113
|
-
add_entry('there', adverb_there)
|
114
|
-
add_entry('thing', common_noun)
|
115
|
-
add_entry('think', irregular_verb)
|
116
|
-
add_entry('this', demonstrative_determiner)
|
117
|
-
add_entry('this', demonstrative_pronoun)
|
118
|
-
add_entry('this one', demonstrative_pronoun)
|
119
|
-
add_entry('time', common_noun)
|
120
|
-
add_entry('to', preposition)
|
121
|
-
add_entry('Tony', proper_noun)
|
122
|
-
add_entry('touch', regular_verb)
|
123
|
-
add_entry('true', adjective)
|
124
|
-
add_entry('two', cardinal)
|
125
|
-
add_entry('very', degree_adverb)
|
126
|
-
add_entry('want', regular_verb_want)
|
127
|
-
add_entry('what',conjunctive_pronoun)
|
128
|
-
add_entry('with',preposition)
|
129
|
-
add_entry('word', common_noun)
|
130
|
-
|
131
|
-
add_entry(':', colon)
|
132
|
-
add_entry(',', comma)
|
133
|
-
add_entry('.', dot)
|
134
|
-
add_entry('"', quote)
|
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.14
|
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-
|
11
|
+
date: 2019-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rley
|
@@ -85,13 +85,13 @@ files:
|
|
85
85
|
- Rakefile
|
86
86
|
- appveyor.yml
|
87
87
|
- lib/zenlish.rb
|
88
|
-
- lib/zenlish/
|
88
|
+
- lib/zenlish/lang/dictionary.rb
|
89
|
+
- lib/zenlish/lang/zenlish_grammar.rb
|
89
90
|
- lib/zenlish/lex/empty_lexicon_factory.rb
|
90
91
|
- lib/zenlish/lex/lexeme.rb
|
91
92
|
- lib/zenlish/lex/lexical_entry.rb
|
92
93
|
- lib/zenlish/lex/lexicon.rb
|
93
94
|
- lib/zenlish/lex/literal.rb
|
94
|
-
- lib/zenlish/parser/zenlish_grammar.rb
|
95
95
|
- lib/zenlish/parser/zparser.rb
|
96
96
|
- lib/zenlish/version.rb
|
97
97
|
- lib/zenlish/wclasses/adjective.rb
|
@@ -120,12 +120,15 @@ files:
|
|
120
120
|
- lib/zenlish/wclasses/irregular_verb_be.rb
|
121
121
|
- lib/zenlish/wclasses/irregular_verb_do.rb
|
122
122
|
- lib/zenlish/wclasses/irregular_verb_have.rb
|
123
|
+
- lib/zenlish/wclasses/irregular_verb_know.rb
|
123
124
|
- lib/zenlish/wclasses/irregular_verb_say.rb
|
125
|
+
- lib/zenlish/wclasses/irregular_verb_think.rb
|
124
126
|
- lib/zenlish/wclasses/lexical_verb.rb
|
125
127
|
- lib/zenlish/wclasses/linking_adverb.rb
|
126
128
|
- lib/zenlish/wclasses/modal_verb_can.rb
|
127
129
|
- lib/zenlish/wclasses/noun.rb
|
128
130
|
- lib/zenlish/wclasses/numeral.rb
|
131
|
+
- lib/zenlish/wclasses/personal_pronoun.rb
|
129
132
|
- lib/zenlish/wclasses/preposition.rb
|
130
133
|
- lib/zenlish/wclasses/preposition_of.rb
|
131
134
|
- lib/zenlish/wclasses/preposition_than.rb
|
@@ -138,12 +141,12 @@ files:
|
|
138
141
|
- lib/zenlish/wclasses/verb.rb
|
139
142
|
- lib/zenlish/wclasses/word_class.rb
|
140
143
|
- spec/spec_helper.rb
|
144
|
+
- spec/zenlish/lang/zenlish_grammar_spec.rb
|
141
145
|
- spec/zenlish/lex/empty_lexicon_factory_spec.rb
|
142
146
|
- spec/zenlish/lex/lexeme_spec.rb
|
143
147
|
- spec/zenlish/lex/lexical_entry_spec.rb
|
144
148
|
- spec/zenlish/lex/lexicon_spec.rb
|
145
149
|
- spec/zenlish/lex/literal_spec.rb
|
146
|
-
- spec/zenlish/parser/zenlish_grammar_spec.rb
|
147
150
|
- spec/zenlish/parser/zparser_spec.rb
|
148
151
|
- spec/zenlish/support/minimal_lexicon.rb
|
149
152
|
- spec/zenlish/wclasses/common_noun_spec.rb
|
@@ -176,12 +179,12 @@ signing_key:
|
|
176
179
|
specification_version: 4
|
177
180
|
summary: A toolkit for the Zenlish language (a simplified English language).
|
178
181
|
test_files:
|
182
|
+
- spec/zenlish/lang/zenlish_grammar_spec.rb
|
179
183
|
- spec/zenlish/lex/empty_lexicon_factory_spec.rb
|
180
184
|
- spec/zenlish/lex/lexeme_spec.rb
|
181
185
|
- spec/zenlish/lex/lexical_entry_spec.rb
|
182
186
|
- spec/zenlish/lex/lexicon_spec.rb
|
183
187
|
- spec/zenlish/lex/literal_spec.rb
|
184
|
-
- spec/zenlish/parser/zenlish_grammar_spec.rb
|
185
188
|
- spec/zenlish/parser/zparser_spec.rb
|
186
189
|
- spec/zenlish/wclasses/common_noun_spec.rb
|
187
190
|
- spec/zenlish/wclasses/irregular_verb_spec.rb
|