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 :

"scan" de texte et afficher les mots manquants


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Informatique
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut "scan" de texte et afficher les mots manquants
    Hello,
    J'ai encore besoin d'aide (j'essaye vraiment de m'améliorer en perl)
    En fait ce que je veux faire, c'est scanner dans un texte tous les mots d'un dictionnaire txt (dico.txt) qui ne sont pas dans ce dernier, et les afficher.
    Le texte est un poème ou un roman ou tout texte écrit dans un fichier .txt
    Par exemple en lancant le script : ./scanne.pl poeme.txt
    Je voudrais affiché tous les mots de "poeme.txt" qui ne sont pas dans le dictionnaire.

    Je fournis le script que j'ai fait (merci à la personne qui m'a aidé à le faire). J'avais l'impression qu'il était bon mais après plusieurs essai, je me suis rendu compte que ça n'allait pas tout à fait

    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
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    open (my $DIC, '<' , '/home/user/Bureau/dico.txt') or die "Impossible d'ouvrir.\n";
     
    my %dic;
    while (<$DIC>) 
    {
    	chomp; 
    	$dic{$_}=1;
    }
     
    close $DIC;
     
    open (my $FILE, '<' , $ARGV[0]) or die "Impossible d'ouvrir le fichier.\n";
     
    $\ = "\n";
    while (<$FILE>) 
    { 
    	chomp; 
    	my @tab = split ("[^a-z0-9_]"); 
       for my $word (@tab) 
    	 {
    		if (not exists $dic{$_})
    		 {
    		 	print $word;
    		 }
        }
    }
    undef $\;
    close $FILE;
    merci d'avance

  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,

    Citation Envoyé par Wanheda Voir le message
    mais après plusieurs essai, je me suis rendu compte que ça n'allait pas tout à fait
    Peux-tu expliquer en quoi ce programme ne fonctionne pas selon tes besoins?

    Il y a un certain nombre de choses que je n'écrirais pas comme tu l'as fait, mais il me semble que ce programme devrait plus ou moins faire ce que tu désires.

    Les changements vraiment importants à faire pour moi sont les suivants.

    Je réécrirais le split en mots individuels comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @tab = split /[^A-Za-z0-9_]+/, $_;
    ou, plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @tab = split /\W+/, $_;
    Lors de l'impression des mots non trouvés, j'ajouterais une nouvelle ligne:
    ou au minimum un caractère d'espacement:
    pour séparer les résultats individuels.

  3. #3
    Membre averti
    Homme Profil pro
    Informatique
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut
    En fait mon programme affiche tous les mots de "poeme.txt" (mon $ARGV[0]) alors que je veux qu'il affiche tous les mots qui ne sont pas dans "dico.txt".

    du coup quand je lance ./scan.pl poeme.txt , les mots qui s'affichent sont ceux de "poeme.txt"

    Par exemple si j'ajoute un mot dans "poeme.txt" qui est présent dans "dico.txt", il est affiché par le "print $word"

  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,

    je soupçonne un problème de format de données (incompatibilité entre retours chariot Linux et Windows, par exemple), probablement dans le fichier dico.txt.

    Peux-tu mettre ton fichier dico.txt en pièce jointe pour que nous puissions tester ton programme?

    Ou essayer de remplacer ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %dic;
    while (<$DIC>) 
    {
    	chomp; 
    	$dic{$_}=1;
    }
    par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my %dic;
    while (<$DIC>) 
    {
    	s/[\r\n]+//g;
    	$dic{$_}=1;
    }

  5. #5
    Membre averti
    Homme Profil pro
    Informatique
    Inscrit en
    Mai 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Informatique

    Informations forums :
    Inscription : Mai 2017
    Messages : 19
    Par défaut
    J'ai dû le compresser

    dico.txt.tar.gz

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

    je pense que c'est bien un problème de fins de lignes Windows non correctement reconnues par Perl sous Linux dans le fichier dictionnaire.

    Ré-essaie avec le fichier suivant modifié:

    dico2.txt.gz

    Ou modifie le code comme je l'ai suggéré:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    my %dic;
    while (<$DIC>) 
    {
    	s/[\r\n]+//g;
    	$dic{$_}=1;
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/03/2012, 12h09
  2. [html] Modifier du texte (sans afficher les balises)
    Par Alexino2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/07/2006, 16h43

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