fongbe_g2p
Conversion graphème → phonème pour le fongbe à base de règles. Sortie en IPA avec marques de ton, prête pour un front-end TTS ou une lexique de prononciation.
Bibliothèque standard Python uniquement — aucune dépendance.
from fongbe_g2p import g2p, apply_sandhi
g2p("gbɛtɔ́") # 'ɡ͡b ɛ˧ t ɔ˥' (personne)
g2p("kpɔ́n") # 'k͡p ɔ̃˥' (regarder — nasalisation)
g2p("vodúngbe") # 'v o˧ d ũ˥ ɡ͡b e˧' (dimanche)
g2p("Mawu", sep="") # 'm a˧w u˧'
g2p("gbɛtɔ́", with_tone=False) # 'ɡ͡b ɛ t ɔ'
Ce que fait le module
| Digraphes | gb → ɡ͡b, kp → k͡p, ny → ɲ (segmentation par plus longue correspondance) |
| Voyelles orales | a e ɛ i o ɔ u |
| Nasalisation contextuelle | Vn → Ṽ quand n clôt la syllabe ; n devant voyelle reste une consonne, et ny n'est jamais nasalisant |
| 4 tons | haut ˥ (aigu), moyen ˧ (non marqué), bas ˩ (grave), modulé ˩˥ (caron) |
| Homoglyphes | ε→ɛ, Đ/đ/ð→ɖ, ọ→ɔ, ẹ→ɛ, ɩ→i… normalisés en entrée |
r → l |
conformément à la note du document source |
Les tons sont lus via une décomposition NFD : la voyelle et sa marque de ton sont traitées séparément, donc rien n'est perdu quel que soit l'encodage de l'entrée.
Sandhi tonal
sandhi_fongbe.py implémente la règle contextuelle la plus déterministe :
Dans une succession de tons bas, seul le dernier reste bas ; les autres remontent au ton moyen. →
B B BdevientM M B
apply_sandhi("è kò nù") # 'e ko nù'
Les résolutions du ton modulé (V→H ou V→B) dépendent du contexte grammatical
(impératif, pronom, négation, composition) et ne sont pas déductibles de la seule
orthographe : elles sont laissées inchangées, volontairement.
Cette partie est bien moins mûre que le G2P — voir Limites connues pour son apport réellement mesuré.
Pour valider la règle sur un corpus de paires citation → réalisé :
python -m fongbe_g2p.validate_sandhi mes_paires.tsv
# format : 'citation<TAB>réalisé' ou 'réalisé ---> citation'
Le document source n'est pas redistribué ici (voir NOTICE.md), il faut donc fournir
son propre fichier.
Installation
pip install fongbe-g2p
Ou depuis les sources :
git clone https://github.com/Arnel7/fongbe-g2p.git
cd fongbe-g2p
pip install -e .
Tests
pip install -e ".[dev]"
pytest
33 tests, sans fichier de données : digraphes, nasalisation, les 4 tons, homoglyphes, robustesse (chaîne vide, caractère inconnu, marque combinante orpheline), couverture de l'inventaire, sandhi, non-régression.
pytest et ruff ne servent qu'au développement — le paquet lui-même n'a aucune
dépendance d'exécution.
Couverture mesurée
Sur des corpus fongbe réels (transcriptions de parole, jeux de Q&A, corpus parallèle), après normalisation NFD :
| corpus | caractères | non gérés |
|---|---|---|
| corpus assemblé | 2 423 023 | 0 |
| transcriptions de parole | 105 354 | 0 |
| Q&A | 821 345 | 14 |
| corpus parallèle | 2 095 512 | 15 610 |
Les seuls caractères non traités sont étrangers au fongbe (q, œ, écritures non
latines) : ils proviennent de passages en français ou de bruit de corpus, et sont laissés
tels quels en sortie.
Limites connues
⚠️ ˧ veut dire « moyen » ou « aucune information »
Le fongbe note le ton moyen par l'absence de marque. Ce module ne peut donc pas
distinguer une voyelle réellement au ton moyen d'une voyelle dont le ton n'a simplement
pas été écrit — les deux sortent en ˧.
C'est décisif en pratique, parce que beaucoup de texte fongbe est sous-toné. Part des
voyelles émises en ˧ faute de marque, mesurée sur les mêmes corpus :
| corpus | voyelles en ˧ par défaut |
|---|---|
| transcriptions de parole | 88,5 % |
| corpus parallèle | 78,4 % |
| Q&A | 55,7 % |
Conséquence : si vous entraînez un TTS directement sur cette sortie, le modèle apprend du bruit tonal sur la majorité des voyelles. Faites passer votre texte par une étape de restauration de tons avant le G2P, ou n'utilisez que du texte intégralement toné.
Sandhi : un brouillon, pas une implémentation complète
Une seule règle est implémentée, et son apport mesuré est modeste : 60,5 % → 62,0 % de tons corrects sur 71 paires citation → réalisé, soit +1,5 point. Les résolutions du ton modulé, qui dépendent du contexte grammatical, ne sont pas traitées du tout. À considérer comme une base de travail, pas au même niveau de fiabilité que le G2P.
Autres
- Les règles viennent d'une description orthographique, pas de mesures acoustiques ; elles n'ont pas été validées par un locuteur natif. Les retours sont bienvenus.
- L'orthographe fongbe connaît plusieurs traditions : certaines sources notent le ton bas par un accent grave, d'autres le laissent non marqué (fusionné avec le moyen). Ce module suit la première. Un texte de la seconde tradition sera lu avec des tons moyens là où un ton bas est attendu.
Licence et sources
Code sous licence MIT (LICENSE). Voir NOTICE.md pour l'attribution des sources
linguistiques.
Release files for fongbe-g2p 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fongbe_g2p-0.1.0.tar.gz | 10.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fongbe_g2p-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.5 kB
Release files / fongbe_g2p-0.1.0.tar.gz
| Download URL | fongbe_g2p-0.1.0.tar.gz |
|---|---|
| Size | 10.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1eed3002b9cd9629e9bfee54b7201f3ebf6e15d51e94bfbadb47f4f0e6c4e13d
|
|
BLAKE2b-256 checksum How to use checksums |
3aa5c43994a45a1d5f8f482a6992661023f217b97f0a21202dc69fabdb37411a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.11
|
Release files / fongbe_g2p-0.1.0-py3-none-any.whl
| Download URL | fongbe_g2p-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
33d1c18210ac61117cba2b6d5213017fa658ec1060af29ea964f5ad4189d066e
|
|
BLAKE2b-256 checksum How to use checksums |
807285e6989771819e19cde565f5e27edb648ef9a04519b2660f05ebe7fde562
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.11
|