Découper un mot en syllabes
Voici un script qui permet de découper un ou plusieurs mots en syllabes.
Merci à http://www.bertrandboutin.ca/Folder_151_Grammaire/P_b_division.htm pour la définition des syllabes.
Ce script peut être téléchargé ICI. ou via mon GitLab
Il s'utilise de cette manière :
$ ./syllabes.sh mot1 mot2 mot3 mot4 etc etc ...
Le script accepte au minimum un mot.
Voici le détail du script avec un maximum de commentaires :
$ cat syllabes.sh
#!/bin/bash
# Activer pour le debug
#set -x
function preRequis {
for arg in $@; do
if ! which $arg >/dev/null; then
echo "La commande $arg n'est pas installée !!!"
echo "Fin du script."
exit 1
fi
done
}
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
preRequis egrep sed
# Si le nombre d'arguments passé au script est inférieur à 1
# On quitte le script immédiatement.
if [ $# -lt 1 ]; then
echo "Usage: `basename $0` mot1 [mot2 mot3 ...]"
exit 1
fi
# Liste des voyelles
VOY="aeiouyàâäéèêëîïôöùûü"
# Liste des consonnes
CONS="zrtpqsdfghjklmwxcvbnç"
# Liste des groupes de lettres insécables
GR="bl cl fl gl pl br cr dr fr gr pr tr vr ch ph gn th"
for MOT in $@; do
# On convertit toutes les majuscules en minuscules
_MOT=$(tr "[A-Z]" "[a-z]" <<< "$MOT")
# On exécute la première règle de découpe des syllabes
# avec les groupes de lettres insécables.
for _GR in $(echo $GR); do
_MOT=$(sed "s/$_GR/-$_GR/g" <<< "$_MOT")
done
# Boucle infinie
while :; do
# Une consonne placée entre deux voyelles introduit une nouvelle syllabe.
if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{1}[$VOY]{1}" <<< "$_MOT"); then
for __SYL in $SYL; do
_SYL=$(sed -r "s/^(.)(.{2})$/\1-\2/" <<< "$__SYL")
_MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
done
continue
fi
# Deux consonnes placées entre deux voyelles,
# la première appartient à la syllabe précédente,
# la seconde, à la syllabe suivante.
if SYL=$(grep -E -o "[$VOY]{1}[$CONS]{2}[$VOY]{1}" <<< "$_MOT"); then
for __SYL in $SYL; do
_SYL=$(sed -r "s/^(.{2})(.{2})$/\1-\2/" <<< "$__SYL")
_MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
done
continue
fi
# Quand il y a trois consonnes ou voyelles consécutives à l’intérieur d’un mot,
# ordinairement les deux premières terminent une syllabe,
# l’autre commence une nouvelle syllabe.
if SYL=$(grep -E -o "[$CONS]{3}|[$VOY]{3}" <<< "$_MOT"); then
for __SYL in $SYL; do
_SYL=$(sed -r "s/^(.{2})(.)$/\1-\2/" <<< "$__SYL")
_MOT=$(sed "s/$__SYL/$_SYL/" <<< "$_MOT")
done
continue
fi
# On quitte la boucle infinie si aucune des conditions précédentes n'est vraie
break
done
# On affiche le résultat
_MOT=$(sed "s/^-//" <<< "$_MOT")
echo -e "$MOT => $_MOT"
done
exit 0
Ajouter un commentaire