Substitution en Perl

Résolu
bonjour à tous,
je suis en plein projet pour l'école et je programme en perl
j'ai un soucis au niveau d'une substitution
je vous explique
je récupère un texte dans une variable $corps
j'ai une liste de mots dans @listemotsvides
et je dois supprimer les mots de la liste dans le texte
j'ai donc fait ca :

sub vide($corps){
open(texte2,"<motsvides2.txt") or die"pb";

while($t=<texte2>){
#tableau de mots vides
push(@listemotsvides,$t);
}

close (texte2);
#La fonction vide permet de supprimer les mots vides
foreach $element(@listemotsvides){

$corps=~s/{element}//g;
#$corps=~s/[a-z]*ait//g;
}
}

et dans mon programme j'appelle ma fonction:
vide($corps);

et je comprends pas pourquoi ca ne supprime pas les mots
merci d'avance pour votre réponse

nanou
Configuration: Windows XP
Internet Explorer 6.0

29 réponses

Résumé de la discussion

Un utilisateur cherche à supprimer des mots d'un texte en Perl en utilisant une liste de mots vides chargée depuis un fichier motsvides.txt. Plusieurs réponses montrent comment lire le fichier dans @listemotsvides et appliquer $corps =~ s/$_//g pour chaque élément, afin de retirer les mots correspondant. La démonstration fournit un exemple avec avant/après et affiche les mots supprimés, ce qui illustre le fonctionnement malgré l'absence initiale de délimiteurs. En version plus robuste, certains proposent d'utiliser des délimiteurs de mots et d'échapper les caractères des mots, ou d'encapsuler la substitution dans une fonction réutilisable.

