occurrenc d'un mot dans un fichier

occurrenc d'un mot dans un fichier - Perl - Programmation

Marsh Posté le 02-12-2018 à 21:20:01    

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

Reply

Marsh Posté le 02-12-2018 à 21:20:01   

Reply

Marsh Posté le 03-12-2018 à 18:28:50    

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!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-12-2018 à 08:24:19    

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. }

Reply

Marsh Posté le 04-12-2018 à 08:25:38    

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. }

Reply

Marsh Posté le 04-12-2018 à 08:39:20    

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

Reply

Marsh Posté le 04-12-2018 à 16:21:58    

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!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed