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/ //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;
}