@sharpee/parser-en-us 0.9.60-beta
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.
- package/LICENSE +21 -0
- package/README.md +123 -0
- package/dist/direction-mappings.d.ts +24 -0
- package/dist/direction-mappings.d.ts.map +1 -0
- package/dist/direction-mappings.js +82 -0
- package/dist/direction-mappings.js.map +1 -0
- package/dist/english-grammar-engine.d.ts +85 -0
- package/dist/english-grammar-engine.d.ts.map +1 -0
- package/dist/english-grammar-engine.js +562 -0
- package/dist/english-grammar-engine.js.map +1 -0
- package/dist/english-parser.d.ts +184 -0
- package/dist/english-parser.d.ts.map +1 -0
- package/dist/english-parser.js +1268 -0
- package/dist/english-parser.js.map +1 -0
- package/dist/english-pattern-compiler.d.ts +29 -0
- package/dist/english-pattern-compiler.d.ts.map +1 -0
- package/dist/english-pattern-compiler.js +211 -0
- package/dist/english-pattern-compiler.js.map +1 -0
- package/dist/grammar.d.ts +19 -0
- package/dist/grammar.d.ts.map +1 -0
- package/dist/grammar.js +620 -0
- package/dist/grammar.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/parse-failure.d.ts +59 -0
- package/dist/parse-failure.d.ts.map +1 -0
- package/dist/parse-failure.js +132 -0
- package/dist/parse-failure.js.map +1 -0
- package/dist/parser-types.d.ts +185 -0
- package/dist/parser-types.d.ts.map +1 -0
- package/dist/parser-types.js +134 -0
- package/dist/parser-types.js.map +1 -0
- package/dist/pronoun-context.d.ts +119 -0
- package/dist/pronoun-context.d.ts.map +1 -0
- package/dist/pronoun-context.js +249 -0
- package/dist/pronoun-context.js.map +1 -0
- package/dist/scope-evaluator.d.ts +58 -0
- package/dist/scope-evaluator.d.ts.map +1 -0
- package/dist/scope-evaluator.js +205 -0
- package/dist/scope-evaluator.js.map +1 -0
- package/dist/slot-consumers/entity-slot-consumer.d.ts +36 -0
- package/dist/slot-consumers/entity-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/entity-slot-consumer.js +413 -0
- package/dist/slot-consumers/entity-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/index.d.ts +43 -0
- package/dist/slot-consumers/index.d.ts.map +1 -0
- package/dist/slot-consumers/index.js +78 -0
- package/dist/slot-consumers/index.js.map +1 -0
- package/dist/slot-consumers/slot-consumer.d.ts +61 -0
- package/dist/slot-consumers/slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/slot-consumer.js +31 -0
- package/dist/slot-consumers/slot-consumer.js.map +1 -0
- package/dist/slot-consumers/text-slot-consumer.d.ts +33 -0
- package/dist/slot-consumers/text-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/text-slot-consumer.js +157 -0
- package/dist/slot-consumers/text-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/typed-slot-consumer.d.ts +35 -0
- package/dist/slot-consumers/typed-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/typed-slot-consumer.js +151 -0
- package/dist/slot-consumers/typed-slot-consumer.js.map +1 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.d.ts +42 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.d.ts.map +1 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.js +186 -0
- package/dist/slot-consumers/vocabulary-slot-consumer.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file English Grammar Engine
|
|
4
|
+
* @description English-specific implementation of grammar matching
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EnglishGrammarEngine = void 0;
|
|
8
|
+
const if_domain_1 = require("@sharpee/if-domain");
|
|
9
|
+
const english_pattern_compiler_1 = require("./english-pattern-compiler");
|
|
10
|
+
const lang_en_us_1 = require("@sharpee/lang-en-us");
|
|
11
|
+
const slot_consumers_1 = require("./slot-consumers");
|
|
12
|
+
/**
|
|
13
|
+
* English-specific grammar matching engine
|
|
14
|
+
*/
|
|
15
|
+
class EnglishGrammarEngine extends if_domain_1.GrammarEngine {
|
|
16
|
+
slotConsumerRegistry;
|
|
17
|
+
/** Last set of partial match failures (for error reporting) */
|
|
18
|
+
lastFailures = [];
|
|
19
|
+
constructor(slotConsumerRegistry) {
|
|
20
|
+
super(new english_pattern_compiler_1.EnglishPatternCompiler());
|
|
21
|
+
// Use provided registry or create default with all consumers
|
|
22
|
+
this.slotConsumerRegistry = slotConsumerRegistry || (0, slot_consumers_1.createDefaultRegistry)();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the last set of partial match failures (for error reporting)
|
|
26
|
+
*/
|
|
27
|
+
getLastFailures() {
|
|
28
|
+
return this.lastFailures;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Find matching grammar rules for tokens
|
|
32
|
+
*/
|
|
33
|
+
findMatches(tokens, context, options = {}) {
|
|
34
|
+
const matches = [];
|
|
35
|
+
const failures = [];
|
|
36
|
+
const { minConfidence = 0.1, maxMatches = 10 } = options;
|
|
37
|
+
// Try each rule
|
|
38
|
+
for (const rule of this.rules) {
|
|
39
|
+
if (!rule.compiledPattern)
|
|
40
|
+
continue;
|
|
41
|
+
const result = this.tryMatchRuleWithFailure(rule, tokens, context);
|
|
42
|
+
if (result.success) {
|
|
43
|
+
if (result.match.confidence >= minConfidence) {
|
|
44
|
+
matches.push(result.match);
|
|
45
|
+
// Stop if we have enough matches
|
|
46
|
+
if (matches.length >= maxMatches) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Collect failures for error reporting
|
|
53
|
+
failures.push(result.failure);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Store failures for later retrieval
|
|
57
|
+
this.lastFailures = failures;
|
|
58
|
+
// Sort by confidence descending, then by priority descending
|
|
59
|
+
matches.sort((a, b) => {
|
|
60
|
+
if (b.confidence !== a.confidence) {
|
|
61
|
+
return b.confidence - a.confidence;
|
|
62
|
+
}
|
|
63
|
+
// If confidence is equal, sort by rule priority
|
|
64
|
+
return b.rule.priority - a.rule.priority;
|
|
65
|
+
});
|
|
66
|
+
return matches;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Try to match a single rule against tokens
|
|
70
|
+
*/
|
|
71
|
+
tryMatchRule(rule, // GrammarRule
|
|
72
|
+
tokens, context) {
|
|
73
|
+
const pattern = rule.compiledPattern;
|
|
74
|
+
const DEBUG = process.env.PARSER_DEBUG === 'true'; // Enable debug logging with env var
|
|
75
|
+
if (DEBUG) {
|
|
76
|
+
console.log(`\nTrying to match rule: ${rule.pattern}`);
|
|
77
|
+
console.log('Tokens:', tokens.map(t => t.word).join(' '));
|
|
78
|
+
}
|
|
79
|
+
// Quick check: do we have enough tokens?
|
|
80
|
+
if (tokens.length < pattern.minTokens) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const slots = new Map();
|
|
84
|
+
let tokenIndex = 0;
|
|
85
|
+
let confidence = 1.0;
|
|
86
|
+
let skippedOptionals = 0;
|
|
87
|
+
const matchedTokens = {}; // Track which tokens matched which parts
|
|
88
|
+
// Try to match each pattern token
|
|
89
|
+
for (const patternToken of pattern.tokens) {
|
|
90
|
+
// Check if we have a token to match
|
|
91
|
+
if (tokenIndex >= tokens.length) {
|
|
92
|
+
// If this pattern token is optional, we can skip it
|
|
93
|
+
if (patternToken.optional) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// Not enough tokens for required pattern element
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const token = tokens[tokenIndex];
|
|
100
|
+
switch (patternToken.type) {
|
|
101
|
+
case 'literal':
|
|
102
|
+
// Check if it matches
|
|
103
|
+
if (token.normalized === patternToken.value) {
|
|
104
|
+
// Track if this is a verb in the first position (for semantic mapping)
|
|
105
|
+
if (tokenIndex === 0) {
|
|
106
|
+
matchedTokens.verb = token.normalized;
|
|
107
|
+
}
|
|
108
|
+
tokenIndex++;
|
|
109
|
+
}
|
|
110
|
+
else if (patternToken.optional) {
|
|
111
|
+
// Optional literal doesn't match, skip it
|
|
112
|
+
skippedOptionals++;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// Required literal doesn't match
|
|
117
|
+
if (DEBUG) {
|
|
118
|
+
console.log(`Literal mismatch at token ${tokenIndex}: expected '${patternToken.value}', got '${token.normalized}'`);
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case 'alternates':
|
|
124
|
+
// Check if it matches one of the alternates
|
|
125
|
+
if (patternToken.alternates.includes(token.normalized)) {
|
|
126
|
+
// Track if this is a verb in the first position (for semantic mapping)
|
|
127
|
+
// We track it regardless of token type since patterns may have verb alternates
|
|
128
|
+
if (tokenIndex === 0) {
|
|
129
|
+
matchedTokens.verb = token.normalized;
|
|
130
|
+
}
|
|
131
|
+
if (DEBUG) {
|
|
132
|
+
console.log(`Alternates match: token '${token.normalized}' matches alternates [${patternToken.alternates.join(', ')}]`);
|
|
133
|
+
}
|
|
134
|
+
tokenIndex++;
|
|
135
|
+
// Don't reduce confidence for alternate matches - they're equally valid
|
|
136
|
+
}
|
|
137
|
+
else if (patternToken.optional) {
|
|
138
|
+
// Optional alternates don't match, skip
|
|
139
|
+
skippedOptionals++;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Required alternates don't match
|
|
144
|
+
if (DEBUG) {
|
|
145
|
+
console.log(`Alternates mismatch: token '${token.normalized}' not in alternates [${patternToken.alternates.join(', ')}]`);
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
case 'slot':
|
|
151
|
+
// Try to consume tokens for this slot
|
|
152
|
+
if (DEBUG) {
|
|
153
|
+
console.log(`Consuming slot '${patternToken.value}' starting at token ${tokenIndex}`);
|
|
154
|
+
}
|
|
155
|
+
const slotResult = this.consumeSlot(patternToken.value, tokens, tokenIndex, pattern, rule, context);
|
|
156
|
+
if (!slotResult) {
|
|
157
|
+
if (patternToken.optional) {
|
|
158
|
+
// Optional slot couldn't be filled, skip it
|
|
159
|
+
skippedOptionals++;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// Required slot couldn't be filled
|
|
164
|
+
if (DEBUG) {
|
|
165
|
+
console.log(`Failed to consume slot '${patternToken.value}'`);
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (DEBUG) {
|
|
171
|
+
console.log(`Consumed slot '${patternToken.value}': "${slotResult.text}"`);
|
|
172
|
+
}
|
|
173
|
+
slots.set(patternToken.value, slotResult);
|
|
174
|
+
// Track matched slot values for semantic mapping
|
|
175
|
+
if (patternToken.value === 'direction') {
|
|
176
|
+
matchedTokens.direction = slotResult.text;
|
|
177
|
+
}
|
|
178
|
+
else if (patternToken.value === 'preposition') {
|
|
179
|
+
matchedTokens.preposition = slotResult.text;
|
|
180
|
+
}
|
|
181
|
+
tokenIndex = slotResult.tokens[slotResult.tokens.length - 1] + 1;
|
|
182
|
+
confidence *= slotResult.confidence || 0.9;
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Check if we consumed all tokens (for now, require exact match)
|
|
187
|
+
if (tokenIndex !== tokens.length) {
|
|
188
|
+
// Leftover tokens
|
|
189
|
+
if (DEBUG) {
|
|
190
|
+
console.log(`Pattern match failed: consumed ${tokenIndex} tokens but have ${tokens.length} total`);
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
// Reduce confidence for each skipped optional element
|
|
195
|
+
// This ensures exact matches are preferred over matches with skipped optionals
|
|
196
|
+
confidence *= Math.pow(0.9, skippedOptionals);
|
|
197
|
+
// Apply experimental confidence if set
|
|
198
|
+
if (rule.experimentalConfidence) {
|
|
199
|
+
confidence *= rule.experimentalConfidence;
|
|
200
|
+
}
|
|
201
|
+
if (DEBUG) {
|
|
202
|
+
console.log(`Pattern matched successfully! Skipped ${skippedOptionals} optional elements`);
|
|
203
|
+
}
|
|
204
|
+
// Build semantics from the rule and matched tokens
|
|
205
|
+
const semantics = this.buildSemantics(rule, matchedTokens);
|
|
206
|
+
return {
|
|
207
|
+
rule,
|
|
208
|
+
confidence,
|
|
209
|
+
slots,
|
|
210
|
+
consumed: tokenIndex,
|
|
211
|
+
semantics,
|
|
212
|
+
matchedTokens
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Try to match a single rule against tokens, returning failure info if no match
|
|
217
|
+
*/
|
|
218
|
+
tryMatchRuleWithFailure(rule, // GrammarRule
|
|
219
|
+
tokens, context) {
|
|
220
|
+
const pattern = rule.compiledPattern;
|
|
221
|
+
const DEBUG = process.env.PARSER_DEBUG === 'true';
|
|
222
|
+
const totalPatternTokens = pattern.tokens.length;
|
|
223
|
+
// Quick check: do we have enough tokens?
|
|
224
|
+
if (tokens.length < pattern.minTokens) {
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
failure: {
|
|
228
|
+
pattern: rule.pattern,
|
|
229
|
+
action: rule.action,
|
|
230
|
+
progress: 0,
|
|
231
|
+
tokensConsumed: 0,
|
|
232
|
+
reason: 'NOT_ENOUGH_TOKENS',
|
|
233
|
+
expected: pattern.tokens[0]?.value
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
const slots = new Map();
|
|
238
|
+
let tokenIndex = 0;
|
|
239
|
+
let patternIndex = 0;
|
|
240
|
+
let confidence = 1.0;
|
|
241
|
+
let skippedOptionals = 0;
|
|
242
|
+
const matchedTokens = {};
|
|
243
|
+
let matchedVerb;
|
|
244
|
+
// Try to match each pattern token
|
|
245
|
+
for (const patternToken of pattern.tokens) {
|
|
246
|
+
patternIndex++;
|
|
247
|
+
// Check if we have a token to match
|
|
248
|
+
if (tokenIndex >= tokens.length) {
|
|
249
|
+
if (patternToken.optional) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
// Not enough tokens for required pattern element
|
|
253
|
+
return {
|
|
254
|
+
success: false,
|
|
255
|
+
failure: {
|
|
256
|
+
pattern: rule.pattern,
|
|
257
|
+
action: rule.action,
|
|
258
|
+
progress: patternIndex / totalPatternTokens,
|
|
259
|
+
tokensConsumed: tokenIndex,
|
|
260
|
+
reason: 'NOT_ENOUGH_TOKENS',
|
|
261
|
+
matchedVerb,
|
|
262
|
+
expected: patternToken.type === 'slot' ? `:${patternToken.value}` : patternToken.value
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
const token = tokens[tokenIndex];
|
|
267
|
+
switch (patternToken.type) {
|
|
268
|
+
case 'literal':
|
|
269
|
+
if (token.normalized === patternToken.value) {
|
|
270
|
+
if (tokenIndex === 0) {
|
|
271
|
+
matchedTokens.verb = token.normalized;
|
|
272
|
+
matchedVerb = token.normalized;
|
|
273
|
+
}
|
|
274
|
+
tokenIndex++;
|
|
275
|
+
}
|
|
276
|
+
else if (patternToken.optional) {
|
|
277
|
+
skippedOptionals++;
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// Check if this is verb position for better error
|
|
282
|
+
const reason = tokenIndex === 0 ? 'VERB_MISMATCH' : 'LITERAL_MISMATCH';
|
|
283
|
+
return {
|
|
284
|
+
success: false,
|
|
285
|
+
failure: {
|
|
286
|
+
pattern: rule.pattern,
|
|
287
|
+
action: rule.action,
|
|
288
|
+
progress: patternIndex / totalPatternTokens,
|
|
289
|
+
tokensConsumed: tokenIndex,
|
|
290
|
+
reason,
|
|
291
|
+
matchedVerb,
|
|
292
|
+
failedAtToken: token.normalized,
|
|
293
|
+
expected: patternToken.value
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
break;
|
|
298
|
+
case 'alternates':
|
|
299
|
+
if (patternToken.alternates.includes(token.normalized)) {
|
|
300
|
+
if (tokenIndex === 0) {
|
|
301
|
+
matchedTokens.verb = token.normalized;
|
|
302
|
+
matchedVerb = token.normalized;
|
|
303
|
+
}
|
|
304
|
+
tokenIndex++;
|
|
305
|
+
}
|
|
306
|
+
else if (patternToken.optional) {
|
|
307
|
+
skippedOptionals++;
|
|
308
|
+
continue;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
const reason = tokenIndex === 0 ? 'VERB_MISMATCH' : 'LITERAL_MISMATCH';
|
|
312
|
+
return {
|
|
313
|
+
success: false,
|
|
314
|
+
failure: {
|
|
315
|
+
pattern: rule.pattern,
|
|
316
|
+
action: rule.action,
|
|
317
|
+
progress: patternIndex / totalPatternTokens,
|
|
318
|
+
tokensConsumed: tokenIndex,
|
|
319
|
+
reason,
|
|
320
|
+
matchedVerb,
|
|
321
|
+
failedAtToken: token.normalized,
|
|
322
|
+
expected: patternToken.alternates.join('/')
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
break;
|
|
327
|
+
case 'slot':
|
|
328
|
+
const slotResult = this.consumeSlot(patternToken.value, tokens, tokenIndex, pattern, rule, context);
|
|
329
|
+
if (!slotResult) {
|
|
330
|
+
if (patternToken.optional) {
|
|
331
|
+
skippedOptionals++;
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
// Required slot couldn't be filled - collect the attempted text
|
|
335
|
+
const remainingTokens = tokens.slice(tokenIndex);
|
|
336
|
+
const attemptedText = remainingTokens.map(t => t.word).join(' ');
|
|
337
|
+
return {
|
|
338
|
+
success: false,
|
|
339
|
+
failure: {
|
|
340
|
+
pattern: rule.pattern,
|
|
341
|
+
action: rule.action,
|
|
342
|
+
progress: patternIndex / totalPatternTokens,
|
|
343
|
+
tokensConsumed: tokenIndex,
|
|
344
|
+
reason: 'SLOT_FAILED',
|
|
345
|
+
matchedVerb,
|
|
346
|
+
slotFailure: {
|
|
347
|
+
slotName: patternToken.value,
|
|
348
|
+
attemptedText: attemptedText || '(nothing)',
|
|
349
|
+
reason: 'NO_MATCH',
|
|
350
|
+
unknownWord: remainingTokens[0]?.word
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
slots.set(patternToken.value, slotResult);
|
|
356
|
+
if (patternToken.value === 'direction') {
|
|
357
|
+
matchedTokens.direction = slotResult.text;
|
|
358
|
+
}
|
|
359
|
+
else if (patternToken.value === 'preposition') {
|
|
360
|
+
matchedTokens.preposition = slotResult.text;
|
|
361
|
+
}
|
|
362
|
+
tokenIndex = slotResult.tokens[slotResult.tokens.length - 1] + 1;
|
|
363
|
+
confidence *= slotResult.confidence || 0.9;
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Check if we consumed all tokens
|
|
368
|
+
if (tokenIndex !== tokens.length) {
|
|
369
|
+
return {
|
|
370
|
+
success: false,
|
|
371
|
+
failure: {
|
|
372
|
+
pattern: rule.pattern,
|
|
373
|
+
action: rule.action,
|
|
374
|
+
progress: 0.9, // Almost matched but had extra tokens
|
|
375
|
+
tokensConsumed: tokenIndex,
|
|
376
|
+
reason: 'LEFTOVER_TOKENS',
|
|
377
|
+
matchedVerb,
|
|
378
|
+
failedAtToken: tokens[tokenIndex]?.word
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
// Reduce confidence for each skipped optional element
|
|
383
|
+
confidence *= Math.pow(0.9, skippedOptionals);
|
|
384
|
+
// Apply experimental confidence if set
|
|
385
|
+
if (rule.experimentalConfidence) {
|
|
386
|
+
confidence *= rule.experimentalConfidence;
|
|
387
|
+
}
|
|
388
|
+
// Build semantics from the rule and matched tokens
|
|
389
|
+
const semantics = this.buildSemantics(rule, matchedTokens);
|
|
390
|
+
return {
|
|
391
|
+
success: true,
|
|
392
|
+
match: {
|
|
393
|
+
rule,
|
|
394
|
+
confidence,
|
|
395
|
+
slots,
|
|
396
|
+
consumed: tokenIndex,
|
|
397
|
+
semantics,
|
|
398
|
+
matchedTokens
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Build semantic properties from rule and matched tokens
|
|
404
|
+
*/
|
|
405
|
+
buildSemantics(rule, // GrammarRule
|
|
406
|
+
matchedTokens) {
|
|
407
|
+
const DEBUG = process.env.PARSER_DEBUG === 'true';
|
|
408
|
+
let semantics = {};
|
|
409
|
+
if (DEBUG) {
|
|
410
|
+
console.log(`Building semantics for rule: ${rule.pattern}`);
|
|
411
|
+
console.log(`Matched tokens:`, matchedTokens);
|
|
412
|
+
console.log(`Rule semantics:`, rule.semantics);
|
|
413
|
+
console.log(`Rule default semantics:`, rule.defaultSemantics);
|
|
414
|
+
}
|
|
415
|
+
// Start with default semantics if available
|
|
416
|
+
if (rule.defaultSemantics) {
|
|
417
|
+
semantics = { ...rule.defaultSemantics };
|
|
418
|
+
}
|
|
419
|
+
// Apply semantic mappings if available
|
|
420
|
+
if (rule.semantics) {
|
|
421
|
+
// Apply verb semantics
|
|
422
|
+
if (rule.semantics.verbs && matchedTokens.verb) {
|
|
423
|
+
const verbSemantics = rule.semantics.verbs[matchedTokens.verb];
|
|
424
|
+
if (verbSemantics) {
|
|
425
|
+
semantics = { ...semantics, ...verbSemantics };
|
|
426
|
+
if (DEBUG) {
|
|
427
|
+
console.log(`Applied verb semantics for '${matchedTokens.verb}':`, verbSemantics);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// Apply direction semantics
|
|
432
|
+
if (rule.semantics.directions && matchedTokens.direction) {
|
|
433
|
+
const normalizedDirection = rule.semantics.directions[matchedTokens.direction];
|
|
434
|
+
if (normalizedDirection) {
|
|
435
|
+
semantics.direction = normalizedDirection;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// Apply preposition semantics
|
|
439
|
+
if (rule.semantics.prepositions && matchedTokens.preposition) {
|
|
440
|
+
const spatialRelation = rule.semantics.prepositions[matchedTokens.preposition];
|
|
441
|
+
if (spatialRelation) {
|
|
442
|
+
semantics.spatialRelation = spatialRelation;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
if (DEBUG) {
|
|
447
|
+
console.log(`Final semantics:`, semantics);
|
|
448
|
+
}
|
|
449
|
+
return Object.keys(semantics).length > 0 ? semantics : undefined;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Consume tokens for a slot
|
|
453
|
+
*/
|
|
454
|
+
consumeSlot(slotName, tokens, startIndex, pattern, rule, // GrammarRule
|
|
455
|
+
context) {
|
|
456
|
+
const DEBUG = process.env.PARSER_DEBUG === 'true';
|
|
457
|
+
// Find the current slot in the pattern tokens
|
|
458
|
+
let slotTokenIndex = -1;
|
|
459
|
+
let patternSlotToken;
|
|
460
|
+
for (let i = 0; i < pattern.tokens.length; i++) {
|
|
461
|
+
const token = pattern.tokens[i];
|
|
462
|
+
if (token.type === 'slot' && token.value === slotName) {
|
|
463
|
+
slotTokenIndex = i;
|
|
464
|
+
patternSlotToken = token;
|
|
465
|
+
break;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
if (slotTokenIndex === -1) {
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
// Determine slot type from slot constraints or pattern token
|
|
472
|
+
const slotConstraints = rule.slots.get(slotName);
|
|
473
|
+
const slotType = slotConstraints?.slotType || patternSlotToken?.slotType || if_domain_1.SlotType.ENTITY;
|
|
474
|
+
if (DEBUG) {
|
|
475
|
+
console.log(`Slot '${slotName}' has type: ${slotType}`);
|
|
476
|
+
}
|
|
477
|
+
// ADR-088: Delegate to registry if consumer is registered
|
|
478
|
+
if (this.slotConsumerRegistry.hasConsumer(slotType)) {
|
|
479
|
+
const consumerContext = {
|
|
480
|
+
slotName,
|
|
481
|
+
tokens,
|
|
482
|
+
startIndex,
|
|
483
|
+
pattern,
|
|
484
|
+
slotTokenIndex,
|
|
485
|
+
rule,
|
|
486
|
+
context,
|
|
487
|
+
slotType,
|
|
488
|
+
slotConstraints,
|
|
489
|
+
patternToken: patternSlotToken,
|
|
490
|
+
DEBUG
|
|
491
|
+
};
|
|
492
|
+
return this.slotConsumerRegistry.consume(consumerContext);
|
|
493
|
+
}
|
|
494
|
+
// All slot types should be handled by registry consumers (ADR-088)
|
|
495
|
+
// If we reach here, it's an unknown slot type
|
|
496
|
+
throw new Error(`Unknown slot type: ${slotType}`);
|
|
497
|
+
}
|
|
498
|
+
// ==========================================================================
|
|
499
|
+
// ADR-082: Helper Functions for Typed Slot Values
|
|
500
|
+
// ==========================================================================
|
|
501
|
+
/**
|
|
502
|
+
* Extract typed value from a NUMBER slot match
|
|
503
|
+
*/
|
|
504
|
+
static extractNumberValue(match) {
|
|
505
|
+
if (match.slotType !== if_domain_1.SlotType.NUMBER)
|
|
506
|
+
return null;
|
|
507
|
+
const normalized = match.text.toLowerCase();
|
|
508
|
+
// Word form (using imported vocabulary from lang-en-us)
|
|
509
|
+
if (normalized in lang_en_us_1.cardinalNumbers) {
|
|
510
|
+
return lang_en_us_1.cardinalNumbers[normalized];
|
|
511
|
+
}
|
|
512
|
+
// Digit form
|
|
513
|
+
if (/^\d+$/.test(normalized)) {
|
|
514
|
+
return parseInt(normalized, 10);
|
|
515
|
+
}
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Extract typed value from an ORDINAL slot match
|
|
520
|
+
*/
|
|
521
|
+
static extractOrdinalValue(match) {
|
|
522
|
+
if (match.slotType !== if_domain_1.SlotType.ORDINAL)
|
|
523
|
+
return null;
|
|
524
|
+
const normalized = match.text.toLowerCase();
|
|
525
|
+
// Word form (using imported vocabulary from lang-en-us)
|
|
526
|
+
if (normalized in lang_en_us_1.ordinalNumbers) {
|
|
527
|
+
return lang_en_us_1.ordinalNumbers[normalized];
|
|
528
|
+
}
|
|
529
|
+
// Suffixed number form
|
|
530
|
+
const ordinalMatch = normalized.match(/^(\d+)(st|nd|rd|th)$/);
|
|
531
|
+
if (ordinalMatch) {
|
|
532
|
+
return parseInt(ordinalMatch[1], 10);
|
|
533
|
+
}
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Extract canonical direction from a DIRECTION slot match
|
|
538
|
+
*/
|
|
539
|
+
static extractDirectionValue(match) {
|
|
540
|
+
if (match.slotType !== if_domain_1.SlotType.DIRECTION)
|
|
541
|
+
return null;
|
|
542
|
+
const normalized = match.text.toLowerCase();
|
|
543
|
+
return lang_en_us_1.directionMap[normalized] || null;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Extract time components from a TIME slot match
|
|
547
|
+
*/
|
|
548
|
+
static extractTimeValue(match) {
|
|
549
|
+
if (match.slotType !== if_domain_1.SlotType.TIME)
|
|
550
|
+
return null;
|
|
551
|
+
const timeMatch = match.text.match(/^(\d{1,2}):(\d{2})$/);
|
|
552
|
+
if (timeMatch) {
|
|
553
|
+
return {
|
|
554
|
+
hours: parseInt(timeMatch[1], 10),
|
|
555
|
+
minutes: parseInt(timeMatch[2], 10)
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
return null;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
exports.EnglishGrammarEngine = EnglishGrammarEngine;
|
|
562
|
+
//# sourceMappingURL=english-grammar-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"english-grammar-engine.js","sourceRoot":"","sources":["../src/english-grammar-engine.ts"],"names":[],"mappings":"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"}
|