Exercices niveau Licence

 

Etape N°2

 

Exercice 1

A partir des différentes versions du corpus prématurés, construire un programme pour réaliser une extraction de 5 formes graphiques (5 mots avec les différentes marques morphologiques). L'examen de toutes les occurrences de certains mots doit permettre de dégager leur emploi dans le corpus. On commencera par examiner la forme "contact". Pour chaque forme étudiée, on notera les points suivants :

· nombre de bébés concernés ;

· nombre d'infirmières employant ce mot ;

· emploi avec un verbe ou non ;

· emploi singulier ou pluriel ;

· contexte positif ou négatif ;

 

Résultat

Le code :

#!usr/local/bin/perl

print "Etudions cinq formes graphiques dans le corpus \n Nous vous proposons d'étudier les mots contact, calme, ouvre, tonique, pleure.";
print "Si cela vous va, tapez OK, sinon inscrivez les cinq mots que vous voulez chercher, entre guillemets et séparés par un espace.";
$rep = <STDIN>;
chomp $rep;
if ( $rep =~ /OK/ ) {
@listemots = ("contact", "calme", "réactif", "ouvre", "endormi") ; }
else {
## on crée la liste
@listemots = split(/ /,$rep);
## on vérifie qu'il y a bien cinq mots
if ($#listemots != 4 ) {print "Il semblerait qu'il y ait une erreur de saisie, veuillez retaper les cind mots comme il faut";
$rep2= <STDIN>;
@listemots = split(/ /,$rep2);}
}

open (FILEOUT, ">> essai.html");
print FILEOUT "<HTML>\n";
print FILEOUT "<HEAD><TITLE>Occurences</TITLE></HEAD>\n";
print FILEOUT "<BODY>";

foreach $choix (@listemots)
{
print FILEOUT "<CENTER><TABLE width=60% border=1>" ;
print FILEOUT "<TR><TD colspan=3 align=center>$choix</TD></TR>";
&comptage;
&contexte;
print FILEOUT "</TABLE>";
}
print FILEOUT "</BODY>\n";
print FILEOUT "</HTML>\n";
close (FILEOUT);

sub comptage {
open (FILE, "p96.bal");
## on cherche le nombre de bébés et d'infirmières concernés
#création de 2 listes

%bebe =(); # va permettre de compter le nombre de bébés concernés
%inf =(); #idem avec les infirmières
while ($ligne = <FILE>)
{
if ( $ligne =~ /<TXT>.*$choix( |s|\.|,).*<BEBE>([0-9]*).*<INFIRMIERE>([0-9]*)/ )
{
$numbebe = $2; #on attribue à la variable $numbebe le numéro du bébé pour la ligne
$numinf = $3; #idem inf
$bebe{$numbebe} = $bebe{$numbebe} +1; # Dans notre table de hachage, le numéro du bébé devient la clé, et on ajoute 1 à la valeur à chaque fois qu'on le retrouve
$inf{$numinf} = $inf{$numinf} +1; # idem pour la table inf
}
}
@nbbebe =();
@nbinf =();
@nbbebe = keys (%bebe); # on crée une liste des clés de la table de hachage
$#nbbebe ++; # on récupère le nombre de lignes de la liste (+1 car la première vaut 0)
@nbinf = keys (%inf); # on crée une liste des clés de la table de hachage
$#nbinf ++; # on récupère le nombre de lignes de la liste (+1 car la première vaut 0)
print FILEOUT "<TR><TD colspan=3 align=center> Le mot $choix est employé par $#nbinf infirmières pour parler de $#nbbebe bébés \n </TD></TR>";
close (FILE); }

sub contexte{
open (FILE2, "p96.tag");
while ($ligne2 = <FILE2> )
{
if ( $ligne2 =~ /$choix.?(\/[A-Z]*)/)
{
$cat = $1 ;
# on crée un contexte gauche et un contexte droit
### pour le contexte proche, on prendra (de façon arbitraire) ceux qu'on trouve entre ponctuations (ou début de ligne)

$contextegauche = $` ;
$contextegauche =~ s/^.*\/YP[A-Z]*//g;
print FILEOUT "<TR><TD rowspan=4><b>contexte gauche : </b>$contextegauche <br/>";
$contextedroit = $' ;
$contextedroit =~ s/.\/YP[A-Z]*.*$//g;
print FILEOUT "<b>contexte droit : </b>$contextedroit \n <TD></TR>";

## on cherche si emploi est avec un verbe
if ($contextegauche =~ /[a-z]\/V/)
{print FILEOUT "<TD>emploi avec un verbe</TD><TD> oui </TD></TR>";}
else { print FILEOUT "<TD>emploi avec un verbe</TD><TD> non </TD></TR>";}

## on cherche si l'emploi est au sing ou au pluriel
if ($cat =~ /S/)
{print FILEOUT "<TD> genre </TD><TD> singulier </TD></TR>";}
else {print FILEOUT "<TD> genre </TD><TD> pluriel </TD></TR>";}

## contexte positif ou négatif
if (($contextegauche =~ /(pas|peu|refuse|impossib|aucun|difficile|sans|sursaute|pleure

|agité|non)/) or ($contextedroit =~ / (pas|peu)/ ))
{print FILEOUT "<TD>contexte</TD><TD>négatif</TD></TR>";}
else {print FILEOUT "<TD>contexte</TD><TD>positif</TD></TR>" ;}

}}
close (FILE2);
}

 

Le fichier ex2.1.html

Haut de page

Exercice 2

Dans le corpus des bébés prématurés (p96.bal), vous extrairez le champ texte (balise <TXT>) pour toutes les fiches concernant le bébé 2.

Résultat

Le code :

#!usr/local/bin/perl

open (FILEIN, "p96.bal");
open (FILEOUT, ">infobebe2.txt");
while ($ligne= <FILEIN>)
{
if ($ligne=~ /<TXT>(.*)<BEBE>2/ )
{print FILEOUT $1,"\n";}
}
close (FILEOUT);
close (FILEIN);

 

Le fichier infobebe.txt

 

Haut de page

Exercice 3

Construire un programme qui compte le nombre de mots contenus dans un fichier. L'appliquer au poème de Baudelaire amants.txt et au fichier p96.fic.

Résultat

Le code :

#!usr/local/bin/perl
$fic = "$ARGV[0]";
open (FILEIN, $fic);
$textecomplet;
while ($ligne = <FILEIN>)
{
chomp $ligne;
###nettoyage du texte
#réécriture des accents

$ligne=~ s/\\'e9/é/g;
$ligne=~ s/\\'e8/è/g;
$ligne=~ s/\\'e0/à/g;
#élimination caractères inutiles / balises des deux fichiers tests (amants.txt et p96.fic)
$ligne=~ s/\\par//g;
$ligne=~ s/<.*>//g;
###séparation en mots par ¤
$ligne=~ s/ /¤/g;
$ligne=~ s/\./¤/g;
$ligne=~ s/;/¤/g;
$ligne=~ s/,/¤/g;
$ligne=~ s/:/¤/g;
if ($ligne =~ /¤[a-zA-Z]{1,2}'/)
{$ligne =~ s/'/¤/g;} ## compte l'apostrophe comme séparateur de mots si ce qui précède ne dépasse pas deux lettres,
# comme le s', le l', ..., mais garde entr'ouvrir, aujourd'hui, quelqu'un par ex, (PARTI PRIS)
$textecomplet = $textecomplet.$ligne."¤";
}
close (FILEIN);
$textecomplet=~ s/¤(¤)*/¤/g;
chomp $textecomplet;
@mots= split (/¤/,$textecomplet);
$#mots ++;
print "Pour le fichier $fic, il y a $#mots mots \n";

Affichage :

 

Haut de page

Exercice 4

Ecrire un programme qui attend que l'utilisateur saisisse un rayon avant de calculer le périmètre du cercle.

Résultat

Le code :

#!usr/local/bin/perl
print "Si vous voulez connaître le périmètre d'un cercle, il vous suffit d'indiquer son rayon (en cm).";
$rayon = <STDIN>;
$perimetre = 2*3.14*$rayon;
print "Pour un rayon de", $rayon," cm, le périmètre du cercle est de", $perimetre," cm2";

Affichage :

 

Haut de page

Exercice 5

Ecrire un programme demandant la température extérieure, et affichant "trop chaud" si elle est supérieure à 30°, "trop froid" si elle est inférieure à 20°, "impeccable" si elle est comprise entre 20 et 30°.

Résultat

Le code :

#!usr/local/bin/perl

&demande;
if ($temp > 30 ) {print "Il fait trop chaud!!\n";}
elsif ($temp < 20) {print "Il fait trop froid!!\n";}
else {print "Température impeccable!!\n";}

sub demande{
print "Quelle est la température extérieure (en degré celsius) ? \n Merci d'indiquer uniquement le nombre \n";
$temp = <STDIN>;
chomp $temp;
}

 

Affichage :

 

< Etape 1 - Etape 3 >

Haut de page