-
Notifications
You must be signed in to change notification settings - Fork 7
/
ch4_leftcorner_parser.py
224 lines (207 loc) · 5.36 KB
/
ch4_leftcorner_parser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
"""
A left-corner parser.
"""
import pyactr as actr
environment = actr.Environment(focus_position=(320, 180))
actr.chunktype("parsing_goal",
"task stack_top stack_bottom parsed_word right_frontier")
actr.chunktype("parse_state",
"node_cat mother daughter1 daughter2 lex_head")
actr.chunktype("word", "form cat")
parser = actr.ACTRModel(environment, motor_prepared=True)
dm = parser.decmem
g = parser.goal
imaginal = parser.set_goal(name="imaginal", delay=0)
dm.add(actr.chunkstring(string="""
isa word
form Mary
cat ProperN
"""))
dm.add(actr.chunkstring(string="""
isa word
form Bill
cat ProperN
"""))
dm.add(actr.chunkstring(string="""
isa word
form likes
cat V
"""))
g.add(actr.chunkstring(string="""
isa parsing_goal
task read_word
stack_top S
right_frontier S
"""))
parser.productionstring(name="press spacebar", string="""
=g>
isa parsing_goal
task read_word
stack_top ~None
?manual>
state free
==>
=g>
isa parsing_goal
task encode_word
+manual>
isa _manual
cmd press_key
key 'space'
""")
parser.productionstring(name="encode word", string="""
=g>
isa parsing_goal
task encode_word
=visual>
isa _visual
value =val
==>
=g>
isa parsing_goal
task get_word_cat
parsed_word =val
~visual>
""")
parser.productionstring(name="retrieve category", string="""
=g>
isa parsing_goal
task get_word_cat
parsed_word =w
==>
+retrieval>
isa word
form =w
=g>
isa parsing_goal
task retrieving_word
""")
parser.productionstring(name="shift and project word", string="""
=g>
isa parsing_goal
task retrieving_word
stack_top =t
stack_bottom None
=retrieval>
isa word
form =w
cat =c
==>
=g>
isa parsing_goal
task parsing
stack_top =c
stack_bottom =t
+imaginal>
isa parse_state
node_cat =c
daughter1 =w
~retrieval>
""")
parser.productionstring(name="project: NP ==> ProperN", string="""
=g>
isa parsing_goal
stack_top ProperN
stack_bottom ~NP
right_frontier =rf
parsed_word =w
==>
=g>
isa parsing_goal
stack_top NP
+imaginal>
isa parse_state
node_cat NP
daughter1 ProperN
mother =rf
lex_head =w
""")
parser.productionstring(name="project and complete: NP ==> ProperN", string="""
=g>
isa parsing_goal
stack_top ProperN
stack_bottom NP
right_frontier =rf
parsed_word =w
==>
=g>
isa parsing_goal
task read_word
stack_top None
stack_bottom None
+imaginal>
isa parse_state
node_cat NP
daughter1 ProperN
mother =rf
lex_head =w
""")
parser.productionstring(name="project and complete: S ==> NP VP", string="""
=g>
isa parsing_goal
stack_top NP
stack_bottom S
==>
=g>
isa parsing_goal
task read_word
stack_top VP
stack_bottom None
right_frontier VP
+imaginal>
isa parse_state
node_cat S
daughter1 NP
daughter2 VP
""")
parser.productionstring(name="project and complete: VP ==> V NP", string="""
=g>
isa parsing_goal
task parsing
stack_top V
stack_bottom VP
==>
=g>
isa parsing_goal
task read_word
stack_top NP
stack_bottom None
+imaginal>
isa parse_state
node_cat VP
daughter1 V
daughter2 NP
""")
parser.productionstring(name="finished", string="""
=g>
isa parsing_goal
task read_word
stack_top None
==>
~g>
~imaginal>
""")
if __name__ == "__main__":
stimuli = [{1: {'text': 'Mary', 'position': (320, 180)}},
{1: {'text': 'likes', 'position': (320, 180)}},
{1: {'text': 'Bill', 'position': (320, 180)}}]
parser_sim = parser.simulation(
realtime=True,
gui=False,
environment_process=environment.environment_process,
stimuli=stimuli,
triggers='space')
parser_sim.run(1.5)
sortedDM = sorted(([item[0], time] for item in dm.items()\
for time in item[1]),\
key=lambda item: item[1])
print("\nParse states in declarative memory at the end of the simulation",
"\nordered by time of (re)activation:")
for chunk in sortedDM:
if chunk[0].typename == "parse_state":
print(chunk[1], "\t", chunk[0])
print("\nWords in declarative memory at the end of the simulation",
"\nordered by time of (re)activation:")
for chunk in sortedDM:
if chunk[0].typename == "word":
print(chunk[1], "\t", chunk[0])