@ingglish/g2p 0.1.0

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/dist/index.cjs ADDED
@@ -0,0 +1,1392 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ applyStressPrediction: () => applyStressPrediction,
24
+ wordToArpabet: () => wordToArpabet,
25
+ wordToArpabetTraced: () => wordToArpabetTraced,
26
+ wordToPhonetic: () => wordToPhonetic
27
+ });
28
+ module.exports = __toCommonJS(index_exports);
29
+
30
+ // src/g2p-rules.ts
31
+ var import_phonemes2 = require("@ingglish/phonemes");
32
+
33
+ // src/stress.ts
34
+ var import_phonemes = require("@ingglish/phonemes");
35
+ var REDUCIBLE_VOWELS = /* @__PURE__ */ new Set(["AE"]);
36
+ var SECONDARY_STRESS_VOWELS = /* @__PURE__ */ new Set(["AA", "AE", "AO", "AW", "AY", "EH", "EY", "OY", "UH"]);
37
+ var STRESS_ATTRACTING_SUFFIXES = [
38
+ "eer",
39
+ "ese",
40
+ "ette",
41
+ "esque",
42
+ "ique",
43
+ "oon",
44
+ "ade",
45
+ "aire",
46
+ "esce",
47
+ "ee"
48
+ ];
49
+ var PRE_STRESS_SUFFIXES = [
50
+ // Antepenultimate (3 from end) — check longer suffixes first
51
+ { stressFromEnd: 3, suffix: "ium" },
52
+ { stressFromEnd: 3, suffix: "ian" },
53
+ { stressFromEnd: 3, suffix: "ia" },
54
+ { stressFromEnd: 3, suffix: "io" },
55
+ { stressFromEnd: 3, suffix: "ical" },
56
+ { stressFromEnd: 3, suffix: "ious" },
57
+ { stressFromEnd: 3, suffix: "eous" },
58
+ { stressFromEnd: 3, suffix: "uous" },
59
+ { stressFromEnd: 3, suffix: "ular" },
60
+ { stressFromEnd: 3, suffix: "ophy" },
61
+ { stressFromEnd: 3, suffix: "osis" },
62
+ { stressFromEnd: 3, suffix: "itis" },
63
+ { stressFromEnd: 3, suffix: "athy" },
64
+ { stressFromEnd: 3, suffix: "ity" },
65
+ { stressFromEnd: 3, suffix: "ety" },
66
+ { stressFromEnd: 3, suffix: "ial" },
67
+ { stressFromEnd: 3, suffix: "ual" },
68
+ { stressFromEnd: 3, suffix: "ify" },
69
+ { stressFromEnd: 3, suffix: "ogy" },
70
+ { stressFromEnd: 3, suffix: "omy" },
71
+ { stressFromEnd: 3, suffix: "ony" },
72
+ { stressFromEnd: 3, suffix: "ory" },
73
+ // Penultimate (2 from end) — Italian/Polish names and common patterns
74
+ { stressFromEnd: 3, suffix: "iano" },
75
+ { stressFromEnd: 2, suffix: "ella" },
76
+ { stressFromEnd: 2, suffix: "elli" },
77
+ { stressFromEnd: 2, suffix: "ello" },
78
+ { stressFromEnd: 2, suffix: "etta" },
79
+ { stressFromEnd: 2, suffix: "etti" },
80
+ { stressFromEnd: 2, suffix: "owski" },
81
+ { stressFromEnd: 2, suffix: "ewski" },
82
+ { stressFromEnd: 2, suffix: "tion" },
83
+ { stressFromEnd: 2, suffix: "sion" },
84
+ { stressFromEnd: 2, suffix: "cian" },
85
+ { stressFromEnd: 3, suffix: "ative" },
86
+ { stressFromEnd: 3, suffix: "ally" },
87
+ { stressFromEnd: 2, suffix: "ics" },
88
+ { stressFromEnd: 2, suffix: "ic" },
89
+ { stressFromEnd: 3, suffix: "ate" },
90
+ { stressFromEnd: 2, suffix: "ive" },
91
+ { stressFromEnd: 3, suffix: "ible" },
92
+ { stressFromEnd: 2, suffix: "ment" }
93
+ ];
94
+ var UNSTRESSED_PREFIXES = [
95
+ // Tier 1: reliable
96
+ { minLength: 7, prefix: "dis" },
97
+ { minLength: 7, prefix: "mis" },
98
+ { minLength: 4, prefix: "be" },
99
+ { minLength: 4, prefix: "de" },
100
+ { minLength: 5, prefix: "re" },
101
+ // Tier 2: mostly reliable — check longer prefixes first
102
+ { minLength: 7, prefix: "under" },
103
+ { minLength: 7, prefix: "inter" },
104
+ { minLength: 6, prefix: "over" },
105
+ { minLength: 4, prefix: "un" },
106
+ { minLength: 4, prefix: "ex" },
107
+ { minLength: 7, prefix: "sur" },
108
+ { minLength: 5, prefix: "sub" },
109
+ { minLength: 6, prefix: "per" },
110
+ { minLength: 6, prefix: "con" },
111
+ { minLength: 6, prefix: "pro" },
112
+ // Tier 3: Latinate a- prefixes (abandon, absorb, accept, advance, etc.)
113
+ { minLength: 6, prefix: "ab" },
114
+ { minLength: 6, prefix: "ac" },
115
+ { minLength: 6, prefix: "ad" },
116
+ { minLength: 6, prefix: "af" },
117
+ { minLength: 6, prefix: "ap" },
118
+ { minLength: 6, prefix: "as" },
119
+ { minLength: 6, prefix: "at" }
120
+ ];
121
+ function applyStressPrediction(word, phonemes) {
122
+ const vowelPositions = [];
123
+ for (const [i, phoneme] of phonemes.entries()) {
124
+ const p = phoneme;
125
+ const lastChar = p.codePointAt(p.length - 1);
126
+ if (lastChar >= 48 && lastChar <= 50) {
127
+ vowelPositions.push(i);
128
+ }
129
+ }
130
+ if (vowelPositions.length <= 1) {
131
+ return phonemes;
132
+ }
133
+ const stressedSyllable = predictStressSyllable(word, vowelPositions.length);
134
+ const result = [...phonemes];
135
+ let actualStressed = stressedSyllable;
136
+ if (vowelPositions[actualStressed] !== void 0 && result[vowelPositions[actualStressed]] === "AH0") {
137
+ let found = false;
138
+ for (let j = actualStressed - 1; j >= 0; j--) {
139
+ if (result[vowelPositions[j]] !== "AH0") {
140
+ actualStressed = j;
141
+ found = true;
142
+ break;
143
+ }
144
+ }
145
+ if (!found) {
146
+ for (let j = actualStressed + 1; j < vowelPositions.length; j++) {
147
+ if (result[vowelPositions[j]] !== "AH0") {
148
+ actualStressed = j;
149
+ break;
150
+ }
151
+ }
152
+ }
153
+ }
154
+ for (const [i, vowelPosition] of vowelPositions.entries()) {
155
+ const pos = vowelPosition;
156
+ const phoneme = result[pos];
157
+ const base = (0, import_phonemes.stripStress)(phoneme);
158
+ if (phoneme === "AH0") {
159
+ continue;
160
+ }
161
+ if (i === actualStressed) {
162
+ result[pos] = base + "1";
163
+ } else {
164
+ if (REDUCIBLE_VOWELS.has(base)) {
165
+ result[pos] = "AH0";
166
+ } else if (SECONDARY_STRESS_VOWELS.has(base)) {
167
+ result[pos] = base + "2";
168
+ } else {
169
+ result[pos] = base + "0";
170
+ }
171
+ }
172
+ }
173
+ return result;
174
+ }
175
+ function predictStressSyllable(word, syllableCount) {
176
+ const lower = word.toLowerCase();
177
+ for (const suffix of STRESS_ATTRACTING_SUFFIXES) {
178
+ if (lower.endsWith(suffix)) {
179
+ return syllableCount - 1;
180
+ }
181
+ }
182
+ for (const { stressFromEnd, suffix } of PRE_STRESS_SUFFIXES) {
183
+ if (lower.endsWith(suffix)) {
184
+ return Math.max(0, syllableCount - stressFromEnd);
185
+ }
186
+ }
187
+ let base = lower;
188
+ if (base.endsWith("ings")) {
189
+ base = base.slice(0, -4);
190
+ } else if (base.endsWith("ing")) {
191
+ base = base.slice(0, -3);
192
+ }
193
+ for (const word2 of base === lower ? [lower] : [lower, base]) {
194
+ for (const { minLength, prefix } of UNSTRESSED_PREFIXES) {
195
+ if (word2.startsWith(prefix) && word2.length >= minLength) {
196
+ return Math.min(1, syllableCount - 1);
197
+ }
198
+ }
199
+ }
200
+ return 0;
201
+ }
202
+
203
+ // src/g2p-rules.ts
204
+ var NRL_RULES = {
205
+ A: [
206
+ "[ALLO] =/AA L OW/",
207
+ "[ACCI] =/AA CH IY/",
208
+ " [AYE] =/AY/",
209
+ " [AGO] =/AH G OW/",
210
+ " [AND] =/AH N D/",
211
+ " [ARE] =/AA R/",
212
+ " [A]BO=/AH/",
213
+ "F[A]VO=/EY/",
214
+ "TR[A]VE=/AE/",
215
+ "F[A]TH=/AA/",
216
+ "[ASTE] =/EY S T/",
217
+ "[ASE] =/EY S/",
218
+ "[A] =/AX/",
219
+ " [AR]OU=/ER/",
220
+ " [AR]EN =/AA R/",
221
+ "EP[AR]AT=/ER/",
222
+ "[AR]#=/EH R/",
223
+ " [AR]O=/AX R/",
224
+ " ^[AS]#=/EY S/",
225
+ "[A]WA=/AX/",
226
+ "[AWL]=/AO L/",
227
+ "[AW]FU=/AA/",
228
+ "[AW]=/AO/",
229
+ " :[ANY]=/EH N IY/",
230
+ "[A]HE=/AH/",
231
+ "[A]^+#=/EY/",
232
+ "#:[ALLY]=/AX L IY/",
233
+ " [AL]#=/AX L/",
234
+ "[AGAIN]=/AX G EH N/",
235
+ "SS[AG]E=/AH JH/",
236
+ "#:[AG]E=/IH JH/",
237
+ " :[A]^+ =/EY/",
238
+ "[A]^%=/EY/",
239
+ "M[ARR]IE=/EH R/",
240
+ "[ARR]ES=/ER/",
241
+ "[ARR]IV=/ER/",
242
+ "[ARR]=/AE R/",
243
+ " :[AR] =/AA R/",
244
+ "ST[AR] =/AA R/",
245
+ "[AR] =/ER/",
246
+ "ST[AR]D=/ER/",
247
+ "[AR]=/AA R/",
248
+ "[AIR]=/EH R/",
249
+ "[AIGN]=/EY N/",
250
+ "RT[AI]NL=/AH/",
251
+ "[AI]=/EY/",
252
+ "[AY]=/EY/",
253
+ " L[AUGH]=/AE F/",
254
+ "[AUGH]=/AO/",
255
+ "[AUER]=/AW ER/",
256
+ "[AU]=/AO/",
257
+ "#:[AL] =/AX L/",
258
+ "#:[ALS] =/AX L Z/",
259
+ "[ALK]=/AO K/",
260
+ "[AL]B=/AE L/",
261
+ "[AL]C=/AE L/",
262
+ "H[ALF]=/AE F/",
263
+ "C[ALF]=/AE F/",
264
+ "[AL]F=/AE L/",
265
+ "[AL]G=/AE L/",
266
+ "[AL]P=/AE L/",
267
+ "[AL]V=/AE L/",
268
+ "[ALM] =/AA M/",
269
+ "[ALM]S =/AA M/",
270
+ " [AL]LE=/AE L/",
271
+ "SH[AL]L=/AE L/",
272
+ " [AL]LOT=/AH L/",
273
+ "[AL]^=/AO L/",
274
+ " :[ABLE]=/EY B AX L/",
275
+ "[ABLE]=/AX B AX L/",
276
+ "[ANG]+=/EY N JH/",
277
+ "#:[ANCE] =/AX N S/",
278
+ "#:[ANTS] =/AX N T S/",
279
+ "#:[ANT] =/AX N T/",
280
+ "[AA]=/AA/",
281
+ "[AE]=/EH/",
282
+ " [A]NO=/AH/",
283
+ "#:[AS] =/AH Z/",
284
+ "M[A]JO=/EY/",
285
+ "SW[A]LL=/AA/",
286
+ "SW[A]P=/AA/",
287
+ "SQU[A]=/AA/",
288
+ "QU[A]NT=/AA/",
289
+ "[A]=/AE/",
290
+ "#:[AN] =/AX N/"
291
+ ],
292
+ B: [
293
+ "[BEEN] =/B IH N/",
294
+ " [BRA] =/B R AA/",
295
+ " [BOW] =/B AW/",
296
+ " [BOTH] =/B OW TH/",
297
+ " [BE]NE=/B EH/",
298
+ " [BE]^#=/B IH/",
299
+ "[BEING]=/B IY IH NX/",
300
+ " [BUS]#=/B IH Z/",
301
+ "[BUIL]=/B IH L/",
302
+ "[BT]=/T/",
303
+ "#:[BERG] =/B ER G/",
304
+ "#:[BURG] =/B ER G/",
305
+ "#:[BURY] =/B EH R IY/",
306
+ "[BB]=/B/",
307
+ "M[B] =/ /",
308
+ "[B]=/B/"
309
+ ],
310
+ C: [
311
+ " [COS] =/K AO S/",
312
+ " [CHA]R=/CH AA/",
313
+ " [CH]^=/K/",
314
+ "^E[CH]=/K/",
315
+ "[CHEM]=/K EH M/",
316
+ "BA[CH] =/K/",
317
+ "TE[CH] =/K/",
318
+ "EI[CH] =/K/",
319
+ "LO[CH] =/K/",
320
+ "RO[CH] =/K/",
321
+ "MA[CH] =/K/",
322
+ "NE[CH] =/K/",
323
+ "NO[CH] =/K/",
324
+ "DO[CH] =/K/",
325
+ "ZE[CH] =/K/",
326
+ "I[CH]T=/K/",
327
+ "I[CH]EL=/K/",
328
+ "I[CH]OL=/K/",
329
+ "A[CH]EN=/K/",
330
+ "A[CH]TE=/K/",
331
+ "R[CH]IV=/K/",
332
+ "R[CH]IT=/K/",
333
+ "S[CH]KE=/K/",
334
+ "RI[CH]S=/K/",
335
+ "LI[CH] =/K/",
336
+ "EI[CH]ER=/K/",
337
+ "EI[CH]EN=/K/",
338
+ "EI[CH]MA=/K/",
339
+ "[CH]OR=/K/",
340
+ "#RI[CH] =/K/",
341
+ "TRI[CH] =/K/",
342
+ "BRI[CH] =/K/",
343
+ "MA[CH]ER =/K/",
344
+ "LA[CH]ER =/K/",
345
+ "RA[CH]ER =/K/",
346
+ "[CH]=/CH/",
347
+ " S[CI]#=/S AY/",
348
+ "[CIAL]=/SH AX L/",
349
+ "[CI]A=/SH/",
350
+ "[CI]O=/SH/",
351
+ "[CI]EN=/SH/",
352
+ "EX[C]IT=//",
353
+ "EX[C]E=//",
354
+ "M[C]E=/AH K/",
355
+ "[C]+=/S/",
356
+ "[CK]=/K/",
357
+ "[CZ]=/CH/",
358
+ "[CQU]=/K W/",
359
+ "I[CALLY] =/K L IY/",
360
+ "[CYCL]=/S AY K AH L/",
361
+ " [CON]^=/K AH N/",
362
+ "[COM]%=/K AH M/",
363
+ "[CCH]=/K/",
364
+ "M[CC]=/AH K/",
365
+ "[CC]+=/K S/",
366
+ "[CC]=/K/",
367
+ "M[C]G=/AH/",
368
+ "M[C]^=/AH K/",
369
+ "[C]=/K/"
370
+ ],
371
+ D: [
372
+ " [DOING]=/D UW IH NX/",
373
+ "#:[DED] =/D IH D/",
374
+ ".E[D] =/D/",
375
+ "#TE[D] =/IH D/",
376
+ "^TE[D] =/IH D/",
377
+ "#^:E[D] =/T/",
378
+ "[DIAG]=/D AY AH G/",
379
+ "[DIAL]=/D AY AH L/",
380
+ " [DE]^#=/D IH/",
381
+ "[DU]A=/JH UW/",
382
+ "[DG]+=/JH/",
383
+ "[DJ]=/JH/",
384
+ "#:[DDED] =/D IH D/",
385
+ "[DD]=/D/",
386
+ "[D]T =/ /",
387
+ "[D]=/D/"
388
+ ],
389
+ E: [
390
+ "[EAR]D=/ER/",
391
+ "H[EAR] =/IY R/",
392
+ "W[EAR]=/EH R/",
393
+ "B[EAR]=/EH R/",
394
+ "BR[EAK]F=/EH K/",
395
+ "H[EA]VY=/EH/",
396
+ "[EWSKI] =/EH F S K IY/",
397
+ "[ELLI] =/EH L IY/",
398
+ " [EVE] =/IY V/",
399
+ " [EAR] =/IY R/",
400
+ " [EVERY]^=/EH V R IY/",
401
+ " [EVE]N=/IY V/",
402
+ "[E]LECT=/IH/",
403
+ "[E]LIM=/IH/",
404
+ " [E]LE=/IH/",
405
+ " [E]NO=/IH/",
406
+ " [EX]#=/IH G Z/",
407
+ "#:[E] =/ /",
408
+ " :[E] =/IY/",
409
+ "#[ED] =/D/",
410
+ "D[ED] =/IH D/",
411
+ "#:[E]D =/ /",
412
+ "[EV]ER=/EH V/",
413
+ "[ER]%=/ER/",
414
+ "#:[EMENT]=/M AX N T/",
415
+ "#:[ENED] =/AX N D/",
416
+ "#:[ENING]=/AX N IH NX/",
417
+ "#:[ENESS] =/N AX S/",
418
+ "#:[EMAN] =/M AX N/",
419
+ "NT[ERR]UP=/ER/",
420
+ "[ERR]=/EH R/",
421
+ "XP[ER]IE=/IH R/",
422
+ "#:[ER]#=/ER/",
423
+ "S[ER]IO=/IH R/",
424
+ "[ER]#=/EH R/",
425
+ "[ER]=/ER/",
426
+ "@[EW]=/UW/",
427
+ "#:[E]W=/ /",
428
+ "[EW]=/Y UW/",
429
+ "G[E]OR=//",
430
+ "[E]O=/IY/",
431
+ "IC[ES] =/AH Z/",
432
+ "#:&[ES] =/IH Z/",
433
+ "#:[E]S =/ /",
434
+ "#:[ELY] =/L IY/",
435
+ "#:[EFUL] =/F AX L/",
436
+ "[EFUL]=/F UH L/",
437
+ "[EER]=/IH R/",
438
+ "[EE]=/IY/",
439
+ "[EARN]=/ER N/",
440
+ "[EAR]TH=/ER/",
441
+ "[EAR]L=/ER/",
442
+ "[EAR]CH=/ER/",
443
+ "[EAR]T=/ER/",
444
+ "[EAR] =/IH R/",
445
+ "[EAR]S =/IH R/",
446
+ "[EAD]=/EH D/",
447
+ "#:[EA] =/IY AX/",
448
+ "[EAUX]=/OW/",
449
+ "B[EAU]TI=/Y UW/",
450
+ "[EAU]=/OW/",
451
+ "[EA]LTH=/EH/",
452
+ "[EA]THER=/EH/",
453
+ "BR[EA]TH=/EH/",
454
+ "[EA]VEN=/EH/",
455
+ "ST[EA]K=/EY/",
456
+ "[EA]SU=/EH/",
457
+ "D[EA]TH=/EH/",
458
+ "BR[EA]K=/EY/",
459
+ "W[EA]PO=/EH/",
460
+ "[EA]=/IY/",
461
+ "[EIGN]=/EY N/",
462
+ "[EIGH]=/EY/",
463
+ "C[EI]=/IY/",
464
+ "W[EI]RD=/IH/",
465
+ "[EI]=/AY/",
466
+ "[EU]RO=/Y UW/",
467
+ "[EY]E=/AY/",
468
+ "[EY]=/IY/",
469
+ "[EUR] =/ER/",
470
+ "[EU]=/UW/",
471
+ "#:[ENCE] =/AX N S/",
472
+ "#:[ENTS] =/AX N T S/",
473
+ "#:[ENT] =/AX N T/",
474
+ "I[ELD]=/L D/",
475
+ "I[ELS] =/L Z/",
476
+ "I[EL] =/L/",
477
+ "#:[ENS] =/AX N Z/",
478
+ "GR[EN] =/EH N/",
479
+ "#:[EN] =/AX N/",
480
+ "OT[EL]=/EH L/",
481
+ "#:[EL] =/AX L/",
482
+ "#:[EST] =/AX S T/",
483
+ "[EX]TR=/EH K S/",
484
+ " [EX]^=/IH K S/",
485
+ "#:[ELS] =/AX L Z/",
486
+ "#:[ETS] =/AH T S/",
487
+ "#:[EMS] =/AX M Z/",
488
+ "#:[EM] =/AX M/",
489
+ "#:[ET] =/AH T/",
490
+ "P[E]TE=/IY/",
491
+ "D[E]FE=/IH/",
492
+ "D[E]FI=/IH/",
493
+ "R[E]CE=/IH/",
494
+ "D[E]CI=/IH/",
495
+ "R[E]SP=/IH/",
496
+ "R[E]PR=/IY/",
497
+ "S[E]CR=/IY/",
498
+ "S[E]CU=/IH/",
499
+ "R[E]TR=/IY/",
500
+ "D[E]PR=/IH/",
501
+ "D[E]STR=/IH/",
502
+ "D[E]PL=/IH/",
503
+ "D[E]CL=/IH/",
504
+ "D[E]PE=/IH/",
505
+ "D[E]SI=/IH/",
506
+ "D[E]TE=/IH/",
507
+ "R[E]SU=/IH/",
508
+ "R[E]GA=/IH/",
509
+ "[E]VOL=/IH/",
510
+ "CK[E]TT=/IH/",
511
+ "NN[E]LL=/AH/",
512
+ "SS[E]LL=/AH/",
513
+ "DD[E]LL=/AH/",
514
+ "PP[E]LL=/AH/",
515
+ "RR[E]LL=/AH/",
516
+ "TT[E]LL=/AH/",
517
+ "NK[E]TT=/IH/",
518
+ "FF[E]LL=/AH/",
519
+ "LL[E]TT=/IH/",
520
+ "RR[E]TT=/IH/",
521
+ "MM[E]LL=/AH/",
522
+ "NN[E]TT=/IH/",
523
+ "NN[E]SS=/IH/",
524
+ "MM[E]TT=/IH/",
525
+ "GG[E]TT=/IH/",
526
+ "LL[E]NG=/IH/",
527
+ "TL[E]ME=//",
528
+ "B[E]TW=/IH/",
529
+ "PR[E]TT=/IH/",
530
+ "PR[E]TE=/IY/",
531
+ "PR[E]PA=/IY/",
532
+ "PR[E]VE=/IY/",
533
+ "PR[E]CA=/IY/",
534
+ "PR[E]MI=/IY/",
535
+ "PR[E]SC=/IY/",
536
+ "PR[E]VI=/IY/",
537
+ "CR[E]TE=/IY/",
538
+ "PL[E]TE=/IY/",
539
+ "TL[E]ME=//",
540
+ "ST[E]VE=/IY/",
541
+ " [E]QU=/IH/",
542
+ " [E]FF=/IH/",
543
+ " [E]MI=/IH/",
544
+ "D[E]SC=/IH/",
545
+ "EL[E]BR=/AH/",
546
+ "EL[E]PH=/AH/",
547
+ "[E]NB=/AH/",
548
+ "[E]NFEL=/AH/",
549
+ "[E]NSTE=/AH/",
550
+ "SS[E]L=/AH/",
551
+ "CI[E]NT=/AH/",
552
+ "SS[E]NG=/AH/",
553
+ "TN[E]SS=/AH/",
554
+ "[ETTE] =/EH T/",
555
+ "[E]^E =/IY/",
556
+ "[E]=/EH/"
557
+ ],
558
+ F: [
559
+ "[FROM] =/F R AH M/",
560
+ " [FIX]=/F IH K S/",
561
+ "#:[FORD] =/F ER D/",
562
+ "#:[FULLY] =/F AX L IY/",
563
+ "#:[FUL] =/F AX L/",
564
+ "[FUL]=/F UH L/",
565
+ "[FF]=/F/",
566
+ "[F]=/F/"
567
+ ],
568
+ G: [
569
+ " [GIN] =/JH IH N/",
570
+ " [GHOST]=/G OW S T/",
571
+ " [GAS] =/G AE S/",
572
+ " [GN]=/N/",
573
+ "[G]EI=/G/",
574
+ "[GIV]=/G IH V/",
575
+ " [G]I^=/G/",
576
+ "[GEON]=/JH AX N/",
577
+ "[GE]T=/G EH/",
578
+ "SU[GGES]=/G JH EH S/",
579
+ "[GU]I=/G/",
580
+ "EXA[GG]ER=/JH/",
581
+ "[GG]=/G/",
582
+ " B#[G]=/G/",
583
+ "ER[G]ER=/G/",
584
+ "[G]ERN=/G/",
585
+ "L[G]ER=/G/",
586
+ "[G]ER =/G/",
587
+ "[G]ERS=/G/",
588
+ "[G]ERT=/G/",
589
+ "[G]ERD=/G/",
590
+ "[G]ERH=/G/",
591
+ "[G]EL=/G/",
592
+ "IE[G]EL=/G/",
593
+ "[G]+=/JH/",
594
+ "[GREAT]=/G R EY T/",
595
+ "#[GH]=/ /",
596
+ "[G]=/G/"
597
+ ],
598
+ H: [
599
+ " [HAVE] =/HH AE V/",
600
+ " [HAVING]=/HH AE V IH NG/",
601
+ "[HERE] =/HH IY R/",
602
+ "[HELLO]=/HH AH L OW/",
603
+ " [HONEY]=/HH AH N IY/",
604
+ " [HEIR]=/EH R/",
605
+ " [HON]OR=/AA N/",
606
+ " [HON]EST=/AA N/",
607
+ " [HMM]=/HH M/",
608
+ " [HOUR]=/AW ER/",
609
+ " [HEY] =/HH EY/",
610
+ " [HER] =/HH ER/",
611
+ " [HIM] =/HH IH M/",
612
+ " [HIS] =/HH IH Z/",
613
+ "[HOW]=/HH AW/",
614
+ "[H]#=/HH/",
615
+ "[H]=/ /"
616
+ ],
617
+ I: [
618
+ " [INTO] =/IH N T UW/",
619
+ "[ICCI] =/IY CH IY/",
620
+ "CH[ILD]RE=/IH L D/",
621
+ "LL[I]ON=/Y/",
622
+ "M[I]CR=/AY/",
623
+ "WH[I]TE=/AY/",
624
+ "[I]DEA=/AY/",
625
+ "[INI] =/IY N IY/",
626
+ "[INO] =/IY N OW/",
627
+ "[INA] =/IY N AH/",
628
+ "[ISA] =/IY S AH/",
629
+ "[IVA] =/IY V AH/",
630
+ "[IMA] =/IY M AH/",
631
+ "[ITO] =/IY T OW/",
632
+ "[ITA] =/IY T AH/",
633
+ "#:[IALLY]=/IY AX L IY/",
634
+ "#:[IAL]=/IY AX L/",
635
+ "#:[IATE]=/IY EY T/",
636
+ "[INDS] =/AY N D Z/",
637
+ "[IN]D =/AY N/",
638
+ "#:R[IED] =/IY D/",
639
+ "[IED] =/AY D/",
640
+ "FR[IEN]=/EH N/",
641
+ "[IE]F=/IY/",
642
+ "[IE]G=/IY/",
643
+ "[IE]V=/IY/",
644
+ "[IE]C=/IY/",
645
+ "[IE]W=/IY/",
646
+ "[IE]P=/IY/",
647
+ "[IE]B=/IY/",
648
+ "[IE]L=/IY/",
649
+ "[IE]^%=/IY/",
650
+ " :[I]%=/AY/",
651
+ "QU[I]ET=/AY/",
652
+ "[I]%=/IY/",
653
+ "[IE]=/IY/",
654
+ "[IAN] =/IY AX N/",
655
+ "[IUM] =/IY AX M/",
656
+ "[IA] =/IY AX/",
657
+ "[IO] =/IY OW/",
658
+ "[IFY]=/AX F AY/",
659
+ "[ITY] =/AX T IY/",
660
+ "[IBLE]=/AX B AX L/",
661
+ "[IOUS]=/IY AX S/",
662
+ " [I]DE=/AY/",
663
+ "L[I]KE=/AY/",
664
+ "W[I]DE=/AY/",
665
+ "W[I]SE=/AY/",
666
+ "T[I]RE=/AY/",
667
+ "R[I]PE=/AY/",
668
+ "PR[I]CE=/AY/",
669
+ "SP[I]TE=/AY/",
670
+ "FF[I]CU=/AH/",
671
+ "SP[IR]IT=/IH R/",
672
+ "[I]^EM=/AY/",
673
+ "OT[I]CE=/AH/",
674
+ "RV[I]CE=/AH/",
675
+ "EV[I]DE=/AH/",
676
+ "CT[I]CE=/AH/",
677
+ "ACR[I]F=/AH/",
678
+ "LT[I]PL=/AH/",
679
+ "DR[I]VE=/AY/",
680
+ "GU[I]LD=/IH/",
681
+ "UN[I]VE=/AH/",
682
+ "[I]^+:#=/IH/",
683
+ "[IRR]=/ER/",
684
+ "[IR]#=/AY R/",
685
+ "[IZ]%=/AY Z/",
686
+ "ES[I]DE=/AH/",
687
+ "[I]D%=/AY/",
688
+ "[I]T%=/AY/",
689
+ "T[I]VE=/IH/",
690
+ "S[I]VE=/IH/",
691
+ "AL[I]VE=/AY/",
692
+ "L[I]VI=/IH/",
693
+ "AM[I]LY=/AH/",
694
+ "FF[I]CER=/AH/",
695
+ "OM[I]NI=/AH/",
696
+ "PRES[I]DE=/AH/",
697
+ "UT[I]FU=/AH/",
698
+ "D[I]VER=/AY/",
699
+ "[I]^+=/AY/",
700
+ "[IR]=/ER/",
701
+ "[IGH]=/AY/",
702
+ "[ILD]=/AY L D/",
703
+ "[IGN] =/AY N/",
704
+ "[IGN]^=/AY N/",
705
+ "[IGN]%=/AY N/",
706
+ "[IQUE]=/IY K/",
707
+ "^[I] =/IY/",
708
+ "#:[ISMS] =/IH Z AX M Z/",
709
+ "#:[ISM] =/IH Z AX M/",
710
+ "RM[I]NA=/AH/",
711
+ "IM[I]NA=/AH/",
712
+ "OM[I]NA=/AH/",
713
+ "EM[I]NA=/AH/",
714
+ "ED[I]CA=/AH/",
715
+ "UN[I]CA=/AH/",
716
+ "AM[I]NA=/AH/",
717
+ "UM[I]NA=/AH/",
718
+ "OL[I]DA=/AH/",
719
+ "AN[I]MA=/AH/",
720
+ "IN[I]ST=/AH/",
721
+ "NT[I]MA=/AH/",
722
+ "IC[I]PA=/AH/",
723
+ "EC[I]FI=/AH/",
724
+ "IL[I]TA=/AH/",
725
+ "IM[I]TA=/AH/",
726
+ "IG[I]TA=/AH/",
727
+ "ON[I]TO=/AH/",
728
+ "F[I]NA=/AY/",
729
+ "ST[I]GA=/AH/",
730
+ "[I]BLY=/AH/",
731
+ "MP[I]ON=/IY/",
732
+ "[I]NIZE=/AH/",
733
+ "SS[I]BI=/AH/",
734
+ "[ITLE] =/AY T AH L/",
735
+ "[IDLE] =/AY D AH L/",
736
+ "[I]=/IH/"
737
+ ],
738
+ J: ["[J]=/JH/"],
739
+ K: [" [K]N=/ /", "[KK]=/K/", "[K]=/K/"],
740
+ L: [
741
+ " [LOG] =/L AO G/",
742
+ " [LAS] =/L AA S/",
743
+ "[LO]C#=/L OW/",
744
+ "L[L]=/ /",
745
+ "#:[LINE] =/L AY N/",
746
+ "#:[LESSLY] =/L AX S L IY/",
747
+ "UN[LESS]=/L EH S/",
748
+ "#:[LESS] =/L AX S/",
749
+ "[LING]=/L IH NX/",
750
+ "#^:[L]ER=/L/",
751
+ "#^:[L]EY=/L/",
752
+ "[LEAD]=/L IY D/",
753
+ "OB[L]EM=/L/",
754
+ "#^:[L]ET=/L/",
755
+ "#^:[L]%=/AX L/",
756
+ "[LDT] =/L T/",
757
+ "[LL]=/L/",
758
+ "EA[L]IZ=/AH L/",
759
+ "[L]=/L/"
760
+ ],
761
+ M: [
762
+ " [MONEY]=/M AH N IY/",
763
+ " [MON] =/M OW N/",
764
+ " [MRS]=/M IH S IH Z/",
765
+ " [MIX]=/M IH K S/",
766
+ "[MOV]=/M UW V/",
767
+ "[MBS] =/M Z/",
768
+ "[MB] =/M/",
769
+ " [MN]=/N/",
770
+ "[MN]ING=/M/",
771
+ "[MN]ED=/M/",
772
+ "[MN]S=/M/",
773
+ "[MN] =/M/",
774
+ "#:[MENTS] =/M AX N T S/",
775
+ "#:[MENT] =/M AX N T/",
776
+ "#:[MAN] =/M AX N/",
777
+ "#:[MEN] =/M AX N/",
778
+ "[MM]=/M/",
779
+ "[M]=/M/"
780
+ ],
781
+ N: [
782
+ " [NAH] =/N AA/",
783
+ " [NOW]=/N AW/",
784
+ "E[NG]+=/N JH/",
785
+ "[NG]ING=/NX/",
786
+ "[NG]ED=/NX/",
787
+ "LI[NG]ER=/NX/",
788
+ "NI[NG]ER=/NX/",
789
+ "DI[NG]ER=/NX/",
790
+ "RI[NG]ER=/NX/",
791
+ "SI[NG]ER=/NX/",
792
+ "TI[NG]ER=/NX/",
793
+ "ZI[NG]ER=/NX/",
794
+ "MI[NG]ER=/NX/",
795
+ "BI[NG]ER=/NX/",
796
+ "[NG]R=/NX G/",
797
+ "[NG]#=/NX G/",
798
+ "[NGL]%=/NX G AX L/",
799
+ "[NG]=/NX/",
800
+ "[NKC]=/NX K/",
801
+ "[NK]=/NX K/",
802
+ "#:[NESS] =/N AX S/",
803
+ "[NDT] =/N T/",
804
+ "[NN]=/N/",
805
+ "[N]CT=/NG/",
806
+ "[N]X=/NG/",
807
+ "[N]=/N/"
808
+ ],
809
+ O: [
810
+ " [ONCE]=/W AH N S/",
811
+ " [ONES] =/W AH N Z/",
812
+ "D[OE]S=/AH/",
813
+ "D[ONE] =/AH N/",
814
+ "G[ONE] =/AO N/",
815
+ "#[ONE] =/W AH N/",
816
+ "[OWSKI] =/AO F S K IY/",
817
+ " [O]CC=/AH/",
818
+ " [O]PP=/AH/",
819
+ " [ONLY]=/OW N L IY/",
820
+ " [ONE] =/W AH N/",
821
+ " [OUR]=/AW ER/",
822
+ "[OROUGH]=/ER OW/",
823
+ "#:[ORY] =/ER IY/",
824
+ "#:[OR] =/ER/",
825
+ "#:[ORS] =/ER Z/",
826
+ "[ORR]=/AO R/",
827
+ "[OR]=/AO R/",
828
+ "T[OWN]=/AW N/",
829
+ "D[OWN]=/AW N/",
830
+ "R[OWN]=/AW N/",
831
+ "G[OWN]=/AW N/",
832
+ "P[OW]=/AW/",
833
+ "C[OW]=/AW/",
834
+ "V[OW]=/AW/",
835
+ "F[OW]L=/AW/",
836
+ "FL[OW]ER=/AW/",
837
+ "T[OW]ER=/AW/",
838
+ "[OW]=/OW/",
839
+ "I[ONED] =/AX N D/",
840
+ "I[ONING]=/AX N IH NX/",
841
+ "I[ONER]=/AX N ER/",
842
+ "I[ONERS]=/AX N ER Z/",
843
+ "C[O]MP=/AH/",
844
+ "C[O]MM=/AH/",
845
+ "C[O]LL=/AH/",
846
+ "M[O]N%=/AH/",
847
+ "L[O]V=/AH/",
848
+ "N[O]TH=/AH/",
849
+ "T[O]GE=/AH/",
850
+ "W[O]ND=/AH/",
851
+ "PR[O]VE=/UW/",
852
+ "C[O]MF=/AH/",
853
+ "C[O]VE=/AH/",
854
+ "PR[O]TE=/AH/",
855
+ "PR[O]VI=/AH/",
856
+ "PR[O]PO=/AH/",
857
+ "PR[O]FE=/AH/",
858
+ "PR[O]DU=/AH/",
859
+ "PR[O]NO=/AH/",
860
+ "G[O]VE=/AH/",
861
+ "P[O]LI=/AH/",
862
+ "SH[O]VE=/AH/",
863
+ "AB[O]VE=/AH/",
864
+ "M[O]DE=/AA/",
865
+ " [O]BS=/AH/",
866
+ "D[O]G=/AO/",
867
+ "N[O]MI=/AA/",
868
+ " [O]PEN=/OW/",
869
+ " [O]PE=/AA/",
870
+ "M[O]NTH=/AH/",
871
+ "N[O]NE=/AH/",
872
+ "PR[O]PE=/AA/",
873
+ "IS[O]NE=/AH/",
874
+ "S[O]NE=/AH/",
875
+ "PR[O]CE=/AH/",
876
+ "[O]^%=/OW/",
877
+ "[O]^EN=/OW/",
878
+ "[O]^I#=/OW/",
879
+ "[OLK]=/OW K/",
880
+ "[OL]T=/OW L/",
881
+ "[OL]D=/OW L/",
882
+ "[OL]Z=/OW L/",
883
+ "[OL]S=/OW L/",
884
+ "[OL]B=/OW L/",
885
+ "[OL]M=/OW L/",
886
+ "[OL]N=/OW L/",
887
+ "[OL]P=/OW L/",
888
+ "[OUGHT]=/AO T/",
889
+ "DR[OUGH]T=/AW/",
890
+ "D[OUGH]=/OW/",
891
+ "B[OUGH] =/AW/",
892
+ "C[OUGH]=/AA F/",
893
+ "T[OUGH] =/AH F/",
894
+ "R[OUGH] =/AH F/",
895
+ "N[OUGH] =/AH F/",
896
+ "[OUGH] =/AW/",
897
+ "[OUGH]=/AH F/",
898
+ "[OUSE]=/AW S/",
899
+ "H[OU]S#=/AW/",
900
+ "[OUS]=/AX S/",
901
+ "#:[OUR] =/ER/",
902
+ "[OUR]=/AO R/",
903
+ "W[OULD] =/UH D/",
904
+ "C[OULD] =/UH D/",
905
+ "SH[OULD] =/UH D/",
906
+ "[OULD]=/OW L D/",
907
+ "^[OU]^L=/AH/",
908
+ "[OUP]=/UW P/",
909
+ "T[OU]CH=/AH/",
910
+ "Y[OU]NG=/AH/",
911
+ "[OU]=/AW/",
912
+ "[OY]=/OY/",
913
+ "[OING]=/OW IH NX/",
914
+ "[OI]=/OY/",
915
+ "[OOR]=/AO R/",
916
+ "[OOSE]=/UW S/",
917
+ "[OOK]=/UH K/",
918
+ "BL[OOD]=/AH D/",
919
+ "F[OOD]=/UW D/",
920
+ "FL[OOD]=/AH D/",
921
+ "M[OOD]=/UW D/",
922
+ "BR[OOD]=/UW D/",
923
+ "[OOD]=/UH D/",
924
+ "[OO]=/UW/",
925
+ "SH[OE]=/UW/",
926
+ "[OE]=/OW/",
927
+ "#:[OH] =/OW/",
928
+ "[O] =/OW/",
929
+ "[OAR]=/AO R/",
930
+ "[OA]=/OW/",
931
+ "[O]NG=/AO/",
932
+ "I[ON]=/AX N/",
933
+ "#:[ON] =/AX N/",
934
+ "#^[ON]=/AX N/",
935
+ "[OSIS]=/OW S IH S/",
936
+ "[O]ST =/OW/",
937
+ "[O]S =/OW/",
938
+ "[OFF]=/AO F/",
939
+ "[OTHER]=/AH DH ER/",
940
+ "#^:[OM]=/AH M/",
941
+ "[OLOGY]=/AA L AH JH IY/",
942
+ "T[O]DA=/AH/",
943
+ "W[O]MA=/UH/",
944
+ "[O]^A=/OW/",
945
+ "C[O]LO=/AH/",
946
+ "[O]^O=/OW/",
947
+ "[O]BI=/OW/",
948
+ "[O]TI=/OW/",
949
+ "[O]SI=/OW/",
950
+ "[O]GL=/OW/",
951
+ "[O]FI=/OW/",
952
+ "[O]KI=/OW/",
953
+ "P[O]ST=/OW/",
954
+ "CR[O]SS=/AO/",
955
+ "FR[O]NT=/AH/",
956
+ "#:[ONS] =/AH N Z/",
957
+ "#:[OL] =/AO L/",
958
+ "D[O]ZEN=/AH/",
959
+ "TR[O]DU=/AH/",
960
+ "M[O]NK=/AH/",
961
+ "W[O]MAN=/UH/",
962
+ "M[O]NGO=/AA/",
963
+ "W[O]LF=/UH/",
964
+ "L[O]FT=/AO/",
965
+ "CR[O]FT=/AO/",
966
+ "[O]BLIG=/AH/",
967
+ "D[O]MEST=/AH/",
968
+ "ST[O]ME=/AH/",
969
+ "[O]LOGI=/AH/",
970
+ "[O]NIZE=/AH/",
971
+ "[O]NOMI=/AH/",
972
+ "[O]CRAT=/AH/",
973
+ "[O]SCOPE=/AH/",
974
+ "[O]SCOPI=/AH/",
975
+ "[O]PHOB=/AH/",
976
+ "[O]LITH=/AH/",
977
+ "DR[O]GEN=/AH/",
978
+ "[OBLE] =/OW B AH L/",
979
+ "[O]=/AA/",
980
+ "#:[OT] =/AH T/"
981
+ ],
982
+ P: [
983
+ " [PF]=/F/",
984
+ " [PN]=/N/",
985
+ " [PS]=/S/",
986
+ " [PT]=/T/",
987
+ "[PH]=/F/",
988
+ "[PEOP]=/P IY P/",
989
+ "[POW]=/P AW/",
990
+ "[PUT] =/P UH T/",
991
+ "[PP]=/P/",
992
+ "[P]=/P/"
993
+ ],
994
+ Q: ["[QUAR]=/K W AO R/", "[QUA]L=/K W AA/", "[QUE] =/K/", "[QU]=/K W/", "[Q]=/K/"],
995
+ R: [
996
+ "[REALLY]=/R IH L IY/",
997
+ " [RAW] =/R AA/",
998
+ " [RE]ME=/R IH/",
999
+ " [RE]SP=/R IH/",
1000
+ " [RE]QU=/R IH/",
1001
+ " [RE]MA=/R IH/",
1002
+ " [RE]TU=/R IH/",
1003
+ " [RE]FU=/R IH/",
1004
+ " [RE]GA=/R IH/",
1005
+ " [RE]VE=/R IH/",
1006
+ " [RE]GI=/R EH/",
1007
+ " [RE]^#=/R IY/",
1008
+ "[ROLL]=/R OW L/",
1009
+ "[RH]=/R/",
1010
+ "[RDT] =/R T/",
1011
+ "[RR]=/R/",
1012
+ "[R]=/R/"
1013
+ ],
1014
+ S: [
1015
+ " [SURE] =/SH UH R/",
1016
+ "[SORRY]=/S AA R IY/",
1017
+ " [SWOR]D=/S AO R/",
1018
+ " [SON] =/S AH N/",
1019
+ "[SH]=/SH/",
1020
+ "#[SION]=/ZH AX N/",
1021
+ "#:[SIDE] =/S AY D/",
1022
+ "[SCH]OO=/S K/",
1023
+ "[SOME]=/S AH M/",
1024
+ "#[SUR]#=/ZH ER/",
1025
+ "[SUR]#=/SH ER/",
1026
+ "#[SU]#=/ZH UW/",
1027
+ "#[SSU]#=/SH UW/",
1028
+ "#[SED] =/Z D/",
1029
+ "[S]IVE=/S/",
1030
+ "IU[S] =/S/",
1031
+ " RE[S]#=/S/",
1032
+ " DI[S]I=/S/",
1033
+ " DI[S]O=/S/",
1034
+ " DI[S]AR=/S/",
1035
+ " DI[S]T=/S/",
1036
+ " DI[S]AG=/S/",
1037
+ " DI[S]EM=/S/",
1038
+ " DI[S]AP=/S/",
1039
+ " DI[S]AF=/S/",
1040
+ "MY[S]EL=/S/",
1041
+ "I[S]O=/S/",
1042
+ "O[S]O=/S/",
1043
+ "E[S]A=/S/",
1044
+ "O[S]A=/S/",
1045
+ "A[S]I=/S/",
1046
+ "Y[S]O=/S/",
1047
+ "E[S]O=/S/",
1048
+ "U[S]O=/S/",
1049
+ "Y[S]E=/S/",
1050
+ "E[S]E=/S/",
1051
+ "A[S]A=/S/",
1052
+ "I[S]A=/S/",
1053
+ "U[S]A=/S/",
1054
+ "E[S]I=/S/",
1055
+ "O[S]I=/S/",
1056
+ "#[S]#=/Z/",
1057
+ "[SAID]=/S EH D/",
1058
+ "^[SION]=/SH AX N/",
1059
+ "[S]S=/ /",
1060
+ "SE[S] =/AH Z/",
1061
+ "GE[S] =/AH Z/",
1062
+ ".[S] =/Z/",
1063
+ "#:.E[S] =/Z/",
1064
+ "#^:##[S] =/Z/",
1065
+ "A[S] =/Z/",
1066
+ "O[S] =/Z/",
1067
+ "#^:#[S] =/S/",
1068
+ "U[S] =/S/",
1069
+ " :#[S] =/Z/",
1070
+ "AN[SWER]=/S ER/",
1071
+ "[SCH]=/SH/",
1072
+ "[S]C+=/ /",
1073
+ "[STLE]=/S AX L/",
1074
+ "#:[STEN]=/S AX N/",
1075
+ "#:[STEIN] =/S T AY N/",
1076
+ "#:[SON] =/S AX N/",
1077
+ "[SS]=/S/",
1078
+ "OB[S]ER=/Z/",
1079
+ "AB[S]OR=/Z/",
1080
+ "AB[S]OL=/Z/",
1081
+ "TRAN[S]#=/Z/",
1082
+ "[S]=/S/"
1083
+ ],
1084
+ T: [
1085
+ " [THY] =/DH AY/",
1086
+ " [THE] =/DH AX/",
1087
+ " [THIS] =/DH IH S/",
1088
+ " [THEY]=/DH EY/",
1089
+ " [THERE]=/DH EH R/",
1090
+ " [THEN]=/DH EH N/",
1091
+ " [THAN] =/DH AE N/",
1092
+ " [THEM] =/DH EH M/",
1093
+ " [TWO]=/T UW/",
1094
+ "[THAT] =/DH AE T/",
1095
+ "[THER]=/DH ER/",
1096
+ "[THEIR]=/DH EH R/",
1097
+ "[THESE] =/DH IY Z/",
1098
+ "[THROUGH]=/TH R UW/",
1099
+ "[THOSE]=/DH OW Z/",
1100
+ "[THOUGH] =/DH OW/",
1101
+ "[TH]=/TH/",
1102
+ "#:[TED] =/T IH D/",
1103
+ "S[TI]#N=/CH/",
1104
+ "[TI]O=/SH/",
1105
+ "[TIAL]=/SH AX L/",
1106
+ "[TI]A=/SH/",
1107
+ "[TIEN]=/SH AX N/",
1108
+ "[TUR]#=/CH ER/",
1109
+ "[TU]A=/CH UW/",
1110
+ "[TZ]=/T S/",
1111
+ "[TSCH]=/CH/",
1112
+ "#:[TOWN] =/T AW N/",
1113
+ "#:[TIME] =/T AY M/",
1114
+ "[TCH]=/CH/",
1115
+ "#:[TTED] =/T IH D/",
1116
+ "[TT]=/T/",
1117
+ "[T]=/T/"
1118
+ ],
1119
+ U: [
1120
+ "[UCCIO] =/UW CH IY OW/",
1121
+ "[UCCI] =/UW CH IY/",
1122
+ "[ULLO] =/UW L OW/",
1123
+ "[UZZI] =/UW T S IY/",
1124
+ "[ULLI] =/UW L IY/",
1125
+ "[USSO] =/UW S OW/",
1126
+ " [USE] =/Y UW S/",
1127
+ "IN[U]TE=/AH/",
1128
+ "TR[U]TH=/UW/",
1129
+ "P[U]LL=/UH/",
1130
+ "B[U]LL=/UH/",
1131
+ "P[U]SH=/UH/",
1132
+ " [UGH] =/AH G/",
1133
+ " [UN]IN=/AH N/",
1134
+ " [UN]I=/Y UW N/",
1135
+ " [UN]#=/AH N/",
1136
+ " [UN]^=/AH N/",
1137
+ "[UIT]=/UW T/",
1138
+ "[URR]=/ER/",
1139
+ "@[UR]#=/UH R/",
1140
+ "[UR]#=/Y UH R/",
1141
+ "[UR]=/ER/",
1142
+ "[U]^ =/AH/",
1143
+ "C[U]SH=/UH/",
1144
+ "B[U]SH=/UH/",
1145
+ "P[U]NI=/AH/",
1146
+ "[U]^^=/AH/",
1147
+ "[UY]=/AY/",
1148
+ " G[U]#=/ /",
1149
+ "G[U]%=/ /",
1150
+ "G[U]#=/W/",
1151
+ "#N[U]=/Y UW/",
1152
+ "[ULAT]=/Y AX L EY T/",
1153
+ "[ULOUS]=/Y AX L AH S/",
1154
+ "[ULUS]=/Y AX L AH S/",
1155
+ "[ULAR]=/Y AX L ER/",
1156
+ "ST[U]DY=/AH/",
1157
+ "@[U]=/UW/",
1158
+ "[U] =/UW/",
1159
+ "[U]=/Y UW/"
1160
+ ],
1161
+ V: [" [VON] =/V AO N/", "[VIEW]=/V Y UW/", "[VIOL]=/V AY AH L/", "[V]=/V/"],
1162
+ W: [
1163
+ " [WANTED]=/W AO N T IH D/",
1164
+ "[WATER]=/W AO T ER/",
1165
+ " [WON] =/W AH N/",
1166
+ "[WA]STE=/W EY/",
1167
+ "[WA]S=/W AA/",
1168
+ "[WA]T=/W AA/",
1169
+ "[WA]N=/W AA/",
1170
+ "[WA]M=/W AA/",
1171
+ "[WHERE]=/WH EH R/",
1172
+ "[WHAT]=/WH AH T/",
1173
+ "[WHOL]=/HH OW L/",
1174
+ "[WHO]=/HH UW/",
1175
+ "[WH]=/WH/",
1176
+ "#:[WARDS] =/W ER D Z/",
1177
+ "#:[WARD] =/W ER D/",
1178
+ "[WAR]=/W AO R/",
1179
+ "[WOR]^=/W ER/",
1180
+ " [WOW]=/W AW/",
1181
+ "[WR]=/R/",
1182
+ "[W]=/W/"
1183
+ ],
1184
+ X: [" [X]#=/Z/", "[X]=/K S/"],
1185
+ Y: [
1186
+ "[YOUR]=/Y AO R/",
1187
+ "[YEAH] =/Y AE/",
1188
+ " [YET] =/Y EH T/",
1189
+ " [YES] =/Y EH S/",
1190
+ "H[Y]DR=/AY/",
1191
+ "H[Y]PE=/AY/",
1192
+ "#^:[Y] =/IY/",
1193
+ "#^:[Y]I=/IY/",
1194
+ " :[Y] =/AY/",
1195
+ " [YOU] =/Y UW/",
1196
+ " [Y]#=/Y/",
1197
+ " :[Y]#=/AY/",
1198
+ " :[Y]^+:#=/IH/",
1199
+ " :[Y]^#=/AY/",
1200
+ "[Y] =/IY/",
1201
+ "AW[Y]ER=/Y/",
1202
+ "DB[Y]E=/AY/",
1203
+ "[Y]=/IH/"
1204
+ ],
1205
+ Z: [" [ZERO]=/Z IH R OW/", "[ZZ]=/Z/", "[Z]=/Z/"]
1206
+ };
1207
+ var VOWELS = "AEIOUY";
1208
+ var CONSONANTS = "BCDFGHJKLMNPQRSTVWXZ";
1209
+ var CLASSES = {
1210
+ "#": `[${VOWELS}]+`,
1211
+ "%": "(?:ER|E|ES|ED|ING|ELY)",
1212
+ "&": "(?:S|C|G|Z|X|J|CH|SH)",
1213
+ "+": "[EIY]",
1214
+ ".": "[BDVGJLMNRWZ]",
1215
+ ":": `[${CONSONANTS}]*`,
1216
+ "@": "(?:T|S|R|D|L|Z|N|J|TH|CH|SH)",
1217
+ "^": `[${CONSONANTS}]`
1218
+ };
1219
+ var SPECIAL_CHARS = new Set(Object.keys(CLASSES));
1220
+ var NRL_VOWELS = /* @__PURE__ */ new Set([
1221
+ "AA",
1222
+ "AE",
1223
+ "AH",
1224
+ "AO",
1225
+ "AW",
1226
+ "AY",
1227
+ "EH",
1228
+ "ER",
1229
+ "EY",
1230
+ "IH",
1231
+ "IY",
1232
+ "OW",
1233
+ "OY",
1234
+ "UH",
1235
+ "UW"
1236
+ ]);
1237
+ function compileRule(ruleStr) {
1238
+ const m = /^([^[]*)\[([^\]]+)\]([^=]*)=\/(.*)\/$/.exec(ruleStr);
1239
+ if (m === null) {
1240
+ return null;
1241
+ }
1242
+ const leftCtx = m[1];
1243
+ const target = m[2];
1244
+ const rightCtx = m[3];
1245
+ const phonemeStr = m[4];
1246
+ const leftPattern = expandContext(leftCtx);
1247
+ const leftRe = leftPattern.length > 0 ? new RegExp(leftPattern + "$") : null;
1248
+ const rightPattern = expandContext(rightCtx);
1249
+ const rightRe = new RegExp(escapeRegex(target) + rightPattern, "y");
1250
+ const phonemes = phonemeStr.trim().split(/\s+/).filter((p) => p.length > 0).map((p) => nrlToArpabet(p));
1251
+ const fullMatch = isLiteralContext(rightCtx) ? target + rightCtx : null;
1252
+ const leftLiteral = leftCtx.length > 0 && isLiteralContext(leftCtx) ? leftCtx : null;
1253
+ return {
1254
+ fullMatch,
1255
+ leftLiteral,
1256
+ leftRe,
1257
+ phonemes,
1258
+ rightRe,
1259
+ ruleStr,
1260
+ target,
1261
+ targetLen: target.length
1262
+ };
1263
+ }
1264
+ function escapeRegex(s) {
1265
+ return s.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
1266
+ }
1267
+ function expandContext(ctx) {
1268
+ let result = "";
1269
+ for (const ch of ctx) {
1270
+ result += SPECIAL_CHARS.has(ch) ? CLASSES[ch] : escapeRegex(ch);
1271
+ }
1272
+ return result;
1273
+ }
1274
+ function isLiteralContext(ctx) {
1275
+ for (const ch of ctx) {
1276
+ if (SPECIAL_CHARS.has(ch)) {
1277
+ return false;
1278
+ }
1279
+ }
1280
+ return true;
1281
+ }
1282
+ function nrlToArpabet(phoneme) {
1283
+ if (phoneme === "AX") {
1284
+ return "AH0";
1285
+ }
1286
+ if (phoneme === "NX") {
1287
+ return "NG";
1288
+ }
1289
+ if (phoneme === "WH") {
1290
+ return "W";
1291
+ }
1292
+ if (NRL_VOWELS.has(phoneme)) {
1293
+ return phoneme + "1";
1294
+ }
1295
+ return phoneme;
1296
+ }
1297
+ var COMPILED_RULES = {};
1298
+ for (const [letter, rules] of Object.entries(NRL_RULES)) {
1299
+ const compiled = [];
1300
+ for (const rule of rules) {
1301
+ const c = compileRule(rule);
1302
+ if (c !== null) {
1303
+ compiled.push(c);
1304
+ }
1305
+ }
1306
+ COMPILED_RULES[letter] = compiled;
1307
+ }
1308
+ function wordToArpabet(word) {
1309
+ return wordToArpabetTraced(word).phonemes;
1310
+ }
1311
+ function wordToArpabetTraced(word) {
1312
+ const text = " " + word.toUpperCase() + " ";
1313
+ const rawPhonemes = [];
1314
+ const rawSteps = [];
1315
+ let pos = 1;
1316
+ while (pos < text.length - 1) {
1317
+ const ch = text[pos];
1318
+ const rules = COMPILED_RULES[ch];
1319
+ if (rules === void 0) {
1320
+ pos++;
1321
+ } else {
1322
+ let matched = false;
1323
+ let parsed = null;
1324
+ for (const rule of rules) {
1325
+ if (rule.fullMatch === null) {
1326
+ if (rule.targetLen > 1 && !text.startsWith(rule.target, pos)) {
1327
+ continue;
1328
+ }
1329
+ rule.rightRe.lastIndex = pos;
1330
+ if (rule.leftRe !== null) {
1331
+ parsed ?? (parsed = text.slice(0, pos));
1332
+ if (!rule.leftRe.test(parsed)) {
1333
+ continue;
1334
+ }
1335
+ }
1336
+ if (!rule.rightRe.test(text)) {
1337
+ continue;
1338
+ }
1339
+ } else {
1340
+ if (!text.startsWith(rule.fullMatch, pos)) {
1341
+ continue;
1342
+ }
1343
+ if (rule.leftRe !== null) {
1344
+ if (rule.leftLiteral === null) {
1345
+ parsed ?? (parsed = text.slice(0, pos));
1346
+ if (!rule.leftRe.test(parsed)) {
1347
+ continue;
1348
+ }
1349
+ } else if (!text.endsWith(rule.leftLiteral, pos)) {
1350
+ continue;
1351
+ }
1352
+ }
1353
+ }
1354
+ rawPhonemes.push(...rule.phonemes);
1355
+ rawSteps.push({
1356
+ count: rule.phonemes.length,
1357
+ letters: rule.target,
1358
+ ruleStr: rule.ruleStr
1359
+ });
1360
+ pos += rule.targetLen;
1361
+ matched = true;
1362
+ break;
1363
+ }
1364
+ if (!matched) {
1365
+ pos++;
1366
+ }
1367
+ }
1368
+ }
1369
+ const phonemes = applyStressPrediction(word, rawPhonemes);
1370
+ const steps = [];
1371
+ let offset = 0;
1372
+ for (const raw of rawSteps) {
1373
+ steps.push({
1374
+ letters: raw.letters,
1375
+ phonemes: phonemes.slice(offset, offset + raw.count),
1376
+ rule: raw.ruleStr
1377
+ });
1378
+ offset += raw.count;
1379
+ }
1380
+ return { phonemes, steps };
1381
+ }
1382
+ function wordToPhonetic(word, format = "ingglish") {
1383
+ const arpabet = wordToArpabet(word);
1384
+ return (0, import_phonemes2.arpabetToFormat)(arpabet, format);
1385
+ }
1386
+ // Annotate the CommonJS export names for ESM import in node:
1387
+ 0 && (module.exports = {
1388
+ applyStressPrediction,
1389
+ wordToArpabet,
1390
+ wordToArpabetTraced,
1391
+ wordToPhonetic
1392
+ });