# 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**.
```python
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="") # 'ma˧wu˧' (sans séparateur)
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 B` devient `M M B`
```python
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 …