script perl pour remplacement des chiffre en mots

script perl pour remplacement des chiffre en mots - Perl - Programmation

Marsh Posté le 11-04-2017 à 12:55:18    

Bonjour ,  
 
je suis débutante en perl , mon script doit lire un fichier dictionnaire de la forme  
10 je  
11 parle
12 elle
et puis lire un autre fichier de la forme  
 
10 11  
12 11
 
 et remplacer dans ce dernier chaque nombre avec le mot correspondant dans le premier fichier  
 
le resultat est alors  
 
je parle
elle parle
 
j'ai quelques idées je pense a mettre le contenu du fichier dictionnaire dans une liste puis comparer la liste avec le 2ieme fichier  
 
#!/usr/bin/perl
use strict;
use warnings;
 use autodie;
use Tie::File;
my $filename2 = 'fich1.txt';
open(my $fh1, $filename2)
  or die "Could not open file '$filename2' $!";  
 my @binbre;
    foreach (<$fh1> ) {
      chomp;
       s/[\(\)]//g ;      
      s/^\d+|\d+$//g;
      push @binbre, $_;
print ;
    }
    close $fh1;
my $filename = 'fich2.txt';
open(my $fh, $filename)
  or die "Could not open file '$filename' $!";
 
my @rows = <$fh>;
chomp @rows;
foreach my $row (@rows) {
 if ($row = $binbre)
  {$row =~ s/$row/@binbre/g;}
 
#print "$row\n";
}
 
close $fh ;
 
 
voila mon essai mais ca donne pas le résultat souhaité  
helpppp
 
 

Reply

Marsh Posté le 11-04-2017 à 12:55:18   

Reply

Marsh Posté le 11-04-2017 à 17:12:24    

