Aligneur graphème-phonème et syllabeur phonologique du français — alignement, syllabation, attaque/noyau/coda
Project description
Lectura Aligneur-Syllabeur
Aligneur grapheme-phoneme et syllabeur phonologique du francais
Module autonome, zero dependance Python. Pivot central du pipeline Lectura, il realise l'alignement lettre-par-lettre entre orthographe et phonetique, et decompose chaque syllabe en attaque/noyau/coda avec correspondance grapheme-phoneme.
Note v4.0.0 : la construction des groupes de lecture (elisions, liaisons, enchainements) a ete transferee dans le module lectura-phonemiseur. L'Aligneur accepte les groupes pre-construits et se concentre sur l'alignement et la syllabation.
C'est grace a cet alignement que les corpus d'entrainement des modeles G2P et P2G ont ete prepares.
Installation
pip install lectura-aligneur
Fonctionnalites
| Fonction | Description |
|---|---|
| Alignement grapheme-phoneme | Correspondance lettre-par-lettre entre orthographe et IPA via algorithme DFS |
| Lettres muettes | Detection et marquage des lettres silencieuses (e, s, t, d, h, x...) |
| Lettres fusionnees | Identification des graphemes multi-phonemes (x = ks/gz, y...) |
| Groupes de lecture | Accepte les groupes pre-construits par le phonemiseur (elision, liaison, enchainement) |
| Syllabation phonologique | Decoupage en syllabes par modele de sonorite (IPA + orthographe) |
| Decomposition attaque/noyau/coda | Chaque syllabe decomposee en ses constituants avec phonemes distribues |
| Spans | Positions caractere de chaque syllabe, groupe et composant dans le texte source |
| Phonemiseur pluggable | eSpeak-NG (defaut), Lectura G2P, ou tout objet avec .phonemize() / .predict() |
| Formules | Gestion des lectures de formules (nombres, dates, etc.) avec events alignes |
Exemples
Analyse d'un mot (API simple)
from lectura_aligneur import LecturaSyllabeur
syllabeur = LecturaSyllabeur() # eSpeak-NG par defaut
result = syllabeur.analyze("chocolat")
print(result.format_detail())
# chocolat -> /ʃɔkɔla/
# σ1: /ʃɔ/ <<cho>> [0:3] att=ʃ noy=ɔ cod=-
# σ2: /kɔ/ <<co>> [3:5] att=k noy=ɔ cod=-
# σ3: /la/ <<lat>> [5:8] att=l noy=a cod=-
# Chaque syllabe expose son alignement :
for s in result.syllabes:
att = " ".join(f"{p.ipa}→{p.grapheme}" for p in s.attaque.phonemes)
noy = " ".join(f"{p.ipa}→{p.grapheme}" for p in s.noyau.phonemes)
cod = " ".join(f"{p.ipa}→{p.grapheme}" for p in s.coda.phonemes)
print(f" {s.ortho:6s} /{s.phone}/ att=[{att}] noy=[{noy}] cod=[{cod}] span={s.span}")
# cho /ʃɔ/ att=[ʃ→ch] noy=[ɔ→o] cod=[] span=(0, 3)
# co /kɔ/ att=[k→c] noy=[ɔ→o] cod=[] span=(3, 5)
# lat /la/ att=[l→l] noy=[a→a] cod=[] span=(5, 8)
Analyse complete avec groupes de lecture
L'API analyser_complet() prend une liste de MotAnalyse (produite par le G2P) et construit les groupes de lecture en appliquant liaisons, enchainements et elisions, puis syllabe chaque groupe :
from lectura_aligneur import LecturaSyllabeur, MotAnalyse
syllabeur = LecturaSyllabeur()
# Mots annotes par le G2P (phone + liaison)
mots = [
MotAnalyse(phone="lez", liaison="Lz"), # les (liaison en z)
MotAnalyse(phone="ɑ̃fɑ̃", liaison="none"), # enfants
MotAnalyse(phone="ʒu", liaison="none"), # jouent
]
result = syllabeur.analyser_complet(mots)
print(f"{result.nb_groupes} groupes, {result.nb_syllabes} syllabes")
print(f"Groupes : {result.format_ligne1()}")
print(f"Syllabes : {result.format_ligne2()}")
# 2 groupes, 4 syllabes
# Groupes : les enfants | jouent
# Syllabes : le.zɑ̃.fɑ̃ | ʒu
# Detail des groupes :
for rg in result.groupes:
g = rg.groupe
jonc = ", ".join(g.jonctions) if g.jonctions else "-"
print(f" Groupe: /{g.phone_groupe}/ jonctions: {jonc}")
for s in rg.syllabes:
print(f" σ /{s.phone}/ <<{s.ortho}>> att={s.attaque.phone or '-'} noy={s.noyau.phone} cod={s.coda.phone or '-'}")
API IPA directe (sans phonemiseur)
syllabeur = LecturaSyllabeur()
syllabes = syllabeur.syllabify_ipa("ʃɔkɔla")
print(syllabes) # ['ʃɔ', 'kɔ', 'la']
Avec Lectura G2P comme phonemiseur
from lectura_aligneur import LecturaSyllabeur
from lectura_phonemiseur.inference_onnx import OnnxInferenceEngine
from lectura_phonemiseur import get_model_path
g2p = OnnxInferenceEngine(get_model_path("unifie_int8.onnx"),
get_model_path("unifie_vocab.json"))
# Tout objet avec .predict(word) est accepte
class G2PPhonemizer:
def predict(self, word):
return g2p.analyser([word])['g2p'][0]
syllabeur = LecturaSyllabeur(phonemizer=G2PPhonemizer())
result = syllabeur.analyze("maison")
Structures de donnees
| Classe | Role |
|---|---|
ResultatAnalyse |
Analyse d'un mot : mot, phone, syllabes[] |
Syllabe |
Syllabe : phone, ortho, span, attaque, noyau, coda |
GroupePhonologique |
Attaque/noyau/coda : liste de Phoneme avec ipa + grapheme |
Phoneme |
Phoneme individuel : ipa (ex: "ʃ") + grapheme (ex: "ch") |
MotAnalyse |
Mot annote : token, phone, liaison, pos |
GroupeLecture |
Groupe de lecture : mots[], phone_groupe, jonctions[], span |
ResultatGroupe |
Groupe syllabe : groupe + syllabes[] |
ResultatSyllabation |
Resultat complet : groupes[], nb_syllabes, nb_groupes |
OptionsGroupes |
Options : gerer_elisions, gerer_liaisons, gerer_enchainement |
Role dans le pipeline Lectura
L'Aligneur-Syllabeur est le pivot central de Lectura :
- Preparation des corpus : l'alignement grapheme-phoneme a permis de constituer les donnees d'entrainement des modeles G2P et P2G
- Lecture assistee : les groupes de lecture avec syllabes colorees sont la base de l'interface de lecture
- Synthese vocale : l'alignement et les spans permettent la synchronisation texte-audio
Caracteristiques techniques
- Zero dependance Python
- Alignement DFS grapheme-phoneme avec gestion des lettres muettes et fusionnees
- Modele de sonorite pour la syllabation (5 classes : obstruantes, nasales, liquides, semi-voyelles, voyelles)
- Architecture E1/E2 : groupes de lecture (E1, depuis lectura-phonemiseur) puis syllabation (E2), utilisables separement
- Phonemiseur pluggable : eSpeak-NG, Lectura G2P, ou tout objet compatible
- Python 3.10+ avec type hints complets (PEP-561)
- Licence : AGPL-3.0 (non commerciale) — licence commerciale sur demande
Licence
Ce module est distribue sous licence AGPL-3.0 (non commerciale) — voir LICENCE.txt.
Pour un usage commercial, contacter contact@lec-tu-ra.com.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lectura_aligneur-4.0.0.tar.gz.
File metadata
- Download URL: lectura_aligneur-4.0.0.tar.gz
- Upload date:
- Size: 40.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5e4f140302da4785f8c752d064639de7cafd25dc93620ebc60028c86b5589b6
|
|
| MD5 |
de9851d24b5b1e2aa1a56730e6ebbbc6
|
|
| BLAKE2b-256 |
05641b2c68fffbf0db6e9f6f8763facf276d21b834992f4a44ae8024c2300d64
|
File details
Details for the file lectura_aligneur-4.0.0-py3-none-any.whl.
File metadata
- Download URL: lectura_aligneur-4.0.0-py3-none-any.whl
- Upload date:
- Size: 38.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ad32949659832bf3e342ca2a86c32853e20fd82a7e648d6edfcf30c3f00f2b7
|
|
| MD5 |
224516d119ba6a3b33cfd82bc1f3a54b
|
|
| BLAKE2b-256 |
b05627a9ed8aa14c2c6349f614dd80c8a0b455f2ee9c026c1b1dfa3624d980e9
|