normt2s 0.1.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.
normt2s/__init__.py ADDED
@@ -0,0 +1,34 @@
1
+ """normt2s - lightweight text normalization for TTS (numbers, units, abbreviations)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Dict, Union
6
+
7
+ from .lexicon import Lexicon
8
+ from .normalizer import Normalizer
9
+ from .stream import StreamNormalizer
10
+
11
+ __all__ = ["Normalizer", "Lexicon", "StreamNormalizer", "normalize", "get_normalizer"]
12
+ __version__ = "0.1.0"
13
+
14
+ _cache: Dict[str, Normalizer] = {}
15
+
16
+
17
+ def get_normalizer(lang: str = "en") -> Normalizer:
18
+ """Shared per-language instance; add words to it and every ``normalize()`` call sees them."""
19
+ n = _cache.get(lang)
20
+ if n is None:
21
+ n = _cache[lang] = Normalizer(lang)
22
+ return n
23
+
24
+
25
+ def normalize(text: str, lang: Union[str, Normalizer] = "en") -> str:
26
+ """Normalize ``text``.
27
+
28
+ ``lang`` is a language code (uses the shared instance from :func:`get_normalizer`) or your
29
+ own :class:`Normalizer`, so words added to it are honoured:
30
+ ``normalize(text, my_normalizer)``. A plain ``Normalizer("de")`` you created yourself is a
31
+ *separate* instance and is not seen by ``normalize(text, "de")``.
32
+ """
33
+ n = lang if isinstance(lang, Normalizer) else get_normalizer(lang)
34
+ return n.normalize(text)
normt2s/data/de.json ADDED
@@ -0,0 +1,622 @@
1
+ {
2
+ "abbreviations": {
3
+ "z. B.": "zum Beispiel",
4
+ "d. h.": "das heißt",
5
+ "u. a.": "unter anderem",
6
+ "u. U.": "unter Umständen",
7
+ "z. T.": "zum Teil",
8
+ "z. Z.": "zur Zeit",
9
+ "v. a.": "vor allem",
10
+ "i. d. R.": "in der Regel",
11
+ "o. ä.": "oder ähnliches",
12
+ "u. v. m.": "und vieles mehr",
13
+ "usw.": "und so weiter",
14
+ "etc.": {
15
+ "to": "et cetera",
16
+ "final": true
17
+ },
18
+ "bzw.": "beziehungsweise",
19
+ "bzgl.": "bezüglich",
20
+ "ca.": "circa",
21
+ "ggf.": "gegebenenfalls",
22
+ "evtl.": "eventuell",
23
+ "inkl.": "inklusive",
24
+ "exkl.": "exklusive",
25
+ "vgl.": "vergleiche",
26
+ "max.": "maximal",
27
+ "Dr.": "Doktor",
28
+ "Prof.": "Professor",
29
+ "Hr.": "Herr",
30
+ "Fr.": "Frau",
31
+ "Nr.": "Nummer",
32
+ "Abb.": "Abbildung",
33
+ "Tab.": "Tabelle",
34
+ "Kap.": "Kapitel",
35
+ "Mio.": "Millionen",
36
+ "Mrd.": "Milliarden",
37
+ "Std.": "Stunden",
38
+ "24/7": "vierundzwanzig sieben"
39
+ },
40
+ "units": {
41
+ "mm": [
42
+ "Millimeter",
43
+ "Millimeter",
44
+ "m"
45
+ ],
46
+ "cm": [
47
+ "Zentimeter",
48
+ "Zentimeter",
49
+ "m"
50
+ ],
51
+ "m": [
52
+ "Meter",
53
+ "Meter",
54
+ "m"
55
+ ],
56
+ "km": [
57
+ "Kilometer",
58
+ "Kilometer",
59
+ "m"
60
+ ],
61
+ "µm": [
62
+ "Mikrometer",
63
+ "Mikrometer",
64
+ "m"
65
+ ],
66
+ "nm": [
67
+ "Nanometer",
68
+ "Nanometer",
69
+ "m"
70
+ ],
71
+ "mm²": [
72
+ "Quadratmillimeter",
73
+ "Quadratmillimeter",
74
+ "m"
75
+ ],
76
+ "cm²": [
77
+ "Quadratzentimeter",
78
+ "Quadratzentimeter",
79
+ "m"
80
+ ],
81
+ "m²": [
82
+ "Quadratmeter",
83
+ "Quadratmeter",
84
+ "m"
85
+ ],
86
+ "km²": [
87
+ "Quadratkilometer",
88
+ "Quadratkilometer",
89
+ "m"
90
+ ],
91
+ "cm³": [
92
+ "Kubikzentimeter",
93
+ "Kubikzentimeter",
94
+ "m"
95
+ ],
96
+ "m³": [
97
+ "Kubikmeter",
98
+ "Kubikmeter",
99
+ "m"
100
+ ],
101
+ "mg": [
102
+ "Milligramm",
103
+ "Milligramm",
104
+ "n"
105
+ ],
106
+ "g": [
107
+ "Gramm",
108
+ "Gramm",
109
+ "n"
110
+ ],
111
+ "kg": [
112
+ "Kilogramm",
113
+ "Kilogramm",
114
+ "n"
115
+ ],
116
+ "ml": [
117
+ "Milliliter",
118
+ "Milliliter",
119
+ "m"
120
+ ],
121
+ "cl": [
122
+ "Zentiliter",
123
+ "Zentiliter",
124
+ "m"
125
+ ],
126
+ "l": [
127
+ "Liter",
128
+ "Liter",
129
+ "m"
130
+ ],
131
+ "L": [
132
+ "Liter",
133
+ "Liter",
134
+ "m"
135
+ ],
136
+ "ns": [
137
+ "Nanosekunde",
138
+ "Nanosekunden",
139
+ "f"
140
+ ],
141
+ "µs": [
142
+ "Mikrosekunde",
143
+ "Mikrosekunden",
144
+ "f"
145
+ ],
146
+ "ms": [
147
+ "Millisekunde",
148
+ "Millisekunden",
149
+ "f"
150
+ ],
151
+ "s": [
152
+ "Sekunde",
153
+ "Sekunden",
154
+ "f"
155
+ ],
156
+ "s²": [
157
+ "Sekunde zum Quadrat",
158
+ "Sekunden zum Quadrat",
159
+ "f"
160
+ ],
161
+ "min": [
162
+ "Minute",
163
+ "Minuten",
164
+ "f"
165
+ ],
166
+ "h": [
167
+ "Stunde",
168
+ "Stunden",
169
+ "f"
170
+ ],
171
+ "°C": [
172
+ "Grad Celsius",
173
+ "Grad Celsius",
174
+ "n"
175
+ ],
176
+ "°F": [
177
+ "Grad Fahrenheit",
178
+ "Grad Fahrenheit",
179
+ "n"
180
+ ],
181
+ "°": [
182
+ "Grad",
183
+ "Grad",
184
+ "n"
185
+ ],
186
+ "mph": [
187
+ "Meile pro Stunde",
188
+ "Meilen pro Stunde",
189
+ "f"
190
+ ],
191
+ "V": [
192
+ "Volt",
193
+ "Volt",
194
+ "n"
195
+ ],
196
+ "mV": [
197
+ "Millivolt",
198
+ "Millivolt",
199
+ "n"
200
+ ],
201
+ "kV": [
202
+ "Kilovolt",
203
+ "Kilovolt",
204
+ "n"
205
+ ],
206
+ "mA": [
207
+ "Milliampere",
208
+ "Milliampere",
209
+ "n"
210
+ ],
211
+ "W": [
212
+ "Watt",
213
+ "Watt",
214
+ "n"
215
+ ],
216
+ "kW": [
217
+ "Kilowatt",
218
+ "Kilowatt",
219
+ "n"
220
+ ],
221
+ "MW": [
222
+ "Megawatt",
223
+ "Megawatt",
224
+ "n"
225
+ ],
226
+ "GW": [
227
+ "Gigawatt",
228
+ "Gigawatt",
229
+ "n"
230
+ ],
231
+ "kWh": [
232
+ "Kilowattstunde",
233
+ "Kilowattstunden",
234
+ "f"
235
+ ],
236
+ "Hz": [
237
+ "Hertz",
238
+ "Hertz",
239
+ "n"
240
+ ],
241
+ "kHz": [
242
+ "Kilohertz",
243
+ "Kilohertz",
244
+ "n"
245
+ ],
246
+ "MHz": [
247
+ "Megahertz",
248
+ "Megahertz",
249
+ "n"
250
+ ],
251
+ "GHz": [
252
+ "Gigahertz",
253
+ "Gigahertz",
254
+ "n"
255
+ ],
256
+ "kJ": [
257
+ "Kilojoule",
258
+ "Kilojoule",
259
+ "n"
260
+ ],
261
+ "kcal": [
262
+ "Kilokalorie",
263
+ "Kilokalorien",
264
+ "f"
265
+ ],
266
+ "cal": [
267
+ "Kalorie",
268
+ "Kalorien",
269
+ "f"
270
+ ],
271
+ "Pa": [
272
+ "Pascal",
273
+ "Pascal",
274
+ "n"
275
+ ],
276
+ "kPa": [
277
+ "Kilopascal",
278
+ "Kilopascal",
279
+ "n"
280
+ ],
281
+ "bar": [
282
+ "Bar",
283
+ "Bar",
284
+ "n"
285
+ ],
286
+ "mol": [
287
+ "Mol",
288
+ "Mol",
289
+ "n"
290
+ ],
291
+ "dB": [
292
+ "Dezibel",
293
+ "Dezibel",
294
+ "n"
295
+ ],
296
+ "rpm": [
297
+ "Umdrehung pro Minute",
298
+ "Umdrehungen pro Minute",
299
+ "f"
300
+ ],
301
+ "px": [
302
+ "Pixel",
303
+ "Pixel",
304
+ "m"
305
+ ],
306
+ "kB": [
307
+ "Kilobyte",
308
+ "Kilobyte",
309
+ "n"
310
+ ],
311
+ "KB": [
312
+ "Kilobyte",
313
+ "Kilobyte",
314
+ "n"
315
+ ],
316
+ "MB": [
317
+ "Megabyte",
318
+ "Megabyte",
319
+ "n"
320
+ ],
321
+ "GB": [
322
+ "Gigabyte",
323
+ "Gigabyte",
324
+ "n"
325
+ ],
326
+ "TB": [
327
+ "Terabyte",
328
+ "Terabyte",
329
+ "n"
330
+ ]
331
+ },
332
+ "currencies": {
333
+ "€": {
334
+ "major": [
335
+ "Euro",
336
+ "Euro",
337
+ "m"
338
+ ],
339
+ "minor": [
340
+ "Cent",
341
+ "Cent",
342
+ "m"
343
+ ]
344
+ },
345
+ "$": {
346
+ "major": [
347
+ "Dollar",
348
+ "Dollar",
349
+ "m"
350
+ ],
351
+ "minor": [
352
+ "Cent",
353
+ "Cent",
354
+ "m"
355
+ ]
356
+ },
357
+ "£": {
358
+ "major": [
359
+ "Pfund",
360
+ "Pfund",
361
+ "n"
362
+ ],
363
+ "minor": [
364
+ "Penny",
365
+ "Pence",
366
+ "m"
367
+ ]
368
+ },
369
+ "¥": {
370
+ "major": [
371
+ "Yen",
372
+ "Yen",
373
+ "m"
374
+ ]
375
+ },
376
+ "EUR": {
377
+ "major": [
378
+ "Euro",
379
+ "Euro",
380
+ "m"
381
+ ],
382
+ "minor": [
383
+ "Cent",
384
+ "Cent",
385
+ "m"
386
+ ]
387
+ },
388
+ "USD": {
389
+ "major": [
390
+ "Dollar",
391
+ "Dollar",
392
+ "m"
393
+ ],
394
+ "minor": [
395
+ "Cent",
396
+ "Cent",
397
+ "m"
398
+ ]
399
+ },
400
+ "CHF": {
401
+ "major": [
402
+ "Franken",
403
+ "Franken",
404
+ "m"
405
+ ],
406
+ "minor": [
407
+ "Rappen",
408
+ "Rappen",
409
+ "m"
410
+ ]
411
+ }
412
+ },
413
+ "symbols": {
414
+ "=": "gleich",
415
+ "+": "plus",
416
+ "×": "mal",
417
+ "÷": "geteilt durch",
418
+ "≠": "ist ungleich",
419
+ "≤": "ist kleiner oder gleich",
420
+ "≥": "ist größer oder gleich",
421
+ "≈": "ist ungefähr gleich",
422
+ "<": "ist kleiner als",
423
+ ">": "ist größer als",
424
+ "±": "plus minus",
425
+ "−": "minus",
426
+ "&": "und",
427
+ "%": "Prozent",
428
+ "^2": "zum Quadrat",
429
+ "^3": "hoch drei",
430
+ "^": "hoch",
431
+ "²": "zum Quadrat",
432
+ "³": "hoch drei",
433
+ "#": "Nummer"
434
+ },
435
+ "latex": {
436
+ "commands": {
437
+ "\\times": "mal",
438
+ "\\cdot": "mal",
439
+ "\\div": "geteilt durch",
440
+ "\\pm": "plus minus",
441
+ "\\mp": "minus plus",
442
+ "\\neq": "ist ungleich",
443
+ "\\ne": "ist ungleich",
444
+ "\\leq": "ist kleiner oder gleich",
445
+ "\\le": "ist kleiner oder gleich",
446
+ "\\geq": "ist größer oder gleich",
447
+ "\\ge": "ist größer oder gleich",
448
+ "\\approx": "ist ungefähr gleich",
449
+ "\\sim": "ist ähnlich zu",
450
+ "\\equiv": "ist äquivalent zu",
451
+ "\\cong": "ist kongruent zu",
452
+ "\\propto": "ist proportional zu",
453
+ "\\ll": "ist sehr viel kleiner als",
454
+ "\\gg": "ist sehr viel größer als",
455
+ "\\to": "nach",
456
+ "\\rightarrow": "nach",
457
+ "\\leftarrow": "von",
458
+ "\\mapsto": "wird abgebildet auf",
459
+ "\\Rightarrow": "daraus folgt",
460
+ "\\implies": "daraus folgt",
461
+ "\\Leftarrow": "folgt aus",
462
+ "\\Leftrightarrow": "genau dann, wenn",
463
+ "\\iff": "genau dann, wenn",
464
+ "\\leftrightarrow": "ist äquivalent zu",
465
+ "\\in": "ist Element von",
466
+ "\\notin": "ist nicht Element von",
467
+ "\\subset": "ist Teilmenge von",
468
+ "\\subseteq": "ist Teilmenge oder gleich",
469
+ "\\supset": "ist Obermenge von",
470
+ "\\supseteq": "ist Obermenge oder gleich",
471
+ "\\cup": "vereinigt mit",
472
+ "\\cap": "geschnitten mit",
473
+ "\\setminus": "ohne",
474
+ "\\emptyset": "die leere Menge",
475
+ "\\varnothing": "die leere Menge",
476
+ "\\infty": "unendlich",
477
+ "\\forall": "für alle",
478
+ "\\exists": "es existiert",
479
+ "\\neg": "nicht",
480
+ "\\lnot": "nicht",
481
+ "\\land": "und",
482
+ "\\wedge": "und",
483
+ "\\lor": "oder",
484
+ "\\vee": "oder",
485
+ "\\partial": "partiell",
486
+ "\\nabla": "Nabla",
487
+ "\\ldots": "Punkt Punkt Punkt",
488
+ "\\cdots": "Punkt Punkt Punkt",
489
+ "\\dots": "Punkt Punkt Punkt",
490
+ "\\vdots": "Punkt Punkt Punkt",
491
+ "\\angle": "Winkel",
492
+ "\\triangle": "Dreieck",
493
+ "\\perp": "steht senkrecht auf",
494
+ "\\parallel": "ist parallel zu",
495
+ "\\circ": "verkettet mit",
496
+ "\\ast": "Stern",
497
+ "\\star": "Stern",
498
+ "\\oplus": "o plus",
499
+ "\\otimes": "Tensor",
500
+ "\\hbar": "h quer",
501
+ "\\ell": "ell",
502
+ "\\mid": "für die gilt",
503
+ "\\therefore": "also",
504
+ "\\because": "weil",
505
+ "\\bmod": "modulo",
506
+ "\\mod": "modulo",
507
+ "\\%": "Prozent",
508
+ "\\$": "Dollar",
509
+ "\\&": "und",
510
+ "\\#": "Nummer",
511
+ "\\_": "Unterstrich",
512
+ "\\degree": "Grad",
513
+ "\\prime": "Strich",
514
+ "\\langle": "spitze Klammer auf",
515
+ "\\rangle": "spitze Klammer zu",
516
+ "/": "durch",
517
+ "*": "mal",
518
+ ":": "Doppelpunkt"
519
+ },
520
+ "functions": {
521
+ "sin": "Sinus",
522
+ "cos": "Kosinus",
523
+ "tan": "Tangens",
524
+ "cot": "Kotangens",
525
+ "sec": "Sekans",
526
+ "csc": "Kosekans",
527
+ "arcsin": "Arkussinus",
528
+ "arccos": "Arkuskosinus",
529
+ "arctan": "Arkustangens",
530
+ "sinh": "Sinus hyperbolicus",
531
+ "cosh": "Kosinus hyperbolicus",
532
+ "tanh": "Tangens hyperbolicus",
533
+ "log": "Logarithmus",
534
+ "ln": "natürlicher Logarithmus",
535
+ "lg": "Logarithmus",
536
+ "exp": "Exponentialfunktion",
537
+ "max": "Maximum",
538
+ "min": "Minimum",
539
+ "sup": "Supremum",
540
+ "inf": "Infimum",
541
+ "det": "Determinante",
542
+ "dim": "Dimension",
543
+ "gcd": "g g T",
544
+ "lcm": "k g V",
545
+ "ker": "Kern",
546
+ "deg": "Grad",
547
+ "arg": "Argument",
548
+ "Pr": "Wahrscheinlichkeit",
549
+ "sgn": "Signum"
550
+ },
551
+ "phrases": {
552
+ "frac": "{a} durch {b}",
553
+ "frac_complex": "der Bruch {a} durch {b}, Ende Bruch",
554
+ "sqrt": "Wurzel aus {x}",
555
+ "sqrt_complex": "die Wurzel aus {x}, Ende Wurzel",
556
+ "cube_root": "dritte Wurzel aus {x}",
557
+ "cube_root_complex": "die dritte Wurzel aus {x}, Ende Wurzel",
558
+ "root": "{ord} Wurzel aus {x}",
559
+ "root_complex": "die {ord} Wurzel aus {x}, Ende Wurzel",
560
+ "root_general": "{n}-te Wurzel aus {x}",
561
+ "root_general_complex": "die {n}-te Wurzel aus {x}, Ende Wurzel",
562
+ "pow": "{b} hoch {e}",
563
+ "pow_complex": "{b} hoch {e}, Ende Hochzahl",
564
+ "sq": "{b} zum Quadrat",
565
+ "cube": "{b} hoch drei",
566
+ "pow_int": "{b} hoch {card}",
567
+ "sub": "{b} Index {i}",
568
+ "op_sum": "die Summe",
569
+ "op_prod": "das Produkt",
570
+ "op_int": "das Integral",
571
+ "op_iint": "das Doppelintegral",
572
+ "op_iiint": "das Dreifachintegral",
573
+ "op_oint": "das Kurvenintegral",
574
+ "op_lim": "der Limes",
575
+ "op_bigcup": "die Vereinigung",
576
+ "op_bigcap": "der Durchschnitt",
577
+ "bigop": "{op} über",
578
+ "bigop_lo": "{op} über {lo}, über",
579
+ "bigop_lohi": "{op} von {lo} bis {hi} über",
580
+ "bigop_lim_lo": "{op} für {lo} von",
581
+ "approaches": "gegen",
582
+ "log_base": "Logarithmus zur Basis {b}",
583
+ "fn_lo": "{fn} über {lo}",
584
+ "of": "{f} von {x}",
585
+ "binom": "{n} über {k}",
586
+ "abs": "Betrag von {x}",
587
+ "abs_complex": "der Betrag von {x}, Ende Betrag",
588
+ "norm": "Norm von {x}",
589
+ "norm_complex": "die Norm von {x}, Ende Norm",
590
+ "factorial": "{x} Fakultät",
591
+ "prime": "Strich",
592
+ "double_prime": "zwei Striche",
593
+ "triple_prime": "drei Striche",
594
+ "vec": "Vektor {x}",
595
+ "hat": "{x} Dach",
596
+ "bar": "{x} quer",
597
+ "dot": "{x} Punkt",
598
+ "ddot": "{x} zwei Punkte",
599
+ "tilde": "{x} Tilde",
600
+ "floor": "untere Gaußklammer von {x}",
601
+ "ceil": "obere Gaußklammer von {x}",
602
+ "pmod": "modulo {x}",
603
+ "angle": "spitze Klammer {x}",
604
+ "set": "die Menge {x}",
605
+ "matrix": "die Matrix, {rows}, Ende Matrix",
606
+ "row": "Zeile {i}: {cells}",
607
+ "cases": "Fallunterscheidung: {rows}, Ende Fallunterscheidung",
608
+ "degrees": "Grad",
609
+ "open_paren": "Klammer auf",
610
+ "close_paren": "Klammer zu",
611
+ "open_bracket": "eckige Klammer auf",
612
+ "close_bracket": "eckige Klammer zu",
613
+ "open_angle": "spitze Klammer auf",
614
+ "close_angle": "spitze Klammer zu",
615
+ "bb_R": "den reellen Zahlen",
616
+ "bb_N": "den natürlichen Zahlen",
617
+ "bb_Z": "den ganzen Zahlen",
618
+ "bb_Q": "den rationalen Zahlen",
619
+ "bb_C": "den komplexen Zahlen"
620
+ }
621
+ }
622
+ }