Markuspierre commited on
Commit
81175a3
·
verified ·
1 Parent(s): 643ae13

Update asr-tts_service.py

Browse files
Files changed (1) hide show
  1. asr-tts_service.py +29 -8
asr-tts_service.py CHANGED
@@ -73,18 +73,39 @@ def number_to_french(n: int) -> str:
73
  base = "quatre-vingt"
74
  if n == 80: return base
75
  return base + "-" + number_to_french(n - 80)
76
- hundreds, rest = divmod(n, 100)
77
- base = "cent" if hundreds == 1 else UNITS[hundreds] + " cent"
78
- return base if rest == 0 else base + " " + number_to_french(rest)
 
 
 
 
 
 
 
 
 
 
 
 
79
 
80
  def convert_digits_in_text(text: str) -> str:
 
 
81
  def repl(match):
82
  s = match.group(0)
83
- if set(s) == {"0"}: return " ".join(["zéro"] * len(s))
84
- zeros = len(s) - len(s.lstrip("0"))
85
- rest = s.lstrip("0")
86
- out = " ".join(["zéro"] * zeros)
87
- return f"{out} {number_to_french(int(rest))}".strip()
 
 
 
 
 
 
 
88
  return re.sub(r"\d+", repl, text)
89
 
90
  def split_by_sentences(text: str, max_chars: int = 150) -> list:
 
73
  base = "quatre-vingt"
74
  if n == 80: return base
75
  return base + "-" + number_to_french(n - 80)
76
+
77
+ # GESTION DES CENTAINES
78
+ if n < 1000:
79
+ hundreds, rest = divmod(n, 100)
80
+ base = "cent" if hundreds == 1 else UNITS.get(hundreds, str(hundreds)) + " cent"
81
+ return base if rest == 0 else base + " " + number_to_french(rest)
82
+
83
+ # GESTION DES MILLIERS ET PLUS (Sécurité pour éviter le KeyError)
84
+ if n < 1000000:
85
+ thousands, rest = divmod(n, 1000)
86
+ base = "mille" if thousands == 1 else number_to_french(thousands) + " mille"
87
+ return base if rest == 0 else base + " " + number_to_french(rest)
88
+
89
+ # Par sécurité, si le nombre est trop grand (millions), on le renvoie tel quel
90
+ return str(n)
91
 
92
  def convert_digits_in_text(text: str) -> str:
93
+ if not isinstance(text, str): return ""
94
+
95
  def repl(match):
96
  s = match.group(0)
97
+ # SI C'EST UN LONG NOMBRE (Téléphone ou Réf > 4 chiffres)
98
+ # On épèle : "7 7 1 2 3..." au lieu de "Sept milliards..."
99
+ if len(s) > 4:
100
+ return " ".join([UNITS.get(int(digit), digit) for digit in s])
101
+
102
+ # SINON (Petit nombre comme 15, 100, 2024)
103
+ try:
104
+ val = int(s)
105
+ return number_to_french(val)
106
+ except:
107
+ return s
108
+
109
  return re.sub(r"\d+", repl, text)
110
 
111
  def split_by_sentences(text: str, max_chars: int = 150) -> list: