@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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -0
  3. package/dist/direction-mappings.d.ts +24 -0
  4. package/dist/direction-mappings.d.ts.map +1 -0
  5. package/dist/direction-mappings.js +82 -0
  6. package/dist/direction-mappings.js.map +1 -0
  7. package/dist/english-grammar-engine.d.ts +85 -0
  8. package/dist/english-grammar-engine.d.ts.map +1 -0
  9. package/dist/english-grammar-engine.js +562 -0
  10. package/dist/english-grammar-engine.js.map +1 -0
  11. package/dist/english-parser.d.ts +184 -0
  12. package/dist/english-parser.d.ts.map +1 -0
  13. package/dist/english-parser.js +1268 -0
  14. package/dist/english-parser.js.map +1 -0
  15. package/dist/english-pattern-compiler.d.ts +29 -0
  16. package/dist/english-pattern-compiler.d.ts.map +1 -0
  17. package/dist/english-pattern-compiler.js +211 -0
  18. package/dist/english-pattern-compiler.js.map +1 -0
  19. package/dist/grammar.d.ts +19 -0
  20. package/dist/grammar.d.ts.map +1 -0
  21. package/dist/grammar.js +620 -0
  22. package/dist/grammar.js.map +1 -0
  23. package/dist/index.d.ts +24 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +44 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/parse-failure.d.ts +59 -0
  28. package/dist/parse-failure.d.ts.map +1 -0
  29. package/dist/parse-failure.js +132 -0
  30. package/dist/parse-failure.js.map +1 -0
  31. package/dist/parser-types.d.ts +185 -0
  32. package/dist/parser-types.d.ts.map +1 -0
  33. package/dist/parser-types.js +134 -0
  34. package/dist/parser-types.js.map +1 -0
  35. package/dist/pronoun-context.d.ts +119 -0
  36. package/dist/pronoun-context.d.ts.map +1 -0
  37. package/dist/pronoun-context.js +249 -0
  38. package/dist/pronoun-context.js.map +1 -0
  39. package/dist/scope-evaluator.d.ts +58 -0
  40. package/dist/scope-evaluator.d.ts.map +1 -0
  41. package/dist/scope-evaluator.js +205 -0
  42. package/dist/scope-evaluator.js.map +1 -0
  43. package/dist/slot-consumers/entity-slot-consumer.d.ts +36 -0
  44. package/dist/slot-consumers/entity-slot-consumer.d.ts.map +1 -0
  45. package/dist/slot-consumers/entity-slot-consumer.js +413 -0
  46. package/dist/slot-consumers/entity-slot-consumer.js.map +1 -0
  47. package/dist/slot-consumers/index.d.ts +43 -0
  48. package/dist/slot-consumers/index.d.ts.map +1 -0
  49. package/dist/slot-consumers/index.js +78 -0
  50. package/dist/slot-consumers/index.js.map +1 -0
  51. package/dist/slot-consumers/slot-consumer.d.ts +61 -0
  52. package/dist/slot-consumers/slot-consumer.d.ts.map +1 -0
  53. package/dist/slot-consumers/slot-consumer.js +31 -0
  54. package/dist/slot-consumers/slot-consumer.js.map +1 -0
  55. package/dist/slot-consumers/text-slot-consumer.d.ts +33 -0
  56. package/dist/slot-consumers/text-slot-consumer.d.ts.map +1 -0
  57. package/dist/slot-consumers/text-slot-consumer.js +157 -0
  58. package/dist/slot-consumers/text-slot-consumer.js.map +1 -0
  59. package/dist/slot-consumers/typed-slot-consumer.d.ts +35 -0
  60. package/dist/slot-consumers/typed-slot-consumer.d.ts.map +1 -0
  61. package/dist/slot-consumers/typed-slot-consumer.js +151 -0
  62. package/dist/slot-consumers/typed-slot-consumer.js.map +1 -0
  63. package/dist/slot-consumers/vocabulary-slot-consumer.d.ts +42 -0
  64. package/dist/slot-consumers/vocabulary-slot-consumer.d.ts.map +1 -0
  65. package/dist/slot-consumers/vocabulary-slot-consumer.js +186 -0
  66. package/dist/slot-consumers/vocabulary-slot-consumer.js.map +1 -0
  67. 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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"}