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

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.