techiaith-speech-normalizer 0.2.0__py3-none-any.whl

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.
@@ -0,0 +1,769 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Welsh Language Data - Shared normalization patterns
4
+
5
+ This module contains all the linguistic data used by Welsh normalizers.
6
+ All normalization rules and lookup tables are centralized here to ensure
7
+ consistency across different normalizer implementations.
8
+ """
9
+
10
+ # ============================================================================
11
+ # PRONOUN NORMALIZATIONS
12
+ # ============================================================================
13
+ PRONOUN_CORRECTIONS = {
14
+ "nw": "nhw",
15
+ "n'w": "nhw",
16
+ "nw'n": "nhw'n",
17
+ "nw'm": "nhw'm",
18
+ "nw'r": "nhw'r",
19
+ "nhwn": "nhw'n",
20
+ "'u": "eu",
21
+ "'ych": "eich",
22
+ "'yng": "ein",
23
+ "'ym": "ein",
24
+ "wnna": "hwnna",
25
+ "wnna'n": "hwnna'n",
26
+ }
27
+
28
+ # ============================================================================
29
+ # VERB CONTRACTIONS
30
+ # ============================================================================
31
+ VERB_CONTRACTIONS = {
32
+ "ca'l": "cael",
33
+ "ca'": "cael",
34
+ "ga'l": "gael",
35
+ "ga'": "ga",
36
+ "cha'l": "chael",
37
+ "bo'": "bod",
38
+ "fo'": "fod",
39
+ "gor'o'": "gorfod",
40
+ "gor'o": "gorfod",
41
+ "gorfo": "gorfod",
42
+ "goro": "gorfod",
43
+ "goffod": "gorfod",
44
+ "goso'": "gosod",
45
+ "'neud": "wneud",
46
+ "neud": "wneud",
47
+ "neu'": "neud",
48
+ "gneu": "gwneud",
49
+ "g'neud": "gwneud",
50
+ "gneud": "gwneud",
51
+ "nath": "wnaeth",
52
+ "natha": "wnaeth",
53
+ "nathon": "wnaethon",
54
+ "nathoch": "wnaethoch",
55
+ "nethon": "wnaethon",
56
+ "netho": "wnaethon",
57
+ "neith": "wnaiff",
58
+ "nei": "wnei",
59
+ "neshi": "wnes i",
60
+ "nesh": "wnes",
61
+ "'nes": "wnes",
62
+ "newch": "wnewch",
63
+ "newn": "wnawn",
64
+ "by'": "bydd",
65
+ "fy'": "fydd",
66
+ "gewn": "gawn",
67
+ "gesh": "ges",
68
+ "gathon": "gaethon",
69
+ "gethon": "gaethon",
70
+ "'di": "ydy",
71
+ "'dy": "ydy",
72
+ "wt": "wyt",
73
+ "wi": "dw i",
74
+ "dwi": "dw i",
75
+ "ydan": "ydym",
76
+ "ydach": "ydych",
77
+ "dach": "dych",
78
+ "odd": "oedd",
79
+ "o'dd": "oedd",
80
+ "o'd'd": "oedd",
81
+ "do'dd": "doedd",
82
+ "do'": "doedd",
83
+ "oddan": "oedden",
84
+ "oddwn": "oeddwn",
85
+ "odden": "oedden",
86
+ "oddyn": "oedden",
87
+ "oeddan": "oedden",
88
+ "o'dden": "oedden",
89
+ "oddach": "oeddech",
90
+ "oddat": "oeddet",
91
+ "odda": "roedd",
92
+ "'swn": "baswn",
93
+ "'sa": "basai",
94
+ "swn": "baswn",
95
+ "sa": "basai",
96
+ "sa'n": "basai'n",
97
+ "dyla": "dylai",
98
+ "dylia": "dylai",
99
+ "'ddan": "oedden",
100
+ "'sych": "bysych",
101
+ "'tai": "petai",
102
+ }
103
+
104
+ # ============================================================================
105
+ # MAE CONTRACTIONS
106
+ # ============================================================================
107
+ MAE_CONTRACTIONS = {
108
+ "ma'": "mae",
109
+ "ma'r": "mae'r",
110
+ "ma'n": "mae'n",
111
+ "m'e": "mae",
112
+ }
113
+
114
+ # ============================================================================
115
+ # OTHER CONTRACTIONS
116
+ # ============================================================================
117
+ OTHER_CONTRACTIONS = {
118
+ "ne'": "neu",
119
+ "'na": "yna",
120
+ "'ne": "yna",
121
+ "'ma": "yma",
122
+ "fama": "fan yma",
123
+ "fyma": "fan yma",
124
+ "fana": "fan yna",
125
+ "fan'na": "fan yna",
126
+ "fyna": "fan yna",
127
+ "fan'cw": "fan acw",
128
+ "'lly": "felly",
129
+ "'elly": "felly",
130
+ "lly": "felly",
131
+ "'llu": "felly",
132
+ "'fo": "efo",
133
+ "'da": "gyda",
134
+ "timod": "ti'n gwybod",
135
+ "t'mod": "ti'n gwybod",
136
+ "t'bo'": "ti'n gwybod",
137
+ "t'mo": "ti'n gwybod",
138
+ "'wan": "rŵan",
139
+ "rwan": "rŵan",
140
+ "ŵan": "rŵan",
141
+ "'w'rach": "hwyrach",
142
+ "'chos": "achos",
143
+ "'c'os": "achos",
144
+ "chos": "achos",
145
+ "'im": "dim",
146
+ "im": "dim",
147
+ "'nol": "yn ôl",
148
+ "'fyd": "hefyd",
149
+ "'to": "eto",
150
+ "'stafell": "ystafell",
151
+ "'sgubor": "ysgubor",
152
+ "'mlan": "ymlaen",
153
+ "'mlaen": "ymlaen",
154
+ "bla'n": "blaen",
155
+ "'run": "yr un",
156
+ "run": "yr un",
157
+ "'biti": "piti",
158
+ "'wna": "hwnna",
159
+ "'ddo": "iddo",
160
+ "'chydig": "ychydig",
161
+ "'lla": "efallai",
162
+ # "'yn": "fy",
163
+ "'i'n": "hi'n",
164
+ "o'no": "ohono",
165
+ "'ta'": "yntau",
166
+ "'am": "yna ddim",
167
+ "'ndoes": "onid oes",
168
+ "'thrawon": "athrawon",
169
+ "oe'": "oed",
170
+ }
171
+
172
+ # ============================================================================
173
+ # VOWEL REDUCTIONS - PLURALS
174
+ # ============================================================================
175
+ PLURAL_REDUCTIONS = {
176
+ # North forms (-a)
177
+ "petha": "pethau",
178
+ "betha": "bethau",
179
+ "pwysa": "pwysau",
180
+ "bwysa'": "bwysau",
181
+ "lleisia": "lleisiau",
182
+ "lleisia'": "lleisiau",
183
+ "lleisa": "lleisiau",
184
+ "profiada": "profiadau",
185
+ "brofiada": "brofiadau",
186
+ "sgilia": "sgiliau",
187
+ "sgilia'": "sgiliau",
188
+ "hawlia'": "hawliau",
189
+ "ffinia'": "ffiniau",
190
+ "llunia'": "lluniau",
191
+ "norma'": "normau",
192
+ "cama'": "camau",
193
+ "cyfrynga'": "cyfryngau",
194
+ "emosiyna": "emosiynau",
195
+ "hemosiyna": "hemosiynau",
196
+ "dyddia'": "dyddiau",
197
+ "dyddia": "dyddiau",
198
+ "sesiyna": "sesiynau",
199
+ "problema": "problemau",
200
+ "gema": "gemau",
201
+ "gema'": "gemau",
202
+ "gweithgaredda": "gweithgareddau",
203
+ "anawstera": "anawsterau",
204
+ "grwpia'": "grwpiau",
205
+ "heria'": "heriau",
206
+ "radda": "raddau",
207
+ "gwasanaetha'": "gwasanaethau",
208
+ "wasanaetha'": "wasanaethau",
209
+ "bywyda": "bywydau",
210
+ "asiantaetha": "asiantaethau",
211
+ "sgyrsia'": "sgyrsiau",
212
+ "syniada": "syniadau",
213
+ "newidiada": "newidiadau",
214
+ "ffrindia": "ffrindiau",
215
+ "elfenna'": "elfennau",
216
+ "elfenna": "elfennau",
217
+ "dyheada": "dyheadau",
218
+ "pyncia'": "pynciau",
219
+ "penderfyniada": "penderfyniadau",
220
+ "mudiada": "mudiadau",
221
+ "gyfnoda": "gyfnodau",
222
+ "sylwada'": "sylwadau",
223
+ "patryma": "patrymau",
224
+ "ddatblygiada": "ddatblygiadau",
225
+ "cyrsia": "cyrsiau",
226
+ "terma": "termau",
227
+ "clwbia": "clybiau",
228
+ "systema": "systemau",
229
+ "diwyllianna": "diwylliannau",
230
+ "geiria'": "geiriau",
231
+ "apia": "apiau",
232
+ "agwedda'": "agweddau",
233
+ "sefydliada": "sefydliadau",
234
+ "cymuneda": "cymunedau",
235
+ "gwefanna": "gwefannau",
236
+ "anwyldera": "anhwylderau",
237
+ "tegana": "teganau",
238
+ "brojecta": "brojectau",
239
+ "anabledda": "anableddau",
240
+ "cyfrifoldeba": "cyfrifoldebau",
241
+ "perthnasa'": "perthnasau",
242
+ "adolygiada": "adolygiadau",
243
+ "awdurdoda'": "awdurdodau",
244
+ "polisia": "polisïau",
245
+ "darpariaetha": "darpariaethau",
246
+ "effeithia'": "effeithiau",
247
+ "cyffuria": "cyffuriau",
248
+ "delwedda'": "delweddau",
249
+ "amgylchiada": "amgylchiadau",
250
+ "ffactora'": "ffactorau",
251
+ "oria": "oriau",
252
+ "cwestiyna'": "cwestiynau",
253
+ "adroddiada": "adroddiadau",
254
+ "trefniada": "trefniadau",
255
+ "bwyntia'": "bwyntiau",
256
+ "saithdega": "saithdegau",
257
+ "chwedega": "chwedegau",
258
+ "harddega": "harddegau",
259
+ "disgwyliada": "disgwyliadau",
260
+ "weithia": "weithiau",
261
+ "weithia'": "weithiau",
262
+ "sylwada": "sylwadau",
263
+
264
+ # South forms (-e)
265
+ "pethe": "pethau",
266
+ "bethe": "bethau",
267
+ "gore": "gorau",
268
+ "coese": "coesau",
269
+ "enwe": "enwau",
270
+ "pwyse": "pwysau",
271
+ "geirie": "geiriau",
272
+ "ffrindie": "ffrindiau",
273
+ "cymeriade": "cymeriadau",
274
+ "effeithie": "effeithiau",
275
+ "canlyniade": "canlyniadau",
276
+ "potie": "potiau",
277
+ "orie": "oriau",
278
+ "delwedde": "delweddau",
279
+ "astudiaethe": "astudiaethau",
280
+ "risge": "risgiau",
281
+ "anabledde": "anableddau",
282
+ "trafodaethe": "trafodaethau",
283
+ "terme": "termau",
284
+ "elfenne": "elfennau",
285
+ "cymwystere": "cymwysterau",
286
+ "syniade": "syniadau",
287
+ "asiantaethe": "asiantaethau",
288
+ "gwasanaethe": "gwasanaethau",
289
+ "radde": "raddau",
290
+ "cyfrynge": "cyfryngau",
291
+ "hawlie": "hawliau",
292
+ "profiade": "profiadau",
293
+ "brofiade": "brofiadau",
294
+ "weithie": "weithiau",
295
+ "resyme": "resymau",
296
+ "idiome": "idiomau",
297
+ }
298
+
299
+ # ============================================================================
300
+ # VERB REDUCTIONS
301
+ # ============================================================================
302
+ VERB_REDUCTIONS = {
303
+ "dechre": "dechrau",
304
+ "dechra": "dechrau",
305
+ "dechra'": "dechrau",
306
+ "ddechre": "ddechrau",
307
+ "gweitho": "gweithio",
308
+ "gwithio": "gweithio",
309
+ "withio": "weithio",
310
+ "gwitho": "gweithio",
311
+ "disgwl": "disgwyl",
312
+ "gobitho": "gobeithio",
313
+ "grando": "gwrando",
314
+ "gwryndo": "gwrando",
315
+ "gadal": "gadael",
316
+ "gadel": "gadael",
317
+ "gada'l": "gadael",
318
+ "gade'l": "gadael",
319
+ "adal": "adael",
320
+ "cyrradd": "cyrraedd",
321
+ "gyrradd": "gyrraedd",
322
+ "diodde": "dioddef",
323
+ "gyfadde": "gyfaddef",
324
+ "gyfadda": "gyfaddef",
325
+ "cwmpo": "cwympo",
326
+ "lico": "licio",
327
+ "timlo": "teimlo",
328
+ "chwara": "chwarae",
329
+ "chware": "chwarae",
330
+ "clwad": "clywed",
331
+ "clywad": "clywed",
332
+ "glywad": "glywed",
333
+ "glwad": "glywed",
334
+ "cl'wad": "clywed",
335
+ "deu": "dweud",
336
+ "deud": "dweud",
337
+ "deu'": "dweud",
338
+ "ddeu": "ddweud",
339
+ "weud": "ddweud",
340
+ "deutha": "dweud wrth",
341
+ "daetho": "dweud wrth",
342
+ "ymatab": "ymateb",
343
+ "myn'": "mynd",
344
+ "arfar": "arfer",
345
+ "ymarfar": "ymarfer",
346
+ "bita": "bwyta",
347
+ "dadla": "dadlau",
348
+ "ffindio": "ffeindio",
349
+ "ffeithio": "effeithio",
350
+ "cerddad": "cerdded",
351
+ "iste": "eistedd",
352
+ "cyfadda": "cyfaddef",
353
+ "gorffan": "gorffen",
354
+ "darllan": "darllen",
355
+ "edrach": "edrych",
356
+ "angan": "angen",
357
+ "hangan": "hangen",
358
+ "gweud": "dweud",
359
+ "roid": "roi",
360
+ "rhoid": "rhoi",
361
+ "styried": "ystyried",
362
+ "ystyriad": "ystyried",
363
+ "atab": "ateb",
364
+ "wela'": "welaf",
365
+ "gwel'": "gweld",
366
+ "ath": "aeth",
367
+ "dath": "daeth",
368
+ "ddath": "ddaeth",
369
+ "ddoth": "ddaeth",
370
+ "'wharae": "chwarae",
371
+ "'drycha": "edrycha",
372
+ "'drychwch": "edrychwch",
373
+ "ty'd": "tyrd",
374
+ "'nabod": "adnabod",
375
+ "gwbod": "gwybod",
376
+ "gwbo": "gwybod",
377
+ "gwy'": "gwybod",
378
+ "gw'bo'": "gwybod",
379
+ "wbod": "wybod",
380
+ "w'bod": "wybod",
381
+ "me'wl": "meddwl",
382
+ "mewl": "meddwl",
383
+ "me'l": "meddwl",
384
+ "m'wl": "meddwl",
385
+ "meddw'": "meddwl",
386
+ "cymyd": "cymryd",
387
+ "cymud": "cymryd",
388
+ "dalld": "deall",
389
+ "diall": "deall",
390
+ "deallt": "deall",
391
+ "camtrin": "cam-trin",
392
+ "cyffwr": "cyffwrdd",
393
+ "sicrau": "sicrhau",
394
+ "cydnabot": "cydnabod",
395
+ "sy": "sydd",
396
+ "su'": "sydd",
397
+ "sy'": "sydd",
398
+ "isie": "eisiau",
399
+ "isia": "eisiau",
400
+ "isio": "eisiau",
401
+ "isio'i": "eisiau ei",
402
+ "isio'u": "eisiau eu",
403
+ "eisia": "eisiau",
404
+ "gafal": "gafael",
405
+ "angofio": "anghofio",
406
+ }
407
+
408
+ # ============================================================================
409
+ # ADJECTIVE REDUCTIONS - AF
410
+ # ============================================================================
411
+ ADJECTIVE_REDUCTIONS = {
412
+ "nesa": "nesaf",
413
+ "nesa'": "nesaf",
414
+ "ola": "olaf",
415
+ "ola'": "olaf",
416
+ "gora": "gorau",
417
+ "gora'": "gorau",
418
+ "ora'": "orau",
419
+ "cynta": "cyntaf",
420
+ "cynta'": "cyntaf",
421
+ "gynta'": "gyntaf",
422
+ "gynta": "gyntaf",
423
+ "cynhara": "cynharaf",
424
+ "eitha": "eithaf",
425
+ "eitha'": "eithaf",
426
+ "itha": "eithaf",
427
+ "mwya": "mwyaf",
428
+ "mwya'": "mwyaf",
429
+ "fwya'": "fwyaf",
430
+ "fwya": "fwyaf",
431
+ "isa": "isaf",
432
+ "gry": "gryf",
433
+ "ifan'": "ifanc",
434
+ "gra": "gryf",
435
+ "gre": "gref",
436
+ "uchal": "uchel",
437
+ }
438
+
439
+ # ============================================================================
440
+ # VOWEL REDUCTIONS - INTERNAL
441
+ # ============================================================================
442
+ INTERNAL_REDUCTIONS = {
443
+ "m'wn": "mewn",
444
+ "mew'": "mewn",
445
+ "meddwlgarwch": "meddylgarwch",
446
+ "sicir": "sicr",
447
+ "amsar": "amser",
448
+ "mowr": "mawr",
449
+ "amal": "aml",
450
+ "wthnos": "wythnos",
451
+ "wsos": "wythnos",
452
+ "ymlan": "ymlaen",
453
+ "hunen": "hunain",
454
+ "angenion": "anghenion",
455
+ "hannar": "hanner",
456
+ "hwna": "hwnna",
457
+ "ynny": "hynny",
458
+ "hynna'": "hynnaf",
459
+ "'ynny": "hynny",
460
+ "'ny": "hynny",
461
+ "yne": "hynny",
462
+ "chydig": "ychydig",
463
+ "chdig": "ychydig",
464
+ "rei": "rhai",
465
+ "rhei": "rhai",
466
+ "eryll": "eraill",
467
+ "hunianiaeth": "hunaniaeth",
468
+ "hunanieth": "hunaniaeth",
469
+ "ymwybyddieth": "ymwybyddiaeth",
470
+ "trw": "trwy",
471
+ "trw'r": "trwy'r",
472
+ "drw": "drwy",
473
+ "drw": "drwy",
474
+ "drost": "dros",
475
+ "wth": "wrth",
476
+ "llawar": "llawer",
477
+ "elle": "efallai",
478
+ "ella": "efallai",
479
+ "e'lla": "efallai",
480
+ "gwanol": "gwahanol",
481
+ "gwahaniath": "gwahaniaeth",
482
+ "gwahanieth": "gwahaniaeth",
483
+ "wahanieth": "wahaniaeth",
484
+ "hydnod": "hyd yn oed",
485
+ "hanas": "hanes",
486
+ "cyfla": "cyfle",
487
+ "enghraiff": "enghraifft",
488
+ "enhraifft": "enghraifft",
489
+ "pentre": "pentref",
490
+ "pentra": "pentref",
491
+ "cartra": "cartref",
492
+ "cartre": "cartref",
493
+ "traffath": "trafferth",
494
+ "negas": "neges",
495
+ "blesar": "bleser",
496
+ "plesar": "pleser",
497
+ "gynhenydd": "gynhenid",
498
+ "ersdalwm": "ers dalwm",
499
+ "problam": "problem",
500
+ "broblam": "broblem",
501
+ "cwbwl": "cwbl",
502
+ "gwbwl": "gwbl",
503
+ "dat": "dad",
504
+ "amrywieth": "amrywiaeth",
505
+ "ystol": "ystod",
506
+ "pŵar": "pŵer",
507
+ "cwricilwm": "cwricwlwm",
508
+ "darpariath": "darpariaeth",
509
+ "cymddeithasol": "cymdeithasol",
510
+ "trosglwyddiadwy": "trosglwyddadwy",
511
+ "ugian": "ugain",
512
+ "ugen": "ugain",
513
+ "bymthag": "bymtheg",
514
+ "ddeugen": "ddeugain",
515
+ "Portsmuth": "Portsmouth",
516
+ "mown": "mewn",
517
+ "withia": "weithiau",
518
+ "withia'": "weithiau",
519
+ }
520
+
521
+ # ============================================================================
522
+ # SPELLING STANDARDIZATIONS
523
+ # ============================================================================
524
+ SPELLING_CORRECTIONS = {
525
+ "gyment": "gymaint",
526
+ "cyment": "cymaint",
527
+ "rwbeth": "rhywbeth",
528
+ "rwbath": "rhywbeth",
529
+ "r'wbath": "rhywbeth",
530
+ "wbath": "rhywbeth",
531
+ "rhwbath": "rhywbeth",
532
+ "rywbath": "rhywbeth",
533
+ "rhwbeth": "rhywbeth",
534
+ "rwle": "rywle",
535
+ "gellu": "gallu",
536
+ "efyd": "hefyd",
537
+ "gwrnado": "gwrando",
538
+ "cymra'g": "cymraeg",
539
+ "gymra'g": "gymraeg",
540
+ "gymraig": "gymraeg",
541
+ "lloeger": "lloegr",
542
+ "ytrach": "hytrach",
543
+ "sicirhau": "sicrhau",
544
+ "jys": "jyst",
545
+ "sud": "sut",
546
+ "be'": "beth",
547
+ "be": "beth",
548
+ "rhyfadd": "rhyfedd",
549
+ "cymru": "Cymru",
550
+ "gymru": "Gymru",
551
+ "cymraeg": "Cymraeg",
552
+ "gymraeg": "Gymraeg",
553
+ "ewrop": "Ewrop",
554
+ "sgandenafia": "Sgandinafia",
555
+ "bobol": "bobl",
556
+ "pobol": "pobl",
557
+ "cwpwl": "cwpl",
558
+ "powb": "pawb",
559
+ "rywyn": "rywun",
560
+ "rwun": "rywun",
561
+ "unryw": "unrhyw",
562
+ "ffor": "ffordd",
563
+ "ginnon": "gennym",
564
+ "ganddon": "gennym",
565
+ "ginon": "gennym",
566
+ "gennyn": "gennym",
567
+ "genddyn": "ganddyn",
568
+ "gannyn": "ganddyn",
569
+ "sgynnoch": "oes gynnoch",
570
+ "sgennych": "oes gennych",
571
+ "dwytha": "diwetha",
572
+ "dwetha": "diwetha",
573
+ "'nde": "ynde",
574
+ "nacdi": "nac ydi",
575
+ "on'": "ond",
576
+ "ont": "ond",
577
+ "on'd": "onid",
578
+ "ne'n": "neu'n",
579
+ "ynnyn": "ynddyn",
580
+ "ch'mod": "chi'n gwybod",
581
+ "chi'mod": "chi'n gwybod",
582
+ "ch'mo'": "chi'n gwybod",
583
+ "ch'mo": "chi'n gwybod",
584
+ "ch'mbo'": "chi'n gwybod",
585
+ "d'chmod": "dach chi'n gwybod",
586
+ "d'ch'mod": "dach chi'n gwybod",
587
+ "d'ch'od": "dach chi'n gwybod",
588
+ "dach'mod": "dach chi'n gwybod",
589
+ "dach'bo'": "dach chi'n gwybod",
590
+ "ch'bo'": "chi'n gwybod",
591
+ "ch'od": "chi'n gwybod",
592
+ "ch'bod": "chi'n gwybod",
593
+ "dych'bo'": "dach chi'n gwybod",
594
+ "dych'mod": "dach chi'n gwybod",
595
+ "t'o'": "ti'n gwybod",
596
+ "t'mo'": "ti'n gwybod",
597
+ "t'bo'": "ti'n gwybod",
598
+ "t'w'o'": "ti'n gwybod",
599
+ "t'wo'": "ti'n gwybod",
600
+ "t'wod": "ti'n gwybod",
601
+ "t'": "ti'n gwybod",
602
+ "ti'o'": "ti'n gwybod",
603
+ "sti": "wyddost ti",
604
+ "d'chi'n": "rydych chi'n",
605
+ "sbio": "sbïo",
606
+ "ano": "arno",
607
+ "ry": "rhy",
608
+ "dou": "dau",
609
+ "ddou": "ddau",
610
+ "flan": "ymlaen",
611
+ "dy'": "dydd",
612
+ "camra": "camera",
613
+ "barbiciw": "barbeciw",
614
+ "capal": "capel",
615
+ "nyrfys": "nerfus",
616
+ "coedan": "coeden",
617
+ "ogyn": "hogyn",
618
+ "wedig": "enwedig",
619
+ "fforyma": "fforymau",
620
+ "cynor": "cyngor",
621
+ "pethan": "petha'n",
622
+ "osa": "oes yna",
623
+ "jiom": "dydi o ddim",
624
+ "diom": "dydi o ddim",
625
+ "rhai'": "rhaid",
626
+ "rai'": "raid",
627
+ "mlynadd": "mlynedd",
628
+ "blynadd": "blynedd",
629
+ "flynadd": "flynedd",
630
+ "adag": "adeg",
631
+ "ama": "amau",
632
+ "hy'": "hyd",
633
+ "y'": "yn",
634
+ "teuluodd": "teuluoedd",
635
+ "deuluodd": "deuluoedd",
636
+ "blynyddodd": "blynyddoedd",
637
+ }
638
+
639
+ # ============================================================================
640
+ # HESITATION STANDARDIZATION
641
+ # ============================================================================
642
+ HESITATION_STANDARDIZATION = {
643
+ "yy": "yym",
644
+ "yrm": "yym",
645
+ "ymm": "yym",
646
+ "yrr": "yym",
647
+ #"hmm": "yym",
648
+ }
649
+
650
+ # ============================================================================
651
+ # CONTEXT RULES FOR MA'
652
+ # ============================================================================
653
+
654
+ # Lookup table for normalizing followers after "ma'"
655
+ # ma' ALWAYS becomes mae
656
+ # This maps the follower word to what the follower should become
657
+ # e.g., "ma' nw" -> "mae nhw" (nw becomes nhw)
658
+ # "ma' nhw" -> "mae nhw" (nhw stays nhw)
659
+ # "ma' wnna" -> "mae hwnna" (wnna becomes hwnna)
660
+ # "ma' 'na" -> "mae 'na" ('na stays 'na)
661
+ MA_FOLLOWERS = {
662
+ # Existential/possessive patterns (follower stays same)
663
+ "'na": "yna", # ma' 'na -> mae yna (there is)
664
+ "na": "yna", # ma' na -> mae yna
665
+ "'di": "wedi", # ma' 'di -> mae wedi
666
+ # "'da": "gyda", # ma' 'da fi -> mae gyda fi (I have)
667
+
668
+ # Pronouns (follower normalized to standard form)
669
+ "nw": "nhw", # ma' nw -> mae nhw
670
+ "n'w": "nhw", # ma' n'w -> mae nhw
671
+ "nw'": "nhw", # ma' nw' -> mae nhw
672
+ "nw'n": "nhw'n", # ma' nw'n -> mae nhw'n
673
+ "nw'm": "nhw'm", # ma' nw'm -> mae nhw'm
674
+ "fe": "fe", # ma' fe -> mae fe
675
+ "fe'n": "fe'n", # ma' fe'n -> mae fe'n
676
+ "o": "o", # ma' o -> mae o
677
+ "o'n": "o'n", # ma' o'n -> mae o'n
678
+ "hi": "hi", # ma' hi -> mae hi
679
+ "hi'n": "hi'n", # ma' hi'n -> mae hi'n
680
+ "nhw": "nhw", # ma' nhw -> mae nhw
681
+ "nhw'n": "nhw'n", # ma' nhw'n -> mae nhw'n
682
+
683
+ # Possession markers (follower stays same)
684
+ "gen": "gen", # ma' gen i -> mae gen i
685
+ "genna": "genna", # ma' genna i -> mae genna i
686
+ "genno": "genno", # ma' genno fo -> mae genno fo
687
+ "genni": "genni", # ma' genni -> mae genni
688
+ "gyda": "gyda", # ma' gyda fi -> mae gyda fi
689
+ "gynnon": "gynnon", # ma' gynnon ni -> mae gynnon ni
690
+ "gynno": "gynno", # ma' gynno fo -> mae gynno fo
691
+ "gynni": "gynni", # ma' gynni hi -> mae gynni hi
692
+ "gynna": "gynna", # ma' gynna i -> mae gynna i
693
+ "gynnoch": "gynnoch", # ma' gynnoch chi -> mae gynnoch chi
694
+ "gennych": "gennych", # ma' gennych chi -> mae gennych chi
695
+ "gennyn": "gennyn", # ma' gennyn nhw -> mae gennyn nhw
696
+ "ganddyn": "ganddyn", # ma' ganddyn nhw -> mae ganddyn nhw
697
+ "ganddo": "ganddo", # ma' ganddo (ni/fo) -> mae ganddo (ni/fo)
698
+
699
+
700
+ # Demonstrative patterns (follower stays same or gets normalized)
701
+ "hwnna": "hwnna", # ma' hwnna -> mae hwnna
702
+ "hwnna'n": "hwnna'n", # ma' hwnna'n -> mae hwnna'n
703
+ "honna": "honna", # ma' honna -> mae honna
704
+ "honna'n": "honna'n", # ma' honna'n -> mae honna'n
705
+ "hynny": "hynny", # ma' hynny -> mae hynny
706
+ "hynny'n": "hynny'n", # ma' hynny'n -> mae hynny'n
707
+ "hynna": "hynna", # ma' hynna -> mae hynna
708
+ "hynna'n": "hynna'n", # ma' hynna'n -> mae hynna'n
709
+ "hwn": "hwn", # ma' hwn -> mae hwn
710
+ "hon": "hon", # ma' hon -> mae hon
711
+
712
+ # Modal patterns (follower normalized to standard form)
713
+ "raid": "rhaid", # ma' raid -> mae rhaid (must)
714
+ "rhaid": "rhaid", # ma' rhaid -> mae rhaid
715
+ "angen": "angen", # ma' angen -> mae angen (need)
716
+ "isio": "eisiau", # ma' isio -> mae eisiau (want)
717
+ "isho": "eisiau", # ma' isho -> mae eisiau
718
+ "isie": "eisiau", # ma' isie -> mae eisiau
719
+ "eisiau": "eisiau", # ma' eisiau -> mae eisiau
720
+ "'sha": "eisiau", # ma' 'sha -> mae eisiau
721
+
722
+ # Repetition (hesitation) (follower normalized to standard form)
723
+ "ma'": "mae", # ma' ma' -> mae mae
724
+ "ma'r": "mae'r", # ma' ma'r -> mae mae'r
725
+ "ma'n": "mae'n", # ma' ma'n -> mae mae'n
726
+ }
727
+
728
+ # ============================================================================
729
+ # CONTEXT RULES FOR 'DI
730
+ # ============================================================================
731
+
732
+ # Pronouns that precede 'di (safe to expand 'di → wedi after these)
733
+ DI_WEDI_SAFE_PRECEDERS = {
734
+ "dwi", "dw", "fi", "i", "ti", "ni", "chi", "nhw", "nw", "n'w",
735
+ "sy", "sydd", "oedd", "o'dd", "ma'", "mae", "e", "o"
736
+ }
737
+
738
+ # ============================================================================
739
+ # MULTI-WORD REPLACEMENTS
740
+ # ============================================================================
741
+
742
+ # Multi-word phrase replacements
743
+ # Format: "phrase in lowercase" : "normalized phrase"
744
+ # These are checked BEFORE single-word replacements
745
+ MULTI_WORD_REPLACEMENTS = {
746
+ "o's gynnoch": "oes gynnoch",
747
+ "o's gynno": "oes gynno",
748
+ "o's gynni": "oes gynni",
749
+ "o's gynna": "oes gynna",
750
+ "o's gen": "oes gen",
751
+ "o's gyda": "oes gyda",
752
+ "o's 'na": "oes yna",
753
+ "dan dred": "dan draed",
754
+ "dan dra'": "dan draed",
755
+ "neshi dweud": "nes i ddweud",
756
+ "neshi deud": "nes i ddeud",
757
+ "neshi wneud": "nes i wneud",
758
+ "neshi neud": "nes i neud",
759
+ "ti 'bo": "ti'n gwybod",
760
+ "ti bo": "ti'n gwybod",
761
+ "'na beth yw": "dyna beth yw",
762
+ "na beth yw": "dyna beth yw",
763
+ "fel 'na": "fel yna",
764
+ "fel 'a": "fel yna",
765
+ "fel na": "fel yna",
766
+ "dwi'm": "dw i ddim",
767
+ "dwim": "dw i ddim",
768
+ "dwi'n": "dw i'n",
769
+ }