Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
2108 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  occurrenc d'un mot dans un fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

occurrenc d'un mot dans un fichier

n°2325269
rim_enis
j'aime ENIS
Posté le 02-12-2018 à 21:20:01  profilanswer
 

Bonjour,
 
mon objectif est de calculer l'occurrence d'un ensemble des mots ( se trouvant dans un fichier keywords.txt )  dans un fichier nommé search.txt'
voici le code que j'ai essayé  
[perl]
#!usr/bin/perl
use strict;
use warnings;
 
#Lexical variable for filehandle is preferred, and always error check opens.
open my $keywords,    '<:utf8', 'keywords.txt' or die "Can't open keywords: $!";
 
 
 
open my($file), '<', 'search.txt';
 
 
my %words;   # hachage de compteurs
 
while (my $word = <$keywords> ) {
    chomp $word;
next if $word =~ /^\s*$/;  
    $words{$word} = 0;
}
close $keywords;
 
my %freq;
#Afficher le fichier  
while( my $line = <$file> ) {
        chomp($line) ;
 
foreach my $word (split(' ', $line)) {
         $freq{$word}++;
 
     }
}
#Afficher les mots en ordre
foreach my $word (sort keys %freq) {
print "$word $freq{$word}\n";
}
[/perl]
 
mais le code calcule la fréquence d'apparition des mots se trouvant dans search.txt' alors comment je peux faire un match pour calculer la fréquence d'apparition des mots se trouvant dans keywords.txt
search.txt ==>
 red green yellow blue red
red red yellow
yellow green blue blue green
green red
 
keywords.txt ==>
red
green
blue
Merci beaucoup d'avance

mood
Publicité
Posté le 02-12-2018 à 21:20:01  profilanswer
 

n°2325320
gilou
Modérateur
Modzilla
Posté le 03-12-2018 à 18:28:50  profilanswer
 

J'ai pas testé mais je ferais
1)  
while (my $word = <$keywords> ) {
    chomp $word;
next if $word =~ /^\s*$/;  
    $words{$word} = 1;
}  
2)
$freq{$word}++ if $words{$word};  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2325348
rim_enis
j'aime ENIS
Posté le 04-12-2018 à 08:24:19  profilanswer
 

Bonjour,
Merci beaucoup pour votre réponse,  
 
j'ai modifié le code mais le résultat est faux , pouvez vous m'aider à résoudre le problème  

Code :
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open my $keywords,    '<:utf8', 'keywords.txt' or die "Can't open keywords: $!";
  5. open my $search_file, '<:utf8', 'search.txt'   or die "Can't open search file: $!";
  6. open my($file), '<', 'search.txt';
  7. my %words;   # hachage de compteurs
  8. while (my $word = <$keywords> ) {
  9.    chomp $word;
  10. next if $word =~ /^\s*$/;  
  11.    $words{$word} = 1;
  12. }  
  13. close $keywords;
  14. my %freq;
  15. while( my $word = <$file> ) {
  16. $freq{$word}++ if $words{$word};  
  17. }
  18. foreach my $word ( keys %words) {
  19. print "$word $freq{$word}\n";
  20. }

n°2325349
rim_enis
j'aime ENIS
Posté le 04-12-2018 à 08:25:38  profilanswer
 

Bonjour,
Merci beaucoup pour votre réponse,  
 
j'ai modifié le code mais le résultat est faux , pouvez vous m'aider à résoudre le problème  

Code :
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;
  4. open my $keywords,    '<:utf8', 'keywords.txt' or die "Can't open keywords: $!";
  5. open my $search_file, '<:utf8', 'search.txt'   or die "Can't open search file: $!";
  6. open my($file), '<', 'search.txt';
  7. my %words;   # hachage de compteurs
  8. while (my $word = <$keywords> ) {
  9.    chomp $word;
  10. next if $word =~ /^\s*$/;  
  11.    $words{$word} = 1;
  12. }  
  13. close $keywords;
  14. my %freq;
  15. while( my $word = <$file> ) {
  16. $freq{$word}++ if $words{$word};  
  17. }
  18. foreach my $word ( keys %words) {
  19. print "$word $freq{$word}\n";
  20. }

n°2325351
rim_enis
j'aime ENIS
Posté le 04-12-2018 à 08:39:20  profilanswer
 

Bonjour,
Merci beaucoup pour votre réponse,  
 
j'ai modifié le code  

Code :
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. #Lexical variable for filehandle is preferred, and always error check opens.
  6. open my $keywords,    '<:utf8', 'keywords.txt' or die "Can't open keywords: $!";
  7. open my $search_file, '<:utf8', 'search.txt'   or die "Can't open search file: $!";
  8. open my($file), '<', 'search.txt';
  9. my %words;   # hachage de compteurs
  10. while (my $word = <$keywords> ) {
  11.    chomp $word;
  12. next if $word =~ /^\s*$/;
  13.    $words{$word} = 0;
  14. }
  15. close $keywords;
  16. my %freq;
  17. while( my $line = <$file> ) {
  18. foreach my $word (split(' ', $line)) {
  19.         $freq{$word}++;
  20.     }
  21. }
  22. foreach my $word (sort keys %freq) {
  23. print "$word $freq{$word}\n";
  24. }


 
j'ai ce message : Use of uninitialized value in concatenation (.) lorsque un mot dans keywords.txt  n'existe pas dans search.txt

n°2325402
gilou
Modérateur
Modzilla
Posté le 04-12-2018 à 16:21:58  profilanswer
 

Citation :

$words{$word} = 0;


C'est sur que si tu appliques pas ce que je dis...
 
Moi, j'ai pris ce code, j'ai reporté ce que j'ai dit:

Code :
  1. #!usr/bin/perl
  2. use strict;
  3. use warnings;
  4.  
  5. #Lexical variable for filehandle is preferred, and always error check opens.
  6. open my $keywords,    '<:utf8', 'keywords.txt' or die "Can't open keywords: $!";
  7. open my $search_file, '<:utf8', 'search.txt'   or die "Can't open search file: $!";
  8. open my($file), '<', 'search.txt';
  9. my %words;   # hachage de compteurs
  10. while (my $word = <$keywords> ) {
  11.    $word=~s/^\s+|\s+$//; # changé, parce que tu as plus d'un blanc a la suite de tes mots
  12.    next if $word =~ /^$/;
  13.    $words{$word} = 1;
  14. }
  15. close $keywords;
  16. my %freq;
  17. while( my $line = <$file> ) {
  18.    foreach my $word (split(' ', $line)) {
  19.     $freq{$word}++ if $words{$word};  ;
  20.    }
  21. }
  22. foreach my $word (sort keys %freq) {
  23.    print "$word $freq{$word}\n";
  24. }


et ça marche.

C:\perl>perl enis.pl
blue 3
green 4
red 5


A+,


Message édité par gilou le 04-12-2018 à 16:42:39

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  occurrenc d'un mot dans un fichier

 

Sujets relatifs
Fichier JSON to stringNotification sur smartphone quand un fichier sur PC est modifié
Lecteur audio et fichier acentué[DEBUTANT] Condition pour ouvrir un fichier ne fonctionne pas
Tester si la chaine de caractère mène a un dossier ou un fichierVBA : Autoriser modifications à l'ouverture d'un fichier
paramétre dans un fichier de confMacro copier-coller d'un fichier vers un autre
Déplacer plusieurs fichier en ajoutant la dateLecture d'un fichier sur pyzo
Plus de sujets relatifs à : occurrenc d'un mot dans un fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR