Skip to content

fr Numbers Dates Continuation

rcspam edited this page Apr 25, 2026 · 4 revisions

🌐 Langue : English | Français

Nombres, Dates & Continuation

Cette page couvre trois fonctionnalités de post-traitement qui partagent un thème commun : l'interprétation contextuelle de la sortie ASR qui produirait sinon du texte épelé ou maladroit.

  • Nombres : cardinaux parlés, ordinaux, chaînes de version et virgules décimales deviennent de vrais chiffres ("one point three""1.3", "vingt-trois""23", "un virgule cinq""1,5").
  • Dates & heures : les heures parlées en français obtiennent un formatage intelligent ("quatorze heures trente""14 h 30").
  • Tampon de continuation : le ou les derniers mots de la dictée précédente sont mémorisés entre sessions, pour continuer une phrase naturellement après une pause.

Table des matières


Conversion nombres

Implémentée dans dictee-postprocess (Python) en utilisant la bibliothèque text2num. Aware de la langue : français utilise virgule décimale ,, anglais utilise point décimal ..

Nombres cardinaux

Entiers simples, parlés comme mots, convertis en chiffres :

Langues supportées : fr, en, de, es, it, pt (via text_to_num). uk n'est pas supporté par text_to_num — la conversion des nombres est ignorée pour les dictées en ukrainien.

Parlé (entrée) Converti (sortie)
"vingt-trois" (fr) "23"
"cent quatre-vingt-douze" (fr) "192"
"deux mille vingt-six" (fr) "2026"
"twenty-three" (en) "23"
"one hundred ninety-two" (en) "192"
"two thousand twenty-six" (en) "2026"
"dreiundzwanzig" (de) "23"
"hundertzweiundneunzig" (de) "192"
"veintitrés" (es) "23"
"ciento noventa y dos" (es) "192"
"ventitré" (it) "23"
"centonovantadue" (it) "192"
"vinte e três" (pt) "23"
"cento e noventa e dois" (pt) "192"

Cas limites gérés :

  • Les "un" / "one" / "zéro" / "zero" isolés ne sont pas convertis par défaut (limitation text2num) — préservés comme mots sauf si une règle force la conversion.
  • Tirets : "vingt trois" (sans trait d'union) → normalisé en "vingt-trois" → ensuite converti en "23".

Nombres ordinaux

Les ordinaux (premier, deuxième, troisième…) sont convertis quand suivis d'un marqueur contextuel :

Parlé Converti
"chapitre premier" (fr) "chapitre 1er"
"troisième édition" (fr) "3e édition"
"twenty-first century" (en) "21st century"

La conversion ordinale est plus conservatrice que la cardinale — un "premier" isolé ne sera pas converti (pourrait être un nom, Premier Ministre, etc.).

Chaînes de version

Cas spécial : "version un point trois point zéro""version 1.3.0".

Pattern détecté : "N point N (point N)*" où chaque N est un mot cardinal. Déclenché par le mot principal "version" ou par des règles regex environnantes.

Parlé : "La mise à jour est en version un point trois point zéro"
Sortie : "La mise à jour est en version 1.3.0"

Ajouté en v1.3. Les versions précédentes nécessitaient des règles regex manuelles.

Virgules / points décimaux

Spécifique à la langue. Le séparateur décimal suit la convention locale : virgule (,) pour fr/de/es/it/pt, point (.) pour en. uk n'est pas supporté (pas de backend text_to_num).

Parlé (fr — virgule) Sortie
"un virgule cinq" "1,5"
"zéro virgule sept" "0,7"
"trois virgule quatorze" "3,14"
Parlé (en — point) Sortie
"one point five" "1.5"
"zero point seven" "0.7"
"three point one four" "3.14"
Parlé (de — Komma) Sortie
"eins komma fünf" "1,5"
"null komma sieben" "0,7"
"drei komma eins vier" "3,14"

⚠ Limite côté allemand : un mot composé après komma ("drei komma vierzehn" pour 3,14) n'est pas converti — text_to_num laisse "3 komma 14". Utiliser la forme épelée chiffre par chiffre ("drei komma eins vier") pour des décimales fiables.

Parlé (es — coma) Sortie
"uno coma cinco" "1,5"
"cero coma siete" "0,7"
"tres coma catorce" "3,14"
Parlé (it — virgola) Sortie
"uno virgola cinque" "1,5"
"zero virgola sette" "0,7"
"tre virgola quattordici" "3,14"
Parlé (pt — vírgula) Sortie
"um vírgula cinco" "1,5"
"zero vírgula sete" "0,7"
"três vírgula catorze" "3,14"

Ajouté en v1.3 pour le français. Les autres langues réutilisent le même pipeline (text_to_num + la regex de post-traitement _DECIMAL_COMMA_RE qui compacte "1, 5""1,5").


Dates & heures

Formatage heures françaises

Les expressions horaires françaises sont converties au format canonique HH h MM :

Parlé Sortie
"quatorze heures trente" "14 h 30"
"huit heures quarante-cinq" "8 h 45"
"midi et demi" "12 h 30"
"minuit et quart" "0 h 15"
"trois heures pile" "3 h 00"

Cas limites :

  • "demi"30
  • "quart"15
  • "trois quarts"45
  • "pile" / "tapantes" (à l'heure pile) → 00

Ajouté en v1.3. Le formatage horaire anglais est planifié mais pas encore implémenté.

Signes égal entourés

Une fonctionnalité de niche mais demandée : "trois égale trois""3 = 3" en français (et équivalents dans d'autres langues). Le signe = est inséré uniquement quand entouré de chiffres pour éviter les faux positifs dans du texte régulier.

Parlé : "deux égale deux"
Sortie : "2 = 2"

Parlé : "c'est égal à combien"
Sortie : "c'est égal à combien"  (non converti — "égal" seul, pas de chiffres autour)

Ajouté en v1.3.


Tampon de continuation

La fonctionnalité de continuation vous laisse faire une pause en milieu de phrase et reprendre naturellement. Quand vous dites le mot déclencheur de continuation au début d'une nouvelle dictée, dictée fusionne avec le ou les derniers mots de la dictée précédente.

Mot déclencheur par langue

Langue Mot déclencheur
Français minuscule
Anglais continue
Allemand klein
Espagnol minúscula
Italien minuscola
Portugais minúscula
Ukrainien рядкова

Configuré dans /usr/share/dictee/continuation.conf.default (personnalisable via ~/.config/dictee/continuation.conf).

Important : le mot déclencheur apparaît au début de la nouvelle dictée, pas à la fin de la précédente. C'est une source de confusion commune :

Dictée 1 : "J'ai commencé le projet"
           (utilisateur s'arrête, réfléchit, redémarre l'enregistrement)
Dictée 2 : "minuscule hier après-midi"
           (dictée voit le mot déclencheur, continue)
           
Sortie finale : "J'ai commencé le projet hier après-midi"

Mémoire du dernier mot

Le pipeline sauvegarde les 1–3 derniers mots + l'état casse-minuscule + le dernier espace blanc dans /dev/shm/.dictee_continuation (tmpfs, effacé au redémarrage). Cela permet :

  • Préservation de la casse à la frontière de continuation (si la précédente se terminait par ".", la suivante commence en majuscule ; sinon minuscule)
  • Préservation des espaces (espace vs pas d'espace, retour ligne)
  • Détection de la récence vs obsolète (effacé après 60 s d'inactivité)

Réinitialiser le contexte de continuation

Le tampon de continuation peut être effacé pour démarrer une nouvelle phrase clean (sans espace en tête, sans >>, première lettre capitalisée).

Trois mécanismes :

Mécanisme Quand Action
Auto-reset au démarrage 1ère dictée après reboot Le tampon rémanent (/dev/shm/.dictee_last_word-UID) est wipé silencieusement via un marker session (lui-même dans /dev/shm, donc effacé au reboot)
Commande vocale à la ligne Tu veux taper un saut de ligne ET reset le contexte Tape \n + wipe
Commande vocale nouvelle phrase Tu as déjà bougé le curseur (Entrée clavier, clic dans le doc) ET tu veux éviter l'espace en tête Wipe seul, rien typé

Voir aussi : Commandes vocales — référence complète de toutes les commandes vocales pour les 7 langues.

Commande vocale par langue (nouvelle phrase)

Langue Commande
Français nouvelle phrase / nouvelles phrases
Anglais new sentence / new sentences
Allemand neuer Satz / neue Sätze
Espagnol nueva frase / nuevas frases
Italien nuova frase / nuove frasi
Portugais nova frase / novas frases
Ukrainien нове речення / нові речення

Configuré dans rules.conf.default (section « 3a-bis »). La commande est ancrée au début de la dictée — dire « Une nouvelle phrase apparaît dans ce texte » ne la déclenche pas.

Exemple

Dictée 1 : « Bonjour. »
(tu appuies sur Entrée au clavier physique)
Dictée 2 : « nouvelle phrase, comment ça va »

→ Tapé : « Comment ça va » (capitalisé, pas d'espace en tête)

Forme standalone vs inline

  • Standalone : dire « nouvelle phrase » seule → wipe seul, rien typé. Utile avant de relancer une nouvelle dictée propre.
  • Inline : dire « nouvelle phrase, le reste de ma phrase » → wipe + typage du reste avec capitalisation automatique de la première lettre.

Différence avec à la ligne

à la ligne nouvelle phrase
Tape un saut de ligne (\n)
Wipe du contexte de continuation
Cas d'usage Tu veux changer de ligne par voix Le curseur est déjà sur une nouvelle ligne (Entrée clavier ou clic)

Contexte audio (timestamps)

Pour une continuation encore plus fluide, dictée peut passer du contexte au niveau audio à Parakeet-TDT : les 1–2 dernières secondes de l'enregistrement précédent sont concaténées au début du nouveau, et le trimming basé sur timestamps supprime le chevauchement après transcription.

Cela élimine les artefacts de frontière ASR (syllabes perdues, pauses fantômes). Implémenté via :

  1. Pré-concaténation : sox joint les 2 dernières secondes de la précédente + l'enregistrement nouveau complet
  2. Double transcription : Canary transcrit à la fois le nouveau seul + le combiné → extrait seulement le nouveau contenu via les timestamps des tokens
  3. Fallback : si l'une des transcriptions échoue, retomber sur la continuation purement textuelle

Le contexte audio est activé par défaut pour Parakeet et Canary, désactivé pour Whisper large-v3/turbo/distil (timestamps DTW dégradés).

Continuation + traduction

La continuation fonctionne avec la traduction, avec un bémol : c'est la sortie traduite de la dictée précédente qui est continuée, pas la source brute.

Dictée 1 (FR → EN traduit) :
  Parlé :      "La réunion commence à deux heures"
  Traduit :    "The meeting starts at two"

Dictée 2 (FR → EN traduit, avec continuation) :
  Parlé :      "minuscule p.m."
  Traduit :    "p.m."
  Continuation : fusionne avec "The meeting starts at two" (EN)
  Collage final : "The meeting starts at two p.m."

La préservation des espaces à la frontière est garantie (corrigée en v1.3-beta5 — était buguée en beta1–4).


Limitations

Conversion nombres

  • Les "un" / "one" / "zéro" / "zero" isolés ne sont pas convertis (casserait la prose normale)
  • Les très grands nombres (milliards) sont convertis mais peuvent être lents sur CPU
  • La notation scientifique ("trois virgule quatorze fois dix puissance deux") n'est pas gérée — utilisez les règles regex

Heures françaises

  • "quatorze heures" (sans minutes) → "14 h 00" ou "14 h" ? Le second est choisi (pas de 00 trailing).
  • 24h vs 12h : "huit heures" défaut à "8 h" (ambigu). Pour 20h utilisez "vingt heures" explicitement.

Continuation

  • Délai maximum : 60 s entre dictées (au-delà, le tampon est effacé)
  • Seul le dernier mot est mémorisé fiablement — la continuation multi-mots existe mais a des cas limites avec la ponctuation
  • Pas de continuation entre utilisateurs différents (suffixe UID isole les tampons)

Étapes suivantes

📖 dictee Wiki

🇬🇧 Home · 🇫🇷 Accueil


Getting started / Premiers pas

Speech recognition / ASR

Translation / Traduction

Post-processing / Post-traitement

CLI

Reference / Référence


🏠 Repo · 📦 Releases · 🐛 Issues

Clone this wiki locally