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. #21
    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
    On s'y prend au jeu hein !
    Moi j'essaye de comprendre le code, mais bon, en remplaçant les motifs, c'est sûr que ça semble concluant.
    J'ai d’ailleurs vu sur le CPAN que l'auteur avait crée un autre module dédié au russe.
    Donc il serait possible d'ajouter un extension pour le français ou de réécrire le module.

    Pour ce qui est des accents et ligature, je pense qu'il faut bien jouer avec les encodages.

  2. #22
    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
    Bonjour,

    Après modification de la liste de pattern, voici le résultat d'un test réalisé :
    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
    représentation -> repré-sen-ta-tion
    avocat -> avo-cat
    coupure -> cou-pure
    familliale -> famil-liale
    porte-monnaie -> porte--mon-naie
    rouge-gorge -> rouge--gorge
    transaction -> tran-sac-tion
    superbe -> superbe
    consistant -> consis-tant
    consultant -> consul-tant
    rubicon -> rubi-con
    developpement -> deve-lop-pe-ment
    développement -> dé-ve-lop-pe-ment
    fécondé -> fé-condé
    Aujourd'hui -> Aujour-d'hui
    Aviation -> Avia-tion
    détacher -> dé-ta-cher
    Même si dans l'ensemble c'est pas mal, voici quelques remarques :
    • Erreurs pour ma part :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      porte-monnaie -> porte--mon-naie
      rouge-gorge -> rouge--gorge
      rubicon -> rubi-con
      développement -> dé-ve-lop-pe-ment
      détacher -> dé-ta-cher
    • je pense qu'il faut mettre au minimum 3 pour la longueur des préfixes et suffixes afin d'éviter d'avoir des bouts de mot à 2 caractères ;
    • il faut que le module évite les coupures faisant apparaitre en début ou fin : con cul faq...
    • il ne doit pas couper les mots composés, les nom propres et éviter les doubles tirets ;
    • il y a un souci avec l'accent de développement, fécondé.


    Il faut soit rajouter quelques règles dans le codes, soit améliorer les pattern.

    Qu'en pensez-vous ?

  3. #23
    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
    Citation Envoyé par djibril Voir le message
    [*]je pense qu'il faut mettre au minimum 3 pour la longueur des préfixes et suffixes afin d'éviter d'avoir des bouts de mot à 2 caractères ;
    La longueur minimale des préfixes et suffixes est paramétrable. Par défaut, en anglais c'est 2 pour les préfixes et trois pour les suffixes.
    Citation Envoyé par djibril Voir le message
    [*]il faut que le module évite les coupures faisant apparaitre en début ou fin : con cul faq...
    Ce doit être possible en enrichissant la liste des motifs, mais encore faut-il comprendre comment ils fonctionnent.
    Citation Envoyé par djibril Voir le message
    [*]il ne doit pas couper les mots composés, les nom propres et éviter les doubles tirets ;
    Le double tiret, je pense que c'est pour proposer la césure préférée, au programme utilisateur de gérer. Je ne vois de problème pour les noms propres, ils sont souvent coupés quand ils sont longs dans les colonnes étroites des journaux.
    Citation Envoyé par djibril Voir le message
    [*]il y a un souci avec l'accent de développement, fécondé.
    Lequel? A part que le préfixe est de deux lettres, mais cela, c'est paramétrable au moment de l'instantiation de l'objet de classe Hyphen..

    Et tu as fait comment pour qu'avocat soit coupé correctement alors qu'il ne l'était pas dans mon essai?

  4. #24
    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
    La longueur minimale des préfixes et suffixes est paramétrable. Par défaut, en anglais c'est 2 pour les préfixes et trois pour les suffixes.
    C'est ce que j'ai fait en mettant trois par défaut.
    Citation Envoyé par Lolo78 Voir le message
    Ce doit être possible en enrichissant la liste des motifs, mais encore faut-il comprendre comment ils fonctionnent.
    pour éviter con en fin de ligne, le motif con4. fait l'affaire.

    Citation Envoyé par Lolo78 Voir le message
    Le double tiret, je pense que c'est pour proposer la césure préférée, au programme utilisateur de gérer.
    Je pense que c'est plutôt un bogue non géré.
    Citation Envoyé par Lolo78 Voir le message
    Je ne vois de problème pour les noms propres, ils sont souvent coupés quand ils sont longs dans les colonnes étroites des journaux.
    Normalement, les noms propres ne doivent pas être coupés. C'est la règle.
    Citation Envoyé par Lolo78 Voir le message
    Lequel? A part que le préfixe est de deux lettres, mais cela, c'est paramétrable au moment de l'instantiation de l'objet de classe Hyphen..

    Et tu as fait comment pour qu'avocat soit coupé correctement alors qu'il ne l'était pas dans mon essai?
    j'ai paramétré 3 d'où le non coupage de avocat, mais cela ne fonctionne pas pour développement avec accents donc y a un couac quelque part.

  5. #25
    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,

    quelques essais sous OpenOffice pour comparer:
    • même en autorisant des préfixes de 2 lettres, avocat ne prend qu'une seule coupure possible: avo-cat, alors que l'on utilise probablement les mêmes motifs (ou une base de motifs très proche), c'est assez étrange.
    • si la longueur minimale du préfixe est fixée à 3, fécondé et développement ne sont pas coupés après la deuxième lettre; donc OO compte apparemment mieux les caractères accentués que le module Perl; une éventuelle correction ne devrait pas être trop difficile;
    • OpenOffice n'hésite pas à couper les noms propres : Aris-tote.

    pour éviter con en fin de ligne, le motif con4. fait l'affaire.
    Tu as compris comment fonctionnent les motifs? Pour l'instant, je n'en ai qu'une idée très vague.

  6. #26
    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
    Salut Lolo78,

    Il faudrait trouver la même base de motifs utilisés par Apache OpenOffice ou du moins la plus récente disponible.
    Quand je regarde le programme du module, il ne joue à aucun moment avec les encodages, il se peut que les lettres accentuées soient mal encodées et de ce faite, é serait sur deux caractères ?
    Pour avocat, il se peut que ce soit également une histoire de motif.
    Voici ce que j'ai compris des motifs :
    un motif est une combinaison de lettres et de chiffres (de 0 à n). Un nombre impair signifie que la coupure est permise, un nombre pair signifie que la coupure est interdite. L'assemblage de ces motifs permet d'avoir une couverture sur le mot que l'on étudie et si certains interfèrent, le plus grand gagne.
    Les points signifient soit un début de ligne, soit une fin de ligne.
    N.B. Je n'ai pas tout saisie vu qu'il y a aussi des tirets, guillemets.

    Voici un exemple issu de ce lien.
    Prenons un exemple en anglais, le mot : hyphenation. Voici les patterns stockés, qui sont "éligibles" pour ce mot. Sans nombres : hyph hen hena henat na nat tio io on. . Avec : hy3ph he2n hena4 hen5at 1na n2at 1tio 2io o2n. .
    Voici l'appariement du mot et des patterns :

    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
    h-y-p-h-e-n-a-t-i-o-n 
    h-y3p-h
    ------h-e2n
    ------h-e-n-a4
    ------h-e-n5a-t
    ---------1n-a
    ----------n2a-t
    -------------1t-i-o
    ---------------2i-o
    ------------------o2n
    -----------------------
    h-y3p-h-e2n5a4t2i-o2n
     
    -> hy3phe2n5a4t2io2n
    -> hy-phen-ation
    La dernière ligne qui ramasse les nombres en gardant le maximum, donne la réponse au problème de la coupure. La réponse est hy-phen-ation.
    On constate par exemple que hen5at et n2at chevauche sur le n. Le 5 a pris le dessus d'où : h y3p h e2n5a4t2i o2n et 5 étant impair, la coupure est permise (phen-).
    Voilà un peu ce que j'ai compris de l'algorithme. L'implémentation de cette assemblage en perl fait un peu mal au crane mais c'est ce que le module fait. Si on peut le réécrire, je ne suis pas contre.
    Maintenant, pour être complet, si on souhaite mieux respecter la langue française, il faut mieux gérer les cas particuliers : ne pas couper les noms propre, ne pas couper les noms composés, ne pas laisser moins de trois lettres en extrémité, faire attention à certains derniers mots (con, cul, faq...) et autres. Informatiquement, on ne pourra pas gérer tous les cas car il y a des cas qui ne que détectable que par la sonorité, mais bon. Il y a moyen de déjà améliorer ces coupures en plus des motifs.

  7. #27
    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 besoin d'y réfléchir, mais je pense que pour être utile, il ne faudrait pas s'éloigner de la liste des motifs, qui doit être maintenue et évoluer régulièrement. Faire notre propre liste de motifs serait sans doute contreproductif.

    On peut ajouter des règles particulières, mais sans doute pas modifier le corpus existant de motifs.

  8. #28
    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
    Je suis d'accord avec toi sur le fait que la liste des motifs doit être celle que l'on téléchargera sur un site officiel. Qu'elle est le site de référence où l'on pourrait télécharger la dernière version du fichier contenant les motifs ?
    Pour le module, il y aurait juste une procédure supplémentaire dont le but serait de faire un traitement supplémentaire sur le résultat rendu par le module afin de gérer nos cas particuliers.
    Le module est également censé gérer une liste d'exception, mais je n'ai pas encore saisie comment cela fonctionne donc à nous de définir cette liste.
    Pour gérer les noms propres et abréviations, c'est plus compliqué car il faut les connaitre à l'avance .
    Le module pourrait en option laisser la possibilité de ne pas couper les sigles, les abbreviations et les noms propres.

  9. #29
    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 Djibril,

    On peut modifier légèrement le code du module pour qu'il charge dans le trie deux listes de motif, celle officielle (pouvant facilement être mise à jour lorsque la liste officielle est mise à jour) et une seconde avec des motifs complémentaires que nous ajouterions pour les règles que nous voudrions changer.

    Pour les noms propres, on pourrait ne pas passer au programme les mots commençant par une majuscule, mais c'est un peu embêtant pour les majuscules en début de phrase.

    Sinon, je confirme que le programme considère une lettre accentuée comme deux lettres, comme le montre cette session sous le débogueur avec le mot "féconde":

    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
      DB<2> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:495):
    495:        length($word) < $self->{min_word}
    496:            and return $word;
     
      DB<2> print length($word)
    8
      DB<3> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:498):
    498:        my @word = split //, $word;
      DB<3> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:501):
    501:        my $points = $self->{exceptions}->{lc($word)};
      DB<3> x  @word
    0  'f'
    1  '▒'
    2  '▒'
    3  'c'
    4  'o'
    5  'n'
    6  'd'
    7  'e'
    Le mot "féconde" à 7 lettres, mais la fonction length de Perl en compte 8 (je n'avais jamais remarqué jusqu'à hier soir) et le découpage en lettres individuelles divise le "é" en deux caractères non affichables. Il va falloir voir si, en jouant avec les modules Unicode/UTF8, on peut résoudre ce problème. Je vais faire quelques essais, mais j'ai une expérience assez limitée dans le domaine, au boulot on a quasiment toujours du pur ASCII.

  10. #30
    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
    En utilisanr le moduke utf8, le mot féconde se retrouve bien avec 7 lettres:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ perl -E 'say length("féconde");'
    8
     
    $ perl -Mutf8 -E 'say length('féconde');
    > '
    7
    Et, dans le module, le découpage en lettre individuelles n'en trouve que 7:

    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
    $ perl -MText::FR::Hyphen -Mutf8 -dE '
    > my $hyphenator = new Text::Hyphen((min_prefix => 3));
    > say scalar $hyphenator->hyphenate("féconde");
    > '
     
    (...)
     
      DB<1> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:495):
    495:        length($word) < $self->{min_word}
    496:            and return $word;
      DB<1> print length($word);
    7
      DB<2> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:498):
    498:        my @word = split //, $word;
      DB<2> s
    Text::Hyphen::hyphenate(/usr/lib/perl5/site_perl/5.14/Text/FR/Hyphen.pm:501):
    501:        my $points = $self->{exceptions}->{lc($word)};
      DB<2> x @word;
    0  'f'
    1  '▒'
    2  'c'
    3  'o'
    4  'n'
    5  'd'
    6  'e'
      DB<3> c
    f▒conde
    Mais la lettre accentuée n'est plus comprise!

    Cela semble fonctionner en ajoutant une nouvelle ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ perl -MText::FR::Hyphen -Mutf8 -E '
    > my $hyphenator = new Text::Hyphen((min_prefix => 3));
    > binmode STDOUT, ":utf8";
    > say scalar $hyphenator->hyphenate("féconde");
    > '
    féconde
    Mais il va falloir être prudent sur cette problématique Unicode.

  11. #31
    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
    En fait, pour palier au souci, tu mets dans le .pm
    Le .pm étant encodé en UTF-8. Ton script ensuite encodé en utf-8 fonctionne. Ayant un peu l'habitude de ce genre de galère, il va falloir que le nouveau module soit encodé en UTF-8, que les mots passé au module soient aussi encodé en UTF-8 pour palier à tous ces soucis.
    Pour l'affichage sur la console, c'est encore autre chose en fonction du terminal configuré.

    Je viens de faire des tests et cela fonctionne correctement et s'affiche bien.

    Voilà une idée pour le nouveau module :
    • création de la liste des motifs issus de Dicollect dans le module. Elle ne sera modifiées qu'en cas de mise à jour ;
    • création d'autres listes contenant certains sigles, abréviations et noms propres. Il faut trouver un site officiel (pas simple) ;
    • création d'une liste d'exception ;
    • le module donnera ou non la possibilité de tenir compte des listes supplémentaires (nom propres...) ;
    • création d'une procédure pour les traitements supplémentaires avec possibilité de désactivation.


    C'est faisable très facilement.

  12. #32
    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
    J'avais appuyé par mégarde sur le bouton envoyer sans avoir fini mon post. J'ai maintenant ajouté un test supplémentaire paraissant concluant, mais tu as répondu entre temps.

  13. #33
    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
    Bonjour,

    Le problème est résolu avec ce nouveau module Perl : Lingua::FR::Hyphen.

    Merci à tous pour votre participation.

  14. #34
    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
    Salut Djibril,

    tu pourrais peut-être l'annoncer dans un message aux Mongueurs de Perl, Non?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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, 13h59
  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, 02h26
  3. Gestion des mots de pass utilisateur
    Par philguio dans le forum VB.NET
    Réponses: 3
    Dernier message: 05/05/2007, 22h42
  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, 15h42
  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, 09h04

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