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
Haut de page 