1) utiliser Tie::File que lorsque c'est au point car ça modifie ton fichier de test
2) utiliser non pas une liste, mais un hash (surtout que au vu de tes données, c'est évident)
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-04-2017 à 18:18:34    

ing8845 a écrit :

voila mon essai mais ca donne pas le résultat souhaité

Ca ne compile (on dit ça pour le Perl? gilou?) même pas...
>Global symbol "$binbre" requires explicit package name
Tu devrais revoir comment utiliser les tableaux (array).
 
Comme disais gilou un hash c'est evident ici vu les données. Comme tu indiques être étudiante je suppose que c'est un exercice, donc aucun intérêt qu'on (gilou ou moi) te présente une solution toute faite.
 
edit:  
>my @rows = <$fh>;
Inutile de lire tout le fichier en une seule fois, il vaut mieux faire un traitement ligne par ligne.


Message édité par rat de combat le 11-04-2017 à 18:19:29
Reply

Marsh Posté le 11-04-2017 à 18:26:54    

merci pour la réponse mais je ne sais pas comment utilisé un hash pouvez vous me fournir un exemple  

Reply

Marsh Posté le 11-04-2017 à 18:30:55    

en faite ce n'est pas un exercice  c'est un projet de master j'ai un fichier dictionnaire et l'autre ce sont des séquence d'item fréquent extraites d'un corpus .
j'ai simplifié le truc pasque si ca marche je le généralise

Reply

Marsh Posté le 11-04-2017 à 18:59:52    

ing8845 a écrit :

merci pour la réponse mais je ne sais pas comment utilisé un hash pouvez vous me fournir un exemple  

Désolé: RTFM.
 

ing8845 a écrit :

en faite ce n'est pas un exercice  c'est un projet de master j'ai un fichier dictionnaire et l'autre ce sont des séquence d'item fréquent extraites d'un corpus .
j'ai simplifié le truc pasque si ca marche je le généralise

C'est quoi comme master, en lien avec la programmation?

Reply

Marsh Posté le 11-04-2017 à 19:02:55    

mon sujet porte sur la recherche d'information . On analyse des corpus de texte pour mieux répondre aux requêtes pausé par les utilisateurs .

Reply

Marsh Posté le 11-04-2017 à 20:27:43    

slt !
j'ai changé la méthode mais encore ca ne me donne pas de resultat  je ne sais pas comme utiliser le hash  
open (AFILE, "fich1.txt" ) or die "unable to open file $!";
my @acon=<AFILE>;
close (AFILE);
 
open (BFILE, "< fich2.txt" ) or die "unable to open file $!";
my $bcon=join("",<BFILE> );
close (BFILE);
 
foreach my $match (@acon)
   {
 my ($num,$item)=split(/ /,$match);
 #print "test: $bcon\n";
 
        if($bcon=~m/$num(.*?)\n/i)
 {            
  my $nmatch=$&;
  my ($num)=split(/ /,$nmatch);
                $bcon =~ s/$bcon/@item/g;
  print "$item ";
   
 }
 
   }

Reply

Marsh Posté le 11-04-2017 à 21:21:13    

Citation :

je ne sais pas comme utiliser le hash  

Excuse moi mais un étudiant (h/f) en master devrait largement être capable d'utiliser un moteur de recherche. :o En principe on peut aussi faire ça avec un tableau (array) mais tu les utilises mal, il faut lire la doc ou un livre sur le Perl5.

 

edit: Je suppose que la date de naissance indiquée dans ton profil est fausse? (Ce que je peux comprendre.) Ca ne colle pas vraiment avec le master...


Message édité par rat de combat le 11-04-2017 à 21:22:34
Reply

Marsh Posté le 11-04-2017 à 21:39:43    

je comprends pas votre question !!  
j'ai demandé de l'aide car je suis débutante en perl et je suis pressé par le temps..  vous avez pas la réponse souhaité merci de ne pas sortir du contexte de ma question!!!
 

Reply

Marsh Posté le 11-04-2017 à 21:39:43   

Reply

Marsh Posté le 11-04-2017 à 22:35:43    

Quelle question? Mon edit c'est juste par curiosité, rien ne t'obliges de répondre.

 

Pour le reste, les forums (ou en tout cas celui-ci) ne sont pas là pour enseigner des bases ni pour faire le boulot des gens (cf. règlement) mais pour répondre à des questions concrètes et précises. Tu peux très bien faire ce que tu veux faire avec un tableau/array mais comme je l'ai déjà dit deux fois il faut l'utiliser correctement et ça ce n'est pas le boulot du forum de te l'apprendre. Il y a une doc qui va avec Perl et on trouve certainement pleins de tutoriels aussi. Et puis je suppose que si tu utilises ce language c'est soit parce que tu es obligé et que tu as eu des cours avant (et donc tu devrais savoir comment utiliser les array et hash) soit ça fait partie de ton projet de l'apprendre, dans ce cas c'est à toi de faire un effort... Le manque de temps n'est pas un argument non plus, ça ne tombe pas du ciel ça généralement. Le forum est là pour apporter de l'aide sur des points précis et ça a été fait, gilou t'as indiqué une meilleure méthode de faire et je t'ai dit que tu dois revoir les array.


Message édité par rat de combat le 11-04-2017 à 22:37:27
Reply

Marsh Posté le 12-04-2017 à 16:21:40    

J'ai code cela vite fait pendant ma pause café parce que j'ai autre chose a faire, donc je n'ai pas testé, mais une solution devrait ressembler a ceci:

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. open (my $fh, "<", "fich1.txt" );
  7. my %hash;
  8. while (<$fh> ) {
  9.    if (/^\s*(\d+)\s+(.*\S)\s*$/) {
  10.        $hash{$1}=$2;
  11.    }
  12. }
  13. close $fh;
  14. # maintenant %hash est un dictionnaire, de clés les codes numériques, et valeurs les mots associés.
  15. open ($fh, "<", "fich2.txt" );
  16. while (<$fh> ) {
  17.    if (/^\s*((\d+)\s+)*\d+\s*$/) {
  18.    my @line = split(/\s+/, $_);
  19.    foreach (@line) {
  20.        print $hash{$_}, " ";
  21.    }
  22.    print "\n";
  23.    }
  24. }
  25. close $fh;


Ça doit envoyer le résultat a la console.
 
A+,


Message édité par gilou le 12-04-2017 à 16:27:49

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-04-2017 à 20:05:33    

merci infiniment gilou c'est très gentil de votre part  

Reply

Sujets relatifs:

Leave a Replay

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