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 :

expressions régulières pour corriger la typographie d'un texte


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Par défaut expressions régulières pour corriger la typographie d'un texte
    Bonjour,

    Je suis débutante avec le langage Perl.
    Je suis à la recherche de codes qui me permettraient de corriger automatiquement un texte au niveau de sa typographie.
    L'utilisation des expressions régulières est à privilégier.

    Merci d'avance pour votre aide.

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    à mon avis, il est impossible de corriger l'orthographe d'un texte avec des expressions régulières.

    Je pense que la seule solution praticable est de disposer d'un corpus de mots corrects (téléchargeable sur Internet).

  3. #3
    Membre averti
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Par défaut
    Merci.
    Je voudrais corriger la typographie, pas l'orthographe.
    Donc supprimer des espaces en trop, mettre des majuscules après les points, mettre des espaces avant et après un tiret, etc.
    Je suis un cours de codage en perl et le prof m'a dit que ça se fait principalement avec des boucles et des expressions régulières...

    Je suis vraiment débutante et je ne sais pas trop comment m'y prendre :/

  4. #4
    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
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    OK, ton texte, il est dans un fichier? Si oui, tu sais comment ouvrir le fichier pour le lire ligne à ligne? Sais-tu comment écrire dans un (autre) fichier de résultat?

    Si tu sais faire tout cela, c'est déjà un début, puisqu'il suffit, pour chaque ligne lue, d'appliquer des expressions régulières. Par exemple, pour supprimer les doubles (ou triples) espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # ouverture des fichiers en entrée et en sortie
    while (my $ligne = <$IN_FILE>) {
        $ligne = s/ +/ /g;      # remplace espaces multiples par un seul espace
        # ici, autres expressions régulières pour autres règles typographiques
        # ...
        print $OUT_FILE $ligne;
    }
    # fermeture des fichiers
    C'est l'idée de base, il peut y avoir des variations selon les besoins. Mais le mieux est que tu montres ton code pour que l'on t'indique ce qu'il faut changer ou améliorer.

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Enlever des espaces dupliqués, ça ne pose pas de problèmes. Par contre pour ce qui est de mettre une majuscule après un point, c'est différent: s'il est facile de détecter une lettre minuscule après un point, il est plus difficile de savoir si le point marque la fin d'une phrase. Qu'en est-il si une lettre minuscule suit une abréviation comme par exemple "c.-à -d."? Dans ce cas il n'y a pas lieu de mettre une majuscule au mot suivant. C'est pour ce genre de choses qu'un dictionnaire est utile.

    Pour ce qui est des tirets, ça n'est pas évident du tout. Si le texte a déjà une politique claire en la matière en utilisant des caractères différents comme par exemple: tirets longs pour les dialogues, tirets moyens pour les énumérations, etc., c'est envisageable (et encore), par contre si le caractère moins (ascii x2D) est indifféremment utilisé dans toutes les situations, c'est impossible.

    Je crois que le plus gros du travail n'est pas le code en lui même, mais surtout d'établir clairement les limites de l'exercice.

  6. #6
    Membre averti
    Femme Profil pro
    Bibliothécaire
    Inscrit en
    Juillet 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bibliothécaire

    Informations forums :
    Inscription : Juillet 2016
    Messages : 42
    Par défaut
    Voilà mon code.
    J'ai rassemblé des infos que j'ai trouvé sur différents sites mais je ne sais pas du tout si je vais dans la bonne direction !
    Le code doit pouvoir fonctionner sur n'importe quel texte.
    Je sais ouvrir le fichier mais par contre, je croyais que la correction se faisait automatiquement :/
    D'après le prof, c'est facile et amusant ! Mais je suis complètement perdue.
    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éprouvé Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 153
    Par défaut
    Hello,

    Si tu utilisais un éditeur de texte avec la coloration syntaxique tu trouverais déjà des erreurs .

    Je ne suis pas expert en Perl mais pour une substitution il te faut avoir toujours 3 / : $ligne = s/ +/ /g;

    ça donnerai plutôt quelque chose dans ce genre , à compléter bien sur :

    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
    my $numero_ligne = 0;
       while ( my $ligne = <$donnees> ) {
     
    # s/ substitution
     
        $ligne =~ s/\.[A-Z]$//;              # une chaine qui se termine par  
                                                    # un point suivie d'une majuscule
     
        $ligne =~ s/ *$//;                 # supprimer les espaces en trop 
                                                    # à la fin de chaque ligne  
     
        $ligne =~ s/^ *//;                 # supprimer les espaces en trop 
                                                    # au début de chaque ligne
     
        $ligne =~ s/([ \t]*\n){2,}/\n/g;   # supprimer les lignes vides 
                                                    # ou ne contenant qu'une 
                                                    # combinaison de blancs et de
                                                    # tabulations
     
        $ligne =~ s/«([^ ])//;              # supprimer les espaces après 
                                                    # les guillemets ouvrants
     
        $ligne =~ s/([^ ])»//;              # supprimer les espaces avant 
                                                    # les guillemets fermants
     
        $ligne =~ s/\(([^ ])//;             # supprimer les espaces après 
                                                    # les parenthèses ouvrantes
     
        $ligne =~ s/([^ ])\)//;             # supprimer les espaces avant 
                                                    # les parenthèses fermantes
     
        $ligne =~ s/ +/ /;                 # remplacer plusieurs espaces
                                                    # par un seul
     
       }

  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
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emycherie02 Voir le message
    Je sais ouvrir le fichier mais par contre, je croyais que la correction se faisait automatiquement :/
    Un fichier texte est généralement un fichier séquentiel. Il n'est pas possible de modifier directement un fichier séquentiel existant, quel que soit le langage et quel que soit le logiciel. Si ce que tu voudrais ajouter est plus long que ce que tu voudrais enlever, tu perdrais des morceaux du fichier. Donc, ça ne fonctionne pas comme ça, et ce n'est (fort heureusement) pas possible.

    Mais il y a des solutions de contournement.

    Une première technique consiste à ouvrir un fichier en entrée et un fichier en sortie. Tu lis dans le fichier en entrée et écris dans le fichier en sortie. C'est à peu près ce que j'avais brièvement montré dans mon exemple ci-dessus. Si besoin, tu renommes les deux fichiers après coup (et après les avoir fermés tous les deux).

    Une deuxième technique consiste à charger tout le fichier en mémoire, faire les modifications en mémoire, puis remplacer le fichier avec ce qu'il y a en mémoire. C'est ce qui se passe en coulisses quand tu édites un fichier avec un éditeur ou un traitement de texte. Mais comme tu es débutante, je ne te conseille pas vraiment cette méthode qui peut être un peu délicate.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Expression régulière pour supprimer des doublons
    Par cbroissa dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2017, 01h59
  2. [RegEx] Expression régulière pour trouver des mots
    Par cbroissa dans le forum Langage
    Réponses: 7
    Dernier message: 26/05/2006, 23h39
  3. [RegEx] Simple expression régulière pour ereg_replace
    Par aurapp dans le forum Langage
    Réponses: 6
    Dernier message: 12/03/2006, 12h34
  4. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00
  5. Expression Régulière pour float
    Par zebiloute dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 14h03

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