Exercices niveau Licence

 

Etape N°5

 

Vous choisirez cinq formes graphiques différentes. Vous construirez ensuite un programme qui prend en entrée un état du corpus et un mot donné.Le résultat de ce programme doit être une concordance de cette forme dans le texte. Vous appliquerez ce programme sur les différents états du corpus.

Resultat

#!/usr/local/bin/perl

#on définit le nombre de mots que l'on veut avant et après
print "Combien de mots voulez-vous observer avant?";
$nbavant=<STDIN>;
print "Combien de mots voulez-vous observer après?";
$nbapres=<STDIN>;

#on ouvre le fichier de sortie
open (FILEOUT, ">>ex1.html");
#on y inscrit la structure html
print FILEOUT "<HTML>\n";
print FILEOUT "<HEAD><TITLE>Concordancier</TITLE></HEAD\n";
print FILEOUT "<BODY>";

@listedemots = ("bébé","bien","ouvre","contact","tonique");

foreach $mots (@listedemots) # pour chaque mot
{
#début du tableau html
print FILEOUT "<p><p><TABLE border =1 width=60% align=center><TR><TD align=center bgcolor=\"#0000FF\" width=43%> CONTEXTE GAUCHE </TD><TD align=center bgcolor=\"#0000FF\" width=13%> FORME POLE </TD><TD align=center bgcolor=\"#0000FF\" width=44%> CONTEXTE DROIT </TD></TR>" ;
#on fait choisir l'état du corpus sur lequel l'utilisateur veut travailler
print "Pour le mot $mots, quel corpus d'entrée voulez-vous utiliser : p96.tag, p96.bal, p96.fic, p96.tab ? \n" ;
print "Merci d'inscrire votre choix.\n";
my $choixcorpus = <STDIN> ;
chomp $choixcorpus;

#on ouvre le fichier d'entrée.

if ( $choixcorpus =~ /p96.tag/) #fichier de l'étape 4
{
#choix de la présentation par l'utilisateur
print "Autour des formes pôles, voulez-vous ne voir apparaître que les formes graphiques ? que les structures syntaxiques ? ou les deux ?" ;
print "Pour le premier cas, tapez 1, pour le deuxième, 2 et 3 pour le troisième \n";
$choix = <STDIN>;
open (FILE1, "p96.tag");
while (my $ligne =<FILE1> ) #pour chaque ligne
{
if ($ligne =~ /( |^)$mots(s|nt)?\/[(A-Z|0-9)]+ /)
{
@motsavant= split(/ /, $`); #on crée une liste contenant les mots situés avant le motif
my $numder = $#motsavant;
my $numvoulu = $numder - $nbavant+1; # on calcule le rang du premier mot de la liste à regarder = nb de mots de la liste (dernier+1) - nb souhaité par l'util.
print FILEOUT "<TR><TD align=center width=43%>"; # on commence la ligne du tableau
if ($numvoulu >= 0) # si ce rang est sup ou égal à 0,
{
for ($o=$numvoulu;$o<=$numder;++$o) # boucle qui commence à ce rang et finit au dernier mot de la liste
{
## on traite ces "mots" de la liste suivant les choix de l'utilisateur
if ($choix =~ /1/) ## l'utilisateur ne veut que les formes graphiques
{$motsavant[$o] =~ s/\/[(A-Z|0-9]*$//g;} ## on supprime les cat
elsif ($choix =~ /2/) ## l'utilisateur ne veut que les catégories
{$motsavant[$o] =~ s/^[^\/]*\///g;} ## on supprime les formes graphiques
else {$motsavant[$o] =~ s/^/<b>/g;## on met en gras la forme graphique pour plus de lisibilité
$motsavant[$o] =~ s/\//<\/b>\//g;};
print FILEOUT "$motsavant[$o] " ;
}
}
else ## il y a moins de mots dans la liste que le nombre souhaité par l'utilisateur
{
for ($o=0;$o<=$numder;++$o) ## boucle qui va du premier mot de la liste au dernier
{
if ($choix =~ /1/)
{$motsavant[$o] =~ s/\/[(A-Z|0-9]*$//g;}
elsif ($choix =~ /2/)
{$motsavant[$o] =~ s/^[^\/]*\///g;}
else {$motsavant[$o] =~ s/^/<b>/g;
$motsavant[$o] =~ s/\//<\/b>\//g;};
print FILEOUT "$motsavant[$o] " ;
}
}
print FILEOUT "</TD>"; ## on ferme la première cellule

print FILEOUT " <TD align=center><b><font color=\"blue\"> $& </font></b></TD>"; # on inscrit la forme pôle dans la 2ème cellule

@motsapres= split(/ /,$'); #on crée une liste contenant les mots situés après le motif
$nbvoulu = $nbapres -1;
print FILEOUT "<TD align=center>";
for ($o=0;$o<=$nbvoulu;++$o)
{
if ($choix =~ /1/)
{$motsapres[$o] =~ s/\/[(A-Z|0-9]*$//g;}
elsif ($choix =~ /2/)
{$motsapres[$o] =~ s/^[^\/]*\///g;}
else {$motsapres[$o] =~ s/^/<b>/g;
$motsapres[$o] =~ s/\//<\/b>\//g;};
print FILEOUT "$motsapres[$o] " ;
}
print FILEOUT "</TD></TR>";
}
}
close FILE1;
}

 

else { # pour les 3 autres fichiers
open (FILE, "$choixcorpus") or die "impossible";
while (my $ligne =<FILE> ) #pour chaque ligne
{ if ($ligne =~ /( |^)$mots(s|nt)?/)
{
$contextegauche = $`;
$contextedroit = $';
$motaa = $&;

## on filtre les contextes gauches et droits pour n'avoir que du texte quelque soit le fichier d'entrée

$contextegauche =~ s/<[A-Z]*>//g;
$contextegauche =~ s/<[0-9]*>//g;
$contextegauche =~ s/<[A-Z]*-?[A-Z]*>//g;
$contextegauche =~ s/-//g;
$contextegauche =~ s/<[A-Z]*_?[A-Z]*>//g;
$contextegauche =~ s/<[A-Z]*-?[A-Z]*-?[A-Z]*>//g;
$contextegauche =~ s/[0-9]*//g;
$contextegauche =~ s/<>//g;
$contextegauche =~ s/N°//g;
$contextegauche =~ s/^n° fiche\.*$//g;
$contextedroit =~ s/<[A-Z]*>//g;
$contextedroit =~ s/<[0-9]*>//g;
$contextedroit =~ s/[0-9]*//g;
$contextedroit =~ s/-//g;
$contextedroit =~ s/<[A-Z]*-?[A-Z]*>//g;
$contextedroit =~ s/<[A-Z]*_?[A-Z]*>//g;
$contextedroit =~ s/<>//g;
$contextedroit =~ s/N°//g;
$contextedroit =~ s/<[A-Z]*-?[A-Z]*-?[A-Z]*>//g;
$contextedroit =~ s/^n° fiche\.*$//g;
## même principe que pour le 1er fichier (étape 4)
@motsavant= split(/ /, $contextegauche); #on crée une liste contenant les mots situés avant le motif
my $numder = $#motsavant;
my $numvoulu = $numder - $nbavant+1; # on calcule le rang du premier mot de la liste à regarder = nb de mots de la liste (dernier+1) - nb souhaité par l'util.
print FILEOUT "<TR><TD align=center width=43%>"; # on commence la ligne du tableau
if ($numvoulu >= 0) # si ce rang est sup ou égal à 0,
{
for ($o=$numvoulu;$o<=$numder;++$o) # boucle qui commence à ce rang et finit au dernier mot de la liste
{ print FILEOUT "$motsavant[$o] " ;}
}
else ## il y a moins de mots dans la liste que le nombre souhaité par l'utilisateur
{
for ($o=0;$o<=$numder;++$o) ## boucle qui va du premier mot de la liste au dernier
{ print FILEOUT "$motsavant[$o] " ;}
}
print FILEOUT "</TD>"; ## on ferme la première cellule

print FILEOUT " <TD align=center><b><font color=\"blue\"> $motaa </font></b></TD>"; # on inscrit la forme pôle dans la 2ème cellule

@motsapres= split(/ /,$contextedroit); #on crée une liste contenant les mots situés après le motif
$nbvoulu = $nbapres -1;
print FILEOUT "<TD align=center>";
for ($o=0;$o<=$nbvoulu;++$o)
{ print FILEOUT "$motsapres[$o] " ; }
print FILEOUT "</TD></TR>";
}
}
close FILEIN;
}
}
close FILEOUT;

 

Affichage :

Le fichier : ex5.1.html

 

< Etape 4 - Etape 6 >

Haut de page