Bobot (l’IA à votre service)
  1. je viens de me rendre compte d'une erreur dans la substitution c'est $element mais ca change rien à mon résultat
    0
    1. Modérateur
      je vois que les mots tu les récuperes depuis un fichier

      C'est quoi la structure de ce fichier?
      un mot par ligne?
      plusieurs mots pas ligne?

      Ce n'est pas comme ça qu'on écrit une procécure
      sub vide($corps){

      mais
      sub vide {
         $coprs=shift;


      0
      1. ah bon? ok c c'est une fille de ma classe qui m'a dit de faire comme ca
        euh ouai dans mon fichier j'ai un mot par ligne

        voilà
        0
    2. Modérateur
      lami20j@debian:~/trash$ cat motsvides.txt
      liste
      je
      vous
      plein
      texte
      lami20j@debian:~/trash$ cat substitution.pl
      #!/usr/bin/perl
      #
      open F_MOTS, "motsvides.txt" or die "E/S : $!\n";
      
      my @listemotsvides;
      
      push @listemotsvides,$_ while (<F_MOTS>);
      map { chomp } @listemotsvides;
      
      my $corps =
      q{bonjour à tous,
         je suis en plein projet pour l'école et je programme en perl
         j'ai un soucis au niveau d'une substitution
         je vous explique
         je récupère un texte dans une variable $corps
         j'ai une liste de mots dans @listemotsvides
         et je dois supprimer les mots de la liste dans le texte
         j'ai donc fait ca};
      
      print "AVANT\n-----\n$corps";
      $corps =~ s/$_//g for @listemotsvides;
      print "\n\n-----APRES-----\nLes mots supprimés sont : @{[ sort @listemotsvides ]}\n";
      print "-" x 15 . "\n$corps\n";
      __END__
      
      Le résultat
      lami20j@debian:~/trash$ perl substitution.pl
      AVANT
      -----
      bonjour à tous,
         je suis en plein projet pour l'école et je programme en perl
         j'ai un soucis au niveau d'une substitution
         je vous explique
         je récupère un texte dans une variable $corps
         j'ai une liste de mots dans @listemotsvides
         et je dois supprimer les mots de la liste dans le texte
         j'ai donc fait ca
      
      -----APRES-----
      Les mots supprimés sont : je liste plein texte vous
      ---------------
      bonjour à tous,
          suis en  prot pour l'école et  programme en perl
         j'ai un soucis au niveau d'une substitution
           explique
          récupère un  dans une variable $corps
         j'ai une  de mots dans @motsvides
         et  dois supprimer les mots de la  dans le
         j'ai donc fait ca
      

      0
      1. ca marche pas !! snif snif
        ca me donne des caractères chelou
        pffffff j'en ai marre
        quand je fais afficher la liste des mots c 'est bon j'ai les bons mots
        mais quand je veux afficher $corps ca me donne des trucs bizars
        et pas du tout mon texte
        0
        1. j'ai fait ca
          sub vide{
          my $corps=shift;
          open(texte2,"<motsvides2.txt") or die"pb";

          my @listemotsvides;

          push @listemotsvides,$_ while(<texte2>);
          map { chomp } @listemotsvides;
          #print "@listemotsvides";
          $corps =~ s/$_//g for @listemotsvides;
          print "$corps\n";
          close (texte2);
          }

          alors peut etre que j'ai mal retransrit ton code mais bon ca marche pas stp encore un peu d'aide merki
          0
          1. Modérateur
            #!/usr/bin/perl
            #
            my $corps = q{bonjour à tous,
               je suis en plein projet pour l'école et je programme en perl
               j'ai un soucis au niveau d'une substitution
               je vous explique
               je récupère un texte dans une variable $corps
               j'ai une liste de mots dans @listemotsvides
               et je dois supprimer les mots de la liste dans le texte
               j'ai donc fait ca};
            
            
            
            sub vide{
              my $res=shift;
              open F_MOTS, "motsvides.txt" or die "E/S : $!\n";
            
              my @listemotsvides;
            
              push @listemotsvides,$_ while(<F_MOTS>);
              map { chomp } @listemotsvides;
              $res =~ s/\b$_\b//g for @listemotsvides;
              print "$res\n";
              close (F_MOTS);
            }
            
            vide($corps);
            __END__
            
            0
            1. bon bah je sais pas ce qu'il y a mais ca marche pas
              ca me renvoie plus rien maintenant
              0
          2. Modérateur
            Ecoute chez moi ça marche.

            Dit moi, tu es sur quel OS?
            Comment tu lances le script?

            Je l'ai testé sous Linux et Windows donc je ne vois pas où est le problème.

            0
            1. euh c'est quoi un OS?
              je suis sous unix et je lance mon prgramme en faisant
              perl executv13.pl .... et tous les arguments car je crée plein de fichiers

              je suis désolée d'etre si relou
              0
          3. Modérateur
            OperatingSystem

            perl executv13.pl .... et tous les arguments car je crée plein de fichiers

            le script ne traite pas des arguments, tu ne l'as pas dit
            c'est juste un exemple, donc il faut l'exécuter tel quel sans arguments

            A savoir qu'il lit les mots dans le fichier motsvides.txt
            Donc crée un fichier motsvides.txt est dédans écrit

            liste
            je
            vous
            plein
            texte

            ensuite exécute le script avec
            perl script.pl
            et je t'assure que ça marche

            en revanche si tu veux utiliser des arguments il faut préciser en détails ce que tu veux faire (bien sûr si tu veux que je t'aide :-))

            0
            1. non mais en fait le problème que j'ai c'est seulement sur un bout de mon programme car il est beaucou p plus long c'est pour ca que je te dis que j'ai des arguments
              et je veux bien te croire que ca fonctionne mais moi ca merde chez moi ...
              doncje sais plus quoi faire et ca me rend barge !!!!
              0
              1. Modérateur
                Je ne comprends pas.

                je suppose que tu as ajouté le bout de code dans ton script et il ne fonctionne pas.

                comme je te l'ai déjà dit, exécute seulement le bout de conde que je t'ai donnée en oubliant ce que tu as

                et fait comme moi, affiche ici ce que tu exécute (ET UTILISE LES BALISES CODE)

                tu peux afficher ton script.
                N'aie pas peur, je ne vais pas voler ton travail :-) j'ai d'autre chose à faire
                Si tu veux que je t'aide, alors aide moi ;-)
                0
                1. bon alors j'ai fait ca :

                  #!/usr/local/bin/perl
                  #
                  my $corps = q{bonjour à tous,
                  je suis en plein projet pour l'école et je programme en perl
                  j'ai un soucis au niveau d'une substitution
                  je vous explique
                  je récupère un texte dans une variable $corps
                  j'ai une liste de mots dans @listemotsvides
                  et je dois supprimer les mots de la liste dans le texte
                  j'ai donc fait ca};

                  sub vide{
                  my $res=shift;
                  open F_MOTS, "motsvides2.txt" or die "E/S : $!\n";

                  my @listemotsvides;

                  push @listemotsvides,$_ while(<F_MOTS>);
                  map { chomp } @listemotsvides;
                  $res =~ s/\b$_\b//g for @listemotsvides;
                  print "$res\n";
                  close (F_MOTS);
                  }

                  vide($corps);
                  __END__

                  et j'obtiens ca un truc qui a l'air de fonctionner mais je peux pas le copier ici

                  alors comment ca se fait que ca marche pas dans mon programme?

                  je veux bien te coller mon programme mais il est long :

                  #pour exécuter ce fichier :
                  # perl executv13.pl Docs posting.txt index.txt ../CODESQL/insertion.sql ../CODESQL/tfidf.sql ../CODESQL/insert.sql ../CODESQL/rappel.sql

                  #!/usr/local/bin/perl

                  #on lit d'abord le fichier des mots vides

                  #ensuite on fait les traitements sur les textes
                  #on ouvre le répertoire
                  $D=$ARGV[0];
                  opendir(D,$ARGV[0]);
                  @docs=readdir(D);
                  #on enlève de la liste des documents les . et ..
                  shift(@docs);
                  shift(@docs);

                  #tablo est le tableau des fréquences de chaque terme pour un document donné.
                  #tablo2 correspond au nombre de documents où apparait un terme d'indexation de la collection.
                  %tablo1=();
                  %tablo2=();
                  %tablo3=();
                  %tablo4=();
                  $ins=0;
                  $u=0;

                  #on ouvre en écriture le fichier posting
                  open(posting,">$ARGV[1]");
                  open(insertion,">$ARGV[3]");
                  foreach $fichier(@docs){
                  #on ouvre en lecture le fichier du répertoire Docs
                  $num=0;
                  open(texte,$ARGV[0]."/$fichier") or die"pb";
                  %tablo=();
                  while(@t=<texte>){
                  chomp(@t) ;
                  $t=join('',@t) ;
                  #on met tout en minuscules
                  $t=~tr/A-Z/a-z/;
                  accent($t);
                  caracteres($t);

                  if ($t=~/<meta name="Author" +content="([^"]*)">/){
                  $auteur=$1;
                  $auteur=~ s/,/ /g;
                  #print "auteur = $auteur\n\n" ;
                  $auteur=~ s/'/ /g;
                  }

                  if ($t=~/<address>([^<]*)<\/address>/){
                  $URL=$1;
                  #print "URL = $URL\n\n" ;
                  }

                  if ($t=~/<title>([^<]*)<\/title>/){
                  $titre=$1;
                  $titre=~ s/'/ /g;
                  #print "titre = $titre\n\n" ;
                  }

                  if ($t=~/<body[^>]*>(.*?)<\/body>/){
                  my $corps=$1;
                  #print "corps = $corps\n\n" ;
                  }

                  if ($auteur ne ""){
                  $longueur=@tablo1;
                  #print "$auteur\n";
                  while ($tablo1[$num] ne $auteur && $num<$longueur){
                  $num=$num+1;
                  #print "le num est $num\n";
                  }
                  if ($num!=$longueur){
                  $num=$num+1;
                  print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n
                  INSERT INTO DocAuteurs VALUES ('$fichier',$num);\n");
                  }else{
                  $tablo1[$num]=$auteur;
                  $num=$num+1;
                  print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n
                  INSERT INTO Auteurs VALUES ($num,'$auteur');\n
                  INSERT INTO DocAuteurs VALUES ('$fichier',$num);\n");

                  }}else{
                  print insertion ("INSERT INTO Documents VALUES ('$fichier','$titre','$URL',1);\n");
                  }
                  #print ("@tablo1\n");
                  #print insertion ("insert into Documents(Titre, URL, Id_collec) values ($titre, $URL, 1);\n
                  #insert into Auteurs(Nom) values ($auteur);\n");

                  balises($corps);
                  separateur($corps);
                  vide($corps);

                  #on met les termes d'indexation dans une liste
                  @liste=split(", ",$corps);
                  #print(@liste);
                  shift(@liste);

                  #on calcule les fréquence de chaque terme
                  foreach $element(@liste){
                  $tablo{substr($element,0,7)}+=1;
                  }
                  }

                  foreach $cle(keys(%tablo)){
                  #on remplit le fichier posting
                  if($tablo{$cle}<($u*0.67) && length($cle)>3){
                  print posting ("$cle \t $fichier \t $tablo{$cle}\n");
                  }
                  $tablo3[$i]=$fichier;
                  if($tablo3[$i-1] ne $tablo3[$i]) {
                  $u=$u+1;}
                  $i=$i+1;

                  #on crée le tableau qui nous permettra d'afficher l'index
                  if($tablo{$cle}>0 && $cle ne ""){
                  $tablo2{$cle}+=1;
                  }
                  }
                  }
                  close(posting);
                  close (insertion);

                  #on crée notre fichier index
                  open(ind,">$ARGV[2]");
                  foreach $cle(keys(%tablo2)){
                  if($tablo2{$cle}<($u*0.67) && length($cle)>3){
                  print ind ("$cle \t $tablo2{$cle}\n");}
                  }
                  close (texte);
                  close (ind);

                  open(posting,"posting.txt");
                  my @contenu=<posting>;
                  #On récupère tout le contenu du fichier posting dans la liste contenu
                  close(posting);

                  open(tfidf,">$ARGV[4]");
                  foreach (@contenu){
                  my @datas= split(/\t/, $_);
                  #On sépare les colonnes du fichier posting que l'on entre dans datas
                  $datas[0]=~s/ //g;
                  #On supprime les espaces de la première colonne du fichier posting
                  $datas[2]=~s/\n//g;
                  $datas[1]=~s/ //g;
                  #On supprime les retours à la ligne de la troisième colonne du fichier posting
                  $div=$u/$tablo2{$datas[0]};
                  $log=log($div);
                  $tfidf=$datas[2]*$log;
                  #On calcule grâce aux données que nous avons récupérées le tf*idf
                  $k=$k+1;
                  print tfidf ("INSERT INTO Termes (Nterme,Terme) VALUES ($k,'$datas[0]'); \n
                  INSERT INTO IndexDoc(Nterme,Ndoc,freq,poids) VALUES ($k,'$datas[1]',$datas[2],$tfidf);\n");

                  #On insère dans un fichier tfidf les commandes nécessaires aux insertions dans la table Termes
                  #et dans la table Temp qui nous sert d'intermédiaire pour les insertions dans la table IndexDoc
                  }
                  close(tfidf);

                  open(insert,">$ARGV[5]");
                  print insert ("INSERT INTO CollecDoc (Id_collec,Theme,Nb_doc) VALUES (1,'Maladies génétiques',$u);\n ");
                  #On insère dans la table CollecDoc les informations sur notre collection de documents
                  close(insert);

                  open(rappel,">$ARGV[6]");
                  $m=0;
                  while($m<1)
                  {print rappel ("INSERT INTO RepriseFixe (point) VALUES ($m);\n");
                  $m=$m+0.1;
                  #On insère dans la table RepriseFixe les points de reprise
                  }
                  close(rappel);

                  sub separateur{
                  $corps=shift;
                  #La fonction separateur permet de remplacer tous les séparateurs du corps des documents par des virgules
                  $corps=~s/<!--/, /g;
                  $corps=~s/ /, /g;
                  $corps=~s/«/, /g;
                  $corps=~s/»/, /g;
                  $corps=~s/%/, /g;
                  #$corps=~s/ /, /g;
                  $corps=~s/,/, /g;
                  $corps=~s/\./, /g;
                  $corps=~s/;/, /g;
                  $corps=~s/:/, /g;
                  $corps=~s/!/, /g;
                  $corps=~s/\?/, /g;
                  $corps=~s/\(/, /g;
                  $corps=~s/\)/, /g;
                  $corps=~s/\[/, /g;
                  $corps=~s/\]/, /g;
                  $corps=~s/\$/, /g;
                  $corps=~s/\+/, /g;
                  $corps=~s/\*/, /g;
                  #$corps=~s/-/, /g;
                  $corps=~s/\n/, /g;
                  $corps=~s/\t/, /g;
                  $corps=~s/\r/, /g;
                  $corps=~s/\//, /g;
                  $corps=~s/"/, /g;
                  $corps=~s/\^/, /;
                  $corps=~s/\'/, /g;
                  $corps=~s/=/, /g;
                  $corps=~s/#/, /g;
                  $corps=~s/-/, /g;
                  $corps=~s/</, /g;
                  $corps=~s/>/, /g;
                  $corps=~s/’/, /g;
                  $corps=~s/{/, /g;
                  $corps=~s/}/, /g;
                  $corps=~s/\|/, /g;
                  $corps=~s/ – /, /g;
                  #pour supprimer les vides
                  $corps=~s/(, )[, ]+/$1/g;
                  }

                  sub accent{
                  $t=shift;
                  #La fonction accent permet de remplacer les lettres à accents par ces mêmes lettres sans accents
                  $t=~s/é/e/g;
                  $t=~s/è/e/g;
                  $t=~s/ê/e/g;
                  $t=~s/ë/e/g;
                  $t=~s/ô/o/g;
                  $t=~s/à/a/g;
                  $t=~s/î/i/g;
                  $t=~s/ï/i/g;
                  $t=~s/û/u/g;
                  $t=~s/ù/u/g;

                  $t=~s/â/a/g;
                  $t=~s/ê/e/g;
                  $t=~s/ô/o/g;
                  $t=~s/ç/c/g;

                  $t=~s/É/e/g;
                  $t=~s/È/e/g;
                  $t=~s/À/a/g;
                  $t=~s/Ù/u/g;

                  $t=~s/Á/a/g;
                  $t=~s/Ã/a/g;
                  $t=~s/å/a/g;
                  $t=~s/Â/a/g;
                  $t=~s/Ä/a/g;
                  $t=~s/à/a/g;
                  $t=~s/À/a/g;
                  $t=~s/á/a/g;
                  $t=~s/ã/a/g;
                  $t=~s/Å/a/g;
                  $t=~s/â/a/g;
                  $t=~s/ä/a/g;
                  $t=~s/Ã/a/g;
                  $t=~s/Ã/a/g;
                  $t=~s/Â/a/g;

                  $t=~s/É/e/g;
                  $t=~s/é/e/g;
                  $t=~s/Ê/e/g;
                  $t=~s/ê/e/g;
                  $t=~s/È/e/g;
                  $t=~s/è/e/g;
                  $t=~s/Ë/e/g;
                  $t=~s/ë/e/g;
                  $t=~s/a¨/e/g;
                  $t=~s/a©/e/g;
                  $t=~s/é/e/g;
                  $t=~s/è/e/g;
                  $t=~s/aª/e/g;
                  $t=~s/è/e/g;
                  $t=~s/É/e/g;
                  $t=~s/É/e/g;
                  $t=~s/a‰/e/g;

                  $t=~s/Í/i/g;
                  $t=~s/í/i/g;
                  $t=~s/Î/i/g;
                  $t=~s/î/i/g;
                  $t=~s/Ì/i/g;
                  $t=~s/ì/i/g;
                  $t=~s/Ï/i/g;
                  $t=~s/ï/i/g;
                  $t=~s/ï/i/g;
                  $t=~s/a¯/i/g;

                  $t=~s/Ñ/n/g;
                  $t=~s/ñ/n/g;

                  $t=~s/Ó/o/g;
                  $t=~s/ó/o/g;
                  $t=~s/Ô/o/g;
                  $t=~s/ô/o/g;
                  $t=~s/Ò/o/g;
                  $t=~s/ò/o/g;
                  $t=~s/Ö/o/g;
                  $t=~s/ö/o/g;
                  $t=~s/Õ/o/g;
                  $t=~s/õ/o/g;
                  $t=~s/ô/o/g;
                  $t=~s/a´/o/g;

                  $t=~s/Ú/u/g;
                  $t=~s/ú/u/g;
                  $t=~s/Û/u/g;
                  $t=~s/û/u/g;
                  $t=~s/Ù/u/g;
                  $t=~s/ù/u/g;
                  $t=~s/Ü/u/g;
                  $t=~s/ü/u/g;

                  $t=~s/Ý/y/g;
                  $t=~s/ý/y/g;
                  $t=~s/ÿ/y/g;

                  $t=~s/é/e/g;
                  $t=~s/aˆ/e/g;
                  }

                  sub caracteres{
                  $t=shift;
                  #La fonction caracteres permet de remplacer tous les caractères sépciaux par des blancs ou par les lettres
                  #correspondant a ces caractères
                  $t=~s/[0-9]*//g;
                  $t=~s/&//g;
                  $t=~s/ [a-z] //g;
                  $t=~s/α/ /g;
                  $t=~s/oa¹/ /g;
                  $t=~s/β/ /g;
                  $t=~s/~/ /g;
                  $t=~s/a§/ /g;
                  $t=~s/a®/ /g;
                  $t=~s/a±/ /g;
                  $t=~s/oeœu/oeu/g;
                  $t=~s/oe“/oeu/g;
                  $t=~s/e“u/eu/g;
                  $t=~s/40a€¦/ /g;
                  $t=~s/sβaˆ / /g;
                  $t=~s/aˆ†f/ /g;
                  $t=~s/©/ /g;
                  $t=~s/@/ /g;
                  $t=~s/Ø/ /g;
                  $t=~s/ß/ /g;
                  $t=~s/&nbsp//g;
                  $t=~s/«Â//g;
                  $t=~s/’//g;
                  $t=~s/</ /g;
                  $t=~s/>/ /g;
                  $t=~s/&/ /g;
                  $t=~s/"/ /g;
                  $t=~s/Æ/ae/g;
                  $t=~s/æ/ae/g;
                  $t=~s/©/ /g;
                  $t=~s/Ç/c/g;
                  $t=~s/ç/c/g;
                  $t=~s/ç/c/g;
                  $t=~s/Ð/ /g;
                  $t=~s/°/ /g;
                  $t=~s/_/ /g;

                  $t=~s/ð/ /g;
                  $t=~s/Ø/ /g;
                  $t=~s/ø/ /g;
                  $t=~s/Þ/ /g;
                  $t=~s/þ/ /g;
                  $t=~s/ß/ /g;
                  $t=~s/a\|/ /g;
                  $t=~s/a¢/ /g;
                  $t=~s/a°/ /g;
                  $t=~s/aµ/ /g;
                  $t=~s/a //g;

                  $t=~s/…/oe/g;
                  $t=~s/Å/oe/g;
                  $t=~s/’/ /g;
                  $t=~s/œ/ /g;
                  $t=~s/¡/ /g;
                  $t=~s/¢/ /g;
                  $t=~s/£/ /g;
                  $t=~s/¤/ /g;
                  $t=~s/¥/ /g;
                  $t=~s/¦/ /g;
                  $t=~s/§/ /g;
                  $t=~s/¨/ /g;
                  $t=~s/©/ /g;
                  $t=~s/ª/ /g;
                  $t=~s/«/ /g;
                  $t=~s/¬/ /g;
                  $t=~s/­/ /g;
                  $t=~s/®/ /g;
                  $t=~s/¯/ /g;
                  $t=~s/°/ /g;
                  $t=~s/±/ /g;
                  $t=~s/²/ /g;
                  $t=~s/³/ /g;
                  $t=~s/´/ /g;
                  $t=~s/µ/ /g;
                  $t=~s/¶/ /g;
                  $t=~s/·/ /g;
                  $t=~s/¸/ /g;
                  $t=~s/¹/ /g;
                  $t=~s/º/ /g;
                  $t=~s/»/ /g;
                  $t=~s/¼/ /g;
                  $t=~s/½/ /g;
                  $t=~s/¾/ /g;
                  $t=~s/¿/ /g;
                  $t=~s/×/ /g;
                  $t=~s/Þ/ /g;
                  $t=~s/÷/ /g;
                  $t=~s/’/ /g;

                  # Autres caractères spéciaux :
                  $t=~s/°/ /g;
                  $t=~s/°/°/g;
                  $t=~s/a€™/ /g;
                  $t=~s/©/ /g;}

                  sub vide{
                  my $res=shift;
                  open(texte2,"<motsvides2.txt") or die"pb";

                  my @listemotsvides;

                  push @listemotsvides,$_ while(<texte2>);

                  map { chomp } @listemotsvides;
                  #print "@listemotsvides";
                  $res =~ s/b$_\b//g for @listemotsvides;
                  print "$res\n";
                  close (texte2);
                  }

                  sub balises{
                  $corps=shift;
                  #La fonction balises permet de supprimer toutes les balises
                  $corps=~s/<h1>/ /g;
                  $corps=~s/<select([^<]*)>/ /g;
                  $corps=~s/<!--([^<]*)-->/ /g;
                  $corps=~s/<map([^<]*)>/ /g;
                  $corps=~s/<area([^<]*)>/ /g;
                  $corps=~s/<a ([^<]*)>/ /g;
                  $corps=~s/<span([^<]*)>/ /g;
                  $corps=~s/<cr([^<]*)>/ /g;
                  $corps=~s/<title([^<]*)>/ /g;
                  $corps=~s/<html([^<]*)>/ /g;
                  $corps=~s/<head([^<]*)>/ /g;
                  $corps=~s/<body([^<]*)>/ /g;
                  $corps=~s/<meta([^<]*)>/ /g;
                  $corps=~s/<link([^<]*)>/ /g;
                  $corps=~s/<div([^<]*)>/ /g;
                  $corps=~s/<p([^<]*)>/ /g;
                  $corps=~s/<basefont([^<]*)>/ /g;
                  $corps=~s/<font([^<]*)>/ /g;
                  $corps=~s/<em([^<]*)>/ /g;
                  $corps=~s/<strong([^<]*)>/ /g;
                  $corps=~s/<code([^<]*)>/ /g;
                  $corps=~s/<kbd([^<]*)>/ /g;
                  $corps=~s/<var([^<]*)>/ /g;
                  $corps=~s/<address([^<]*)>/ /g;
                  $corps=~s/<blockquote([^<]*)>/ /g;
                  $corps=~s/<blink([^<]*)>/ /g;
                  $corps=~s/<strike([^<]*)>/ /g;
                  $corps=~s/<script([^<]*)>/ /g;
                  $corps=~s/<listing([^<]*)>/ /g;
                  $corps=~s/<big([^<]*)>/ /g;
                  $corps=~s/<small([^<]*)>/ /g;
                  $corps=~s/<sup([^<]*)>/ /g;
                  $corps=~s/<sub([^<]*)>/ /g;
                  $corps=~s/<i([^<]*)>/ /g;
                  $corps=~s/<b([^<]*)>/ /g;
                  $corps=~s/<tt([^<]*)>/ /g;
                  $corps=~s/<u([^<]*)>/ /g;
                  $corps=~s/<br([^<]*)>/ /g;
                  $corps=~s/<nobr([^<]*)>/ /g;
                  $corps=~s/<wbr([^<]*)>/ /g;
                  $corps=~s/<center([^<]*)>/ /g;
                  $corps=~s/<ul([^<]*)>/ /g;
                  $corps=~s/<li([^<]*)>/ /g;
                  $corps=~s/<ol([^<]*)>/ /g;
                  $corps=~s/<menu([^<]*)>/ /g;
                  $corps=~s/<pre([^<]*)>/ /g;
                  $corps=~s/<hr([^<]*)>/ /g;
                  $corps=~s/<a name([^<]*)>/ /g;
                  $corps=~s/<a href([^<]*)>/ /g;
                  $corps=~s/<img([^<]*)>/ /g;
                  $corps=~s/<table([^<]*)>/ /g;
                  $corps=~s/<caption([^<]*)>/ /g;
                  $corps=~s/<tr([^<]*)>/ /g;
                  $corps=~s/<th([^<]*)>/ /g;
                  $corps=~s/<td([^<]*)>/ /g;

                  $corps=~s/<\/([^<]*)>/ /g;
                  }
                  0
                  1. Modérateur
                    Tu as copié ton script entier?
                    tu peux joindre ton script sur cjoint.com et coller ici l'adresse de lien obtenu.

                    je vais voir ça à la maison en tranquillité

                    par exemple
                    #La fonction caracteres permet de remplacer tous les caractères sépciaux par des blancs ou par les lettres
                    #correspondant a ces caractères


                    et ici tu mets une liste entière quand une seule regex peu faire l'affaire

                    par exemple tous les caractères spéciaux (voir la table ASCII étendue) de C majuscules avec cédille Ç ( ascii 128, hexa 80) jusqu'à (ascii 255, hexa FF) on peut écrire
                    $t =~ s/[x80-xFF]//g;
                    au lieu de tous le listing que tu as utilisé.
                    Donc j'utilise une classe de caractères
                    0
                    1. https://www.cjoint.com/?cunyetu08k

                      voila le lien
                      bon bah ok je te laisse regarder ca mais sache qu'on est pas super douée en programmation dans ma classe et moi en particulier donc peut etre qu'il y a plein de fautes
                      là je dois partir bosser je reviens vers 18h 18h30
                      a plus et merci
                      0
                      1. Modérateur
                        while(@t=<texte>){
                        chomp(@t) ;
                        $t=join('',@t) ;


                        un chomp on le fait sur un scalaire pas un tableau
                        sur un tableau on a pop,push,shift,unshift

                        Et pourquoi sauvegarde le fichier dans un tableau?

                        Tu peux utiliser tout simplement la variable spécial $/ (mode slurp) pour que la variable $t avale le fichier entier

                        local $/;
                        $t=<texte>; # $t contient le fichier entier
                        0
                        1. alors au début on a utilisé des tableaux car on savait pas utiliser les fichiers directement
                          et le slurp je connais pas
                          je sens que tu vas te marrer en lisant le code car c'est plein de bétises
                          0
                          1. me revoilà
                            je ne sais pas si tu as pu regarder ou pas
                            mais si tu as pu se serait vraiment top !!
                            0
                            1. Modérateur
                              Salut,

                              if ($t=~/<body[^>]*>(.*?)<\/body>/){
                              my $corps=$1;
                              #print "corps = $corps\n\n" ;
                              } 

                              je vois que tu as testé avec un print et il me semble que $corps est vide, n'est-ce pas?

                              essaie comme ça
                              if ($t=~/<body[^>]*>(.*)<\/body>/s){
                              my $corps=$1;
                              #print "corps = $corps\n\n" ;
                              } 

                              le métacaractères point . ne reconnaît pas le caractère fin de ligne \n donc il faut utiliser le modificateur de regex /s pour permettre que . reconnaisses \n

                              et pourquoi utilises-tu *? (quantificateur paresseux) ?
                              si tu veux que $t contiennes tous ce qui est compris entre <body> et </body> alors utilise .* (quantificateur gurmand)
                              0
                              1. bon je pige pas
                                le corps n'est pas vide
                                enfin j'ai changé avec ton truc donc ca ca marche
                                mais en fait ma fonction vide me supprime tous les mots du texte donc c'est pas super pratique
                                ca me rend tarée !!!
                                0
                                1. Modérateur
                                  au lieu de
                                  $res =~ s/b$_\b//g for @listemotsvides;

                                  mets
                                  $res =~ s/\b$_\b//g for @listemotsvides; 
                                  0
                                  1. j'avais déjà ca
                                    ca marche toujours pas
                                    en fait $res est vide ...
                                    0
                                    • 1
                                    • 2