Skip to main content

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 :

  1. Preparation des corpus : l'alignement grapheme-phoneme a permis de constituer les donnees d'entrainement des modeles G2P et P2G
  2. Lecture assistee : les groupes de lecture avec syllabes colorees sont la base de l'interface de lecture
  3. 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 admin@lectura.world.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lectura_aligneur-4.0.2.tar.gz (42.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lectura_aligneur-4.0.2-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file lectura_aligneur-4.0.2.tar.gz.

File metadata

  • Download URL: lectura_aligneur-4.0.2.tar.gz
  • Upload date:
  • Size: 42.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for lectura_aligneur-4.0.2.tar.gz
Algorithm Hash digest
SHA256 deb4cf0359ab0a13b439771da06afd78cd9d6723d2d66b2e424b125465e4e5d8
MD5 c579c47db51f81cb566c6f60554b9666
BLAKE2b-256 9ec5413c553a65f611460af4aa252218425c88f19537364cb9dbe93b34e9ffc0

See more details on using hashes here.

File details

Details for the file lectura_aligneur-4.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for lectura_aligneur-4.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bbfcdb2ef86ebf46b8f88be04c5c4955a6d6786b30f3ef6e0de910b97a65663a
MD5 aeaef507b72110731188210c1819fa24
BLAKE2b-256 41e020502e5796bc1d30c2d720e00715e01e918c8e9d9705c6c6d688c39d3df1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page