Syllabation avec Regex
Crée : 2022/05 ; dernière mise à jour : 2023/12/31
Dans ce tutoriel, on va employer les expressions régulières (Regex) pour syllaber des mots dans une langue. Même si on utilise des exemples de l’anglais, vous pouvez facilement adapter le code pour n’importe quelle langue. De plus, nos mots seront dans leurs formes orthographiques pour rester simple. Naturellement, on devrait travailler avec des transcriptions phonétiques (le code fonctionnera de la même façon).
Je suppose que vous travaillez déjà avec R, et que vous êtes familiarisé avec les expressions régulières (sinon, voyez ici et voyez le cheat sheet de RStudio ici). On va syllaber les trois mots du vecteur ci-dessous. Évidemment, cela n’est qu’un exemple tout petit pour vous démontrer comment syllaber des mots en R.
Première étape : des syllabes CV
La façon la plus facile de commencer notre tâche est de supposer un modèle syllabique CV. Bien que ce soit une supposition simpliste pour l’anglais, des syllabes CV ont un sens phonologique (et elles sont plus faciles à coder !)1 Voici comment on peut penser à notre problème avec les expressions régulières : on veut remplacer une voyelle V
avec V-
. Pour ce faire, on a besoin de groupes de capture (capturing groups). On verra bientôt comment les utiliser, et pourquoi ce concept est essentiel pour la syllabation.
Pour remplacer une chaîne donnée (p. ex., V
) avec une autre chaîne (p. ex., V-
), on va employer la fonction str_replace_all()
, de l’extension stringr
(incluse dans tidyverse
). En bref, on voudrait créer une «variable» qui répète l’entrée dans le résultat. C’est évident que cela n’est pas comme un remplacement simple. Dans le code ci-dessous, la variable CV
sera utilisée pour les résultats syllabés.
Code
library(tidyverse)
CV = str_replace_all(string = words,
pattern = "([aeiou])",
replacement = "\\1-")
CV
#> [1] "i-nte-rna-ti-o-na-l" "cla-nde-sti-ne-" "cre-stfa-lle-n"
Le motif dans notre code, ([aeiou])
, est un groupe de capture (entre parenthèses). Dans ce groupe, on a [aeiou]
. Les crochets signifient «ou» : on cherche «l’un de ces caractères», c.-à-d., «a» ou «e» ou «i» ou «o» ou «u». Autrement dit, on cherche une voyelle (orthographique). On va remplacer cette voyelle avec elle-même (+ un trait d’union), donc \\1-
. Le numéro 1 veut dire «le premier groupe de capture» (il y a seulement un groupe ici).
Deuxième étape : régler la phonotaxe
Maintenant, on a les syllabes dans notre variable CV
. La prochaine étape s’agit de les ajuster selon les règles de phonotaxe de l’anglais. On commence avec les fins des mots, vu que les bords des chaînes sont plus faciles à travailler. D’abord, il faut supprimer les traits d’union à la fin de cla-nde-sti-ne-
, par exemple. Après, il faut supprimer les séquences -C#
.
Code
# Supprimez les traits d'union à la fin des mots :
CV = CV %>%
str_remove_all(pattern = "-$")
# Remplacez -C# avec C :
CV = CV %>%
str_replace_all(pattern = "-([bcdfghjklmnpqrstvxz]$)",
replacement = "\\1")
CV
#> [1] "i-nte-rna-ti-o-nal" "cla-nde-sti-ne" "cre-stfa-llen"
Ensuite, on doit ajuster les attaques phonotactiquement illégales : -nt
, -rn
, -nd
, -stf
. Ignorons ll
dans crestfallen, puisqu’on travaille avec l’orthographie. Remarquez que les quatre attaques problématiques peuvent être séparées en deux groupes pour devenir légales en anglais : n-t
, r-n
, n-d
, st-f
. Dans le code ci-dessous, ces groupes sont générés avec les groupes de capture : (1) (n|r|st)
et (2) (t|n|d|f)
.2 Heureusement, toutes les combinaisons de (1) et (2) donneraient lieu à une attaque complexe illégale en anglais (p. ex., -stn
, -nr
, -rf
, etc.). En bref, on veut remplacer le motif --(1)(2)
avec le motif (1)--(2)
.
Code
# Fix onsets:
CV = CV %>%
str_replace_all(pattern = "-(n|r|st)(t|n|d|f)",
replacement = "\\1-\\2")
CV
#> [1] "in-ter-na-ti-o-nal" "clan-de-sti-ne" "crest-fa-llen"
Finalement, on veut peut-être améliorer la syllabation de clandestine. Plus spécifiquement, on veut la syllabation suivante : clan-des-ti-ne
. Pour ce faire, le caractère s
, lorsqu’il est présent dans une attaque complexe, doit devenir la coda de la syllabe précédente. Ici, on suppose que les attaques st
, sp
, sn
, sm
, sl
doivent être décomposées en séquences coda-attaque si elles suivent une syllabe ouverte. Naturellement, cette règle doit être perfectionnée. Le point central ici est de démontrer comment remplacer des motifs avec les groupes de capture en R.
Code
# Fix "clandestine":
CV = CV %>%
str_replace_all(pattern = "([aeiou])-s([tpnml])",
replacement = "\\1s-\\2")
CV
#> [1] "in-ter-na-ti-o-nal" "clan-des-ti-ne" "crest-fa-llen"
Évidemment, ce n’est pas facile de lister toutes les substitutions pour une langue donnée. Toutefois, la structure générale de notre code suivra le même modèle ci-dessus.
Copyright © 2024 Guilherme Duarte Garcia