IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Gestion des césures, syllabes - coupures de mots [Débat]


Sujet :

Langage Perl

  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut Gestion des césures, syllabes - coupures de mots
    Bonsoir à tous,

    Juste par curiosité, je me demandais si Perl qui est un très bon langage de traitement de texte possédait un module qui permet de gérer les coupures de mots avec ou sans césures. Elles sont généralement utiles en fin de ligne justifiée afin de couper le mot au bon endroit si possible. Bien évidement, cela dépend de chaque langue, mais en l’occurrence en français, est-ce qu'un module est existant sur le CPAN.
    Par la même occasion, cela revient à être capable de couper correctement un mot en identifiant les syllabes et les césures dans les règles de l'art.

    Prenons pour exemple le mot : représentation.
    Couper ce mot revient à le tronquer de la sorte : re-pré-sen-ta-tion. Néanmoins, une césure ne doit pas laisser un mot de moins de trois lettres en début ou fin de ligne. De ce fait, la bonne coupure est repré-sen-ta-tion.

    Il serait intéressant d'avoir un module Perl qui soit capable de faire ce genre de coupures . Vous en connaissez ? Dans d'autres langages cela doit exister vu que les coupures de mots sont gérés dans Word, OpenOffice... Cela permettrait d'améliorer les modules de coupure de texte comme Text::Wrap, Text::Format...

    Le seul module que j'ai trouvé est : Text::Hyphen qui utilise l'algorithm Knuth-Liang que je ne connais pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use Text::Hyphen;
     
    my $hyphenator = new Text::Hyphen;
     
    print $hyphenator->hyphenate('representation');
    # prints rep-re-sen-ta-tion
    Qu'en pensez-vous de l'idée d'avoir ce genre de module, existe-il déjà ?

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 412
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour djibril,
    Je ne connais pas de module Perl faisant la césure de mot en syllabes, mais j'avais fait çà en C , il y a près d'une trentaine d'années pour une "phonétisation", plutôt une simplification orthographique pour un thésaurus...

    De mémoire, la fonction faisait le découpage en tout au plus une trentaine de lignes.
    La piste que j'avais utilisé :
    - Mettre le mot dans un tableau, pour accéder à chaque lettre
    - Pour chaque lettre déterminer s'il s'agit d'une consonne ou d'une voyelle

    Lire le tableau et appliquer les règles :
    Celles dont je me souviens de mémoire :
    - Si 2 consonnes se suivent on fait une césure entre les deux consonnes
    - Si une ou plusieurs voyelles est/sont suivie(s) par une consonne, on coupe juste devant la consonne
    Il y a une petite dizaine d'exception...
    ...
    Un mot ne contient pas plus de 5 consonnes successives, le seul que j'ai rencontré à ce jour est Nietzsche

    Tiens, je viens de trouver çà, ça ne devrait pas te poser de pb de programmation Perl

    Je n'ai plus l'utilité d'un tel module, mais l'idée est excellente !

    [EDIT 06:55] Code C
    Tiens je viens de retrouver dans mes archives un bout de code C, ce n'est probablement pas le dernier...
    NB : Il ne s'agissait pas de coller absolument aux règles de grammaire, mais de contourner avant tout les fautes d'orthographes de textes écrits par de nombreux personnels...
    Le module gérait également les locutions et leurs synonymies... Ex :
    Transport de matière dangereuse = Transport matière fissile = Transport matière radioactive...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
                                      /*   CESURES   */
     
    cesu(motinit,motcesures)
    char motinit[];
    char motcesures[];
     
    {
    int i=0,j=0,voyrencontre=0;
     
    while (motinit[i]!='\0')
       {
        if (estvoy(motinit[i]))                      /*   VOYELLES     */
    	if (estvoy(motinit[i]) &&                /*   glu-ant      */
    	    (motinit[i-1]=='u' &&                /*   mar-quant    */
                 motinit[i-2]!='q' &&                /*  u-a  -quant   */
    	     motinit[i-2]!='g') &&
    	    (motinit[i]=='i' &&
    	     motinit[i+1]=='n'))
    	   {
    	    motcesures[j++]='-';
    	    motcesures[j++]=motinit[i++];
    	   }
           else
               {                                      /*  cas general */
                motcesures[j++]=motinit[i++];         /*    te-te     */
                voyrencontre=1;
               }
     
        else                                          /*   CONSONNES  */
          if (motinit[i+1]=='l' && motinit[i]!='l'    /*   e-xem-ple  */
    			    && motinit[i]!='h'    /* a-phro-di-te */
    			    && motinit[i]!='r'    /*  sur-li-gne  */
    			    && i!=0)              /*  -phr  -pl   */
    	 {
    	  motcesures[j++]='-';
    	  motcesures[j++]=motinit[i++];
    	  voyrencontre=0;
    	 }
     
        else                                            /*  im-pri-me  */
          if (motinit[i+1]=='r' && motinit[i]!='r'      /*     -pr     */
    			    && motinit[i]!='h'
    			    && motinit[i]!='n'      /* en-registre */
    			    && i!=0)
    	 {
    	  motcesures[j++]='-';
    	  motcesures[j++]=motinit[i++];
    	  voyrencontre=0;
             }
     
        else                                          /* am-phi-thea-tre */
          if (motinit[i+1]=='h' && i!=0 &&            /*   de-clen-cher  */
    	           (motinit[i]=='c' ||            /*   embau-cher    */
    		    motinit[i]=='p' ||            /*  -ch -ph -th    */
    	            motinit[i]=='t'))
    	 {
    	  motcesures[j++]='-';
    	  motcesures[j++]=motinit[i++];
              voyrencontre=0;
             }
     
        else                                           /*  cham-pa-gne  */
          if (motinit[i+1]=='n' &&                     /*         -gn   */
    	    motinit[i]=='g' && i!=0)
    	 {
    	  motcesures[j++]='-';
    	  motcesures[j++]=motinit[i++];
              voyrencontre=0;
             }
     
        else
          if (estvoy(motinit[i+1]) &&                  /* cas generaux  */
    	 i!=0 && voyrencontre)                     /* voyelle deja  */
    	 {                                         /*  rencontree   */
    	  motcesures[j++]='-';
              motcesures[j++]=motinit[i++];
             }
          else
              motcesures[j++]=motinit[i++];            /* voyelle pas   */
       }                                               /* encore ren-   */
    motcesures[j]='\0';                                /*   contree     */
    }
    NB : Les commentaires expriment l'idée générale de la règle et ne correspondent pas systématiquement au code C qui précède

    J'ai perdu le reste
    Je m'étais également aidé du Dictionnaire des rimes orales et écrites
    Bon courage

  3. #3
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Voici quelques liens intéressants :
    • http://www.plumefrancaise.fr/fr/c%C3%A9sure
    • https://fr.wikipedia.org/wiki/C%C3%A...typographie%29

      Bonjour à tous !
      Ce sujet m’a intéressé, et je me permets d’y revenir bien qu’il soit un peu ancien — ne serait-ce que parce que d’une part ça n’est pas non plus très ancien, d’autre part en cherchant sur Google par exemple on peut tomber dessus et avoir la curiosité de le lire — comme ç’a été mon cas, et ça m’a bien intéressé !
      Je vais essayer de faire en sorte, donc, que ce soit lisible.


      Il me semble que plusieurs choses ont été mélangées, et que pour les uns et les autres le terme “syllabation” ne recouvre pas la même réalité pour les uns et les autres.
      Il faut bien distinguer par exemple l’écrit et l’oral. L’exemple de pavement m’a frappé. Pour l’écrit, la seule syllabation est pa-ve-ment. Si l’on peut envisager pave-ment et pa-vement, c’est uniquement parce que la voyelle -e- [ə] est instable en français (on parle parfois de schwa) et peut disparaître. Il est important de remarquer que c’est peut, et non pas doit.
      Prenez le mot revenir ; syllabation écrite (même si ce concept, je vais y revenir, est lui-même flou) : re-ve-nir ; mais à l’oral, certains disent r'venir, d’autres rev'nir. Il me paraît donc bien téméraire de vouloir légiférer à l’écrit une syllabation orale, dans la mesure où l’écrit est fixe et l’oral fluctuant.

      Syllabation et langue des vers

      Je suis arrivé ici parce que je me préoccupe de la syllabation dans la versification classique (XVIIe–XVIIIe siècles, voire une bonne partie du XIXe). Dans ce domaine, il y a ce que l’on peut appeler une langue des vers qui fixe la prononciation. Dans la langue des vers, par exemple, il n’y a pas de [ljɔ˜], il n’y a que des [liɔ˜] (li-on), de même qu’il n’y a pas de [ʃiɛ˜] (chi-en) et seulement des [ʃjɛ˜] (chien). C’est comme ça, l’usage est fixe. Il y a également les règles d’ « élision » du e instable, et la disjonctivité du h. Bref, peu importe le détail, l’important est qu’en précisant bien toutes les règles (ce qui implique effectivement une liste de vocabulaire parce que la réalisation de la graphie i+V ne dépend en rien ou presque rien de la graphie effective du mot, mais de l’étymologie principalement), on peut syllaber de manière univoque des vers de la période classique. Il n’y a qu’une et une seule façon de "compter" tels vers de Racine, Corneille, Voltaire, même Musset et Baudelaire…

      Deux exemples situés aux antipodes l’un de l’autre
      Boileau, Art poétique :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      C’est / en / vain / qu’au / Par- / nass(e) / un / té- / mé- / rair(e) / au- / teur
      Pren- / se / de / l’art / des / vers / at- / tein- / dre / la / hau- / teur
       
      Verlaine, Poèmes saturniens :
      Bai- / ser / ro- / se / tré- / mièr(e) / au / jar- / din / des / ca- / res- / ses
      Vif / ac- / com- / pa- / gne- / ment / sur / le / cla- / vier / des / dents
      (et jamais cla-/vi-/er, p. ex.)

      Mettre des tirets en fin de ligne

      En ce qui concerne la "syllabation écrite", la césure, ce qu’on appelle en anglais hyphenation (hypen, tiret) est dicté par d’autres règles encore, qui sont bien sûr liées à la prononciation, mais pas uniquement. Par exemple, même si dans certains contextes ont prononce li-on, on n’a pas le droit de couper en fin de ligne li-
      on, pas plus qu’attenti-
      on, ou que li-
      en. Mais ces règles sont liées, elles aussi, à l’étymologie et à la tradition. Ça se voit particulièrement bien en anglais, où l’on coupe gov-
      ernment. En réalité, autant que de règles linguistiques cela relève de règles typographiques. D’ailleurs si quelqu’un voulait utiliser ces règles, je pense qu’il devrait se tourner vers les algorithmes de césure de LaTeX, qui sont maintenant très largement répandus (il me semble avoir lu ou entendu qu’Open/LibreOffice les utilisaient).
      C’est uniquement quand on met des tirets pour couper le mot qu’apprendre est ap-prendre et non a-pprendre, parce que pour beaucoup de gens, c'est a-prendre et la double consonne n’est pas réalisée dans la prononciation.

      Aiguille, anguille, aiguise

      Enfin, oui, il restera toujours en français des cas où la prononciation (la syllabation) doit être précisée par un “dictionnaire”, et aiguille en ferait à mon avis partie.
      Le fait qu’on prononce ai-gu-ille (en détachant le u) n’a rien avoir avec le ille, puisqu'on dit bien an-guille, et qu’inversement on entend aussi bien ai-gu-i-ser qu’ai-gui-ser.



      Je pense donc, pour conclure, que oui il est possible de syllaber un texte français par l’informatique, dans un certaine mesure et avec certaines restrictions, mais qu’une intervention qui ne relève pas de la pure algorithmique à partir de la graphie (recours à un dictionnaire) est nécessaire parce que la graphie en français (comme en anglais d’ailleurs) n’est pas suffisante, voire consistante, pour décrire la prononciation.


    Finalement, cela ne semble pas si évident que ça. Il y a beaucoup d'exceptions. Mais juste pour le fun, j'aimerai bien essayer de faire un petit programme. Je vais dans un premier temps m'inspirer de ton code dmganges. Sur plusieurs sites, il est écrit qu'il faudrait presque avoir une BDD avec tous les mots du dictionnaires , ce qui semble moyen si j'en faisais un module.
    Donc deux problématiques :
    • à partir d'un mot, isoler les syllabes ;
    • à partir d'un mot, isoler les césures pour les fins de ligne.


    Je compte sur vous pour m'aider

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 976
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 976
    Points : 15 446
    Points
    15 446
    Par défaut
    Salut,
    Citation Envoyé par djibril Voir le message
    Voici quelques liens intéressants :
    Faudra faire attention avec ce site : une magnifique faute d'orthographe sur la page en question, une autre sur la page d'accueil, et comme la page "Contact" est désactivée (le site a l'air inactif depuis un an), ça va rester...

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 412
    Points : 2 061
    Points
    2 061
    Par défaut
    Citation Envoyé par djibril
    Finalement, cela ne semble pas si évident que ça. Il y a beaucoup d'exceptions.
    Oui, il est difficile de faire un module générique, il faut bien penser les besoins aux départ :
    - Césures pour un traitement de texte
    - Césures en vue de phonétiser
    - Césures en vue d'une simplification orthographique
    ...

    En ce qui me concerne j'avais à phonétiser en vue d'une simplification orthographique :
    Une fois le mot découpé en syllabes, je phonétisais les syllabes.
    Les syllabes phonétisées était une entrée dans un dictionnaire d'une BDD, Ex :

    Phonème Pho-nè-me donnait FoNeMe
    Et ce que le mot initial soit Phonaime, Fonème, Fauneime...

    Je n'ai pas eu le temps de finaliser correctement ce projet, mon patron s'étant aperçu que je m'amusais comme un petit fou, m'avait donné un autre os à ronger ! selon ces propres dires...
    S'il passe par là, il se reconnaîtra sans aucun doute

    La langue française est pleine de turpitudes du genre :

    Les poules couvent dans le couvent,
    elles sortaient dès qu'on leur avait ouvert la porte
    elles sortaient des cons leur avaient ouvert la porte
    ...

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    Faudra faire attention avec ce site : une magnifique faute d'orthographe sur la page en question, une autre sur la page d'accueil, et comme la page "Contact" est désactivée (le site a l'air inactif depuis un an), ça va rester...
    C'est sûr ! Mais y a toujours moyen de tirer du positif dans ce site.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par dmganges Voir le message
    Oui, il est difficile de faire un module générique, il faut bien penser les besoins aux départ :
    - Césures pour un traitement de texte
    - Césures en vue de phonétiser
    - Césures en vue d'une simplification orthographique
    ...

    En ce qui me concerne j'avais à phonétiser en vue d'une simplification orthographique :
    Une fois le mot découpé en syllabes, je phonétisais les syllabes.
    Les syllabes phonétisées était une entrée dans un dictionnaire d'une BDD, Ex :

    Phonème Pho-nè-me donnait FoNeMe
    Et ce que le mot initial soit Phonaime, Fonème, Fauneime...

    Je n'ai pas eu le temps de finaliser correctement ce projet, mon patron s'étant aperçu que je m'amusais comme un petit fou, m'avait donné un autre os à ronger ! selon ces propres dire...
    S'il passe par là, il se reconnaîtra sans aucun doute
    Bah n'ayant pas forcément de besoins, c'est juste pour le fun, je te dirais de partir sur quelques choses de simple dans un premier temps si c'est possible : césure pour du traitement de texte, c'est ce qui serait le plus utile au plus grand nombre, mais reste à savoir si c'est le plus simple à faire .

    Voici une excellente documentation sur la typographie française : petite leçon de typographie de Jacques ANDRÉ.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Je pense que les traitements de texte comme Word ou OpenOffice Writer utilisent une base de données avec tous les mots (ça sert aussi à la vérification orthographique) et les emplacements des césures possibles.

    Il y a peut-être moyen de récupérer la BDD de mots d'Open Office ou de Libre Office (c'est d'ailleurs peut-être la même), car elle doit être dans le domaine public. Avec environ 60.000 mots, on arrive sans doute à moins d'un demi mégaoctet, ce n'est pas forcément prohibitif.

    Citation Envoyé par djibril Voir le message
    Le seul module que j'ai trouvé est : Text::Hyphen qui utilise l'algorithm Knuth-Liang que je ne connais pas, mais rien que l'exemple de la documentation me laisse perplexe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use Text::Hyphen;
     
    my $hyphenator = new Text::Hyphen;
     
    print $hyphenator->hyphenate('representation');
    # prints rep-re-sen-ta-tion
    Les règles de la césure ne sont pas les mêmes en français et en anglais.

    Et le mot anglais representation "s'hyphène" bien comme indiqué, rep-re-sen-ta-tion, comme on peut le vérifier sur n'importe quel bon dictionnaire anglais. Voir par exemple celui-ci.

    Sinon, quand je vois le nom de Knuth dans un algorithme, j'ai le plus grand respect. Il serait peut-être utile d'y jeter un coup d’œil et de voir s'il peut être adapté aux règles de césure en français.

  9. #9
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Quelques informations complémentaires, mais sans doute en partie périmées:

    https://www.openoffice.org/fr/Docume...tionnaires.pdf


    Et un second lien vers le site de ceux qui produisent les dictionnaires pour les logiciels libres, y compris le dictionnaire de césure.

    Reste à comprendre comment se servir de leurs dictionnaires.

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 910
    Points : 6 703
    Points
    6 703
    Par défaut
    Pour les motivés, vous trouverez la thèse de Frank Liang sur le sujet et un lien vers le code source (en TeX et Pascal) de Donald Knuth: http://www.tug.org/docs/liang/

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Je pense que les traitements de texte comme Word ou OpenOffice Writer utilisent une base de données avec tous les mots (ça sert aussi à la vérification orthographique) et les emplacements des césures possibles.

    Il y a peut-être moyen de récupérer la BDD de mots d'Open Office ou de Libre Office (c'est d'ailleurs peut-être la même), car elle doit être dans le domaine public. Avec environ 60.000 mots, on arrive sans doute à moins d'un demi mégaoctet, ce n'est pas forcément prohibitif.



    Les règles de la césure ne sont pas les mêmes en français et en anglais.

    Et le mot anglais representation "s'hyphène" bien comme indiqué, rep-re-sen-ta-tion, comme on peut le vérifier sur n'importe quel bon dictionnaire anglais. Voir par exemple celui-ci.

    Sinon, quand je vois le nom de Knuth dans un algorithme, j'ai le plus grand respect. Il serait peut-être utile d'y jeter un coup d’œil et de voir s'il peut être adapté aux règles de césure en français.
    En effet, avoir le dictionnaire entier dans le module peut ne pas être une idiotie. Pour le module Text::Hyphen j'avais zappé le fait que cela s'applique plutôt à la langue anglaise. L'adapter à la langue française serait une bonne idée.

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Le courageux Jacques ANDRÉ a lu la thèse pour nous et voici ses commentaires : http://www.laurentbloch.org/MySpip3/spip.php?article181.

  13. #13
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    j'ai jeté un coup d’œil au code du module .

    C'est assez simple.

    Il contient notamment une longue liste de motifs de césure adaptés à la langue anglaise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    sub _PATTERNS {
        return [qw(
    .ach4 .ad4der .af1t .al3t .am5at .an5c .ang4 .ani5m .ant4 .an3te .anti5s .ar5s
    .ar4tie .ar4ty .as3c .as1p .as1s .aster5 .atom5 .au1d .av4i .awn4 .ba4g .ba5na
    .bas4e .ber4 .be5ra .be3sm .be5sto .bri2 .but4ti .cam4pe .can5c .capa5b .car5ol
    .ca4t .ce4la .ch4 .chill5i .ci2 .cit5r .co3e .co4r .cor5ner .de4moi .de3o .de3ra
    .de3ri .des4c .dictio5 .do4t .du4c .dumb5 .earth5 .eas3i .eb4 .eer4 .eg2 .el5d
    .......
    3ysis y4so yss4 ys1t ys3ta ysur4 y3thin yt3ic y1w za1 z5a2b zar2 4zb 2ze ze4n
    ze4p z1er ze3ro zet4 2z1i z4il z4is 5zl 4zm 1zo zo4m zo5ol zte4 4z1z2 z4zy
        )];
    }
    ainsi qu'une courte liste d'exceptions.

    Le dictionnaire de césures sur le site français que j'ai cité (cliquer sur le lien Césures 3.0 ou: http://www.dicollecte.org/download/fr/hyph-fr-v3.0.zip) contient des motifs ressemblant beaucoup:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ab2h % df-bg 1998/02/07 for abhorrer
                        .ab3r\'ea
                        'ab3r\'ea
    ad2h % df-bg 1998/02/07 for adh\`esion & co
                        a1\`e2dre
                        .ae3s4ch
                        'ae3s4ch
                        1alcool
                        a2l1algi
                        .amino1a2c
                        'amino1a2c
                        .ana3s4tr
                        'ana3s4tr
                        1a2nesth\'esi
                        .anti1a2
                        'anti1a2
                        .anti1e2
    (Les lignes commençant pas % sont des commentaires)

    Il paraît très probable que les deux listes de motifs sont destinées au même algorithme.

    Donc, on peut penser qu'en utilisant le module et en y remplaçant la liste des motifs anglais par des motifs français, on devrait obtenir quelque chose susceptible de marcher.

    Il faut sans doute creuser plus (je ne vois pas de liste d'exceptions dans la version française). Il faudrait aussi mieux comprendre la liste de motifs français: j'ai vu par exemple que "\'" représente un accent aigu sur la lettre suivante et "\`" un accent grave, mais il y a sans doute pas mal d'autres subtilités.

    Si mes hypothèses ci-dessus se vérifient, il ne devrait pas être bien difficile de faire un module Text::Hyphen::FR.

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut

    J'ai eu la même réflexion que toi en regardant le contenu du module.
    Je fouille le net aussi pour voir ce qui se fait (petit projet python).

  15. #15
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Avez-vous testé Text::Hyphen ? De mon coté, il ne me tronque rien. Il m'affiche toujours mon mot d'origine sans coupure.

  16. #16
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Même chose, il ne découpe pas.

    Pourtant, j'ai essayé en mode debug, à la fin, à la ligne 535 ("return wantarray ? @pieces : join($delim, @pieces);"), on a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      DB<28> x @pieces
    0  'rep'
    1  're'
    2  'sen'
    3  'ta'
    4  'tion'
      DB<29> x $delim
    0  '-'
      DB<30> $w = join($delim, @pieces)
     
      DB<31> x $w
    0  'rep-re-sen-ta-tion'
    Je pense donc qu'il ne faut pas faire print sur le résultat, mais le mettre dans une variable scalaire. Sinon, print impose sans doute un contexte de liste et print remet les morceaux de @pieces ensembles.

    Pas le temps de tester maintenant, je le ferai plus tard.

  17. #17
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Voilà: en imposant un contexte scalaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $ perl -e 'use Text::Hyphen;
    >
    >     my $hyphenator = new Text::Hyphen;
    >
    >     print scalar $hyphenator->hyphenate('representation');
    > '
    rep-re-sen-ta-tion
    Donc, ça marche, c'est juste l'exemple de l'auteur dans sa documentation qui était mal fagoté.

  18. #18
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    arfff, bien vu.

  19. #19
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    OK, j'ai modifié le code de Text::Hyphen dans Text::FR:Hyphen en utilisant la liste de motifs français trouvée sur le site mentionné plus haut, et ça a l'air de marcher plutôt pas mal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    $ perl -MText::FR::Hyphen -E '
    > my $hyphenator = new Text::Hyphen;
    > my @a = qw / papillon parapluie aspirine anticonstitutionnellement liste stupide
    > monnaie emprunt histoire film photographie essentiellement programmation immuable/;
    > say scalar $hyphenator->hyphenate($_) for @a;
    > '
    pa-pil-lon
    para-pluie
    as-pirine
    an-ti-con-sti-tu-tion-nelle-ment
    liste
    stupi-de
    mon-naie
    em-prunt
    his-toire
    film
    pho-togra-phie
    es-sen-tielle-ment
    pro-gram-ma-tion
    im-muable
    Il ne trouve pas toutes les césures possibles, et pas toujours les meilleures (à mon humble avis), mais toutes celles qu'il trouve sont correctes, et c'est le plus important.

    Pas mal pour un premier essai, Non?

    J'ai évité pour l'instant les mots ayant des caractères accentués, parce c'est peut-être plus compliqué.

    Mais je trouve l'essai très encourageant.

  20. #20
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Nouvel essai avec des accents, cédilles, etc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $ perl -MText::FR::Hyphen -E '
    > my $hyphenator = new Text::Hyphen;
    > my @a = qw / Mitterrand avocat éternellement immédiat maçon douzième répréhensible gouvernement développement /;
    > say scalar $hyphenator->hyphenate($_) for @a;
    > '
    Mit-ter-rand
    av-o-cat
    éter-nelle-ment
    im-mé-di-at
    maçon
    douz-ième
    répréhen-si-ble
    gou-verne-ment
    développe-ment
    Les accents et cédilles ne gênent pas le bon fonctionnement, a priori, mais ici au moins deux cas de césures non satisfaisantes, je pense (av-o-cat et douz-ième).

    Bon, j'en reste là pour ce soir, tout n'est pas parfait, manifestement, mais l'outil marche plutôt pas mal quand même.

    Bonne soirée à tous.

+ Répondre à la discussion
Cette discussion est résolue.
Signaler un problème
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Gestion des logins et des mots de passe
    Par arindor dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 14/01/2008, 14h59
  2. gestion des utilisateurs par mot de passe
    Par ln0331 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2008, 03h26
  3. Gestion des mots de pass utilisateur
    Par philguio dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/05/2007, 23h42
  4. gestion des mot de passe avec Access
    Par cyberbiker dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/09/2006, 16h42
  5. [Regex] gestion des accents dans un mot
    Par joseph_p dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/05/2006, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo