Partiel du 13/12/2005
Durée : 2h00
Les documents sont autorisés, ainsi que l'accès aux ordinateurs.
Pour chaque exercice, vous donnerez d'abord une explication en français de votre code (structures de données, algorithmes) et argumenterez vos choix. Soyez concis ! Vous donnerez ensuite le code Perl comportant des commentaires appropriés, faisant apparaître les différentes étapes de vos traitements.
Les barèmes sont donnés à titre indicatif, mais pourront être modifiés lors de la correction.
Exercice 1 (12 points)
On désire extraire des cooccurrences d'un fichier texte. Ecrire une fonction extraireCooc(NomDeFichier,Expr1,Exp2,TailleFenetre) qui prend en entrée les arguments suivants :
•	NomDeFichier : le nom du fichier à analyser
•	Expr1 : une chaîne de caractères représentant une forme simple (cette chaîne pourra intégrer des symboles d'expression régulière, sans parenthèse)
•	Expr2 : une deuxième chaîne de caractères, du même type.
•	TailleFenetre : la distance maximale entre les deux formes recherchées. Cette distance sera calculée en nombre de tokens. Les cooccurrences seront toutes recherchées à l'intérieur d'une même phrase.
En sortie, on aura la création d'un fichier html, nommé cooc.html contenant la liste des phrases dans lesquelles les cooccurrences ont été trouvées, ainsi que les statistiques de fréquence et de cooccurrence. Le fichier de sortie pourra contenir les informations suivantes, avec les mots recherchés en surbrillance (mais ne cherchez pas à soigner la présentation html).

Vous réutiliserez, sans les reprogrammer, les fonctions texteToPhrases( ) et phraseToTokens( ) vues en cours.

Indications : 
- il existe de très nombreuses manières de programmer cette fonction. Ne cherchez pas à optimiser votre code (si vous avez plusieurs boucles qui font presque la même chose, n'essayez pas de compacter les traitements en les réunissant dans une seule boucle).

- pour l'affichage de la sortie HTML : l'opérateur d'intervalle .. permet d'extraire la sous-liste comprise entre deux indices (inclus) : 
@liste=("lun","mar","mer","jeu","ven","sam","dim");
@int=@liste[2..4];
->
@int=("mer","jeu","ven");
Exercice 2 (8 points + 2 points de bonus)
Les textes étiquetés traités par le logiciel Intex peuvent avoir le format suivant :
•	Les frontières de phrase sont représentées par le marqueur {S}
•	Les tokens sont également représentés entre accolade, suivant le modèle {Forme,Lemme.CAT:ListesTraits}. Les espacements sont à l'extérieur des accolades.
•	Les ponctuations sont représentées à l'extérieur des accolades, et suivies par un retour chariot.

Voici par exemple une phrase enregistrée avec ce codage
{S}
{L',le.DET:Masc+Fem+SG+Def+Det} {introduction,introduction.NOUN:Fem+SG+Noun} {de,de.PREP:Prep} {ce,ce.DET:Masc+SG+Dem+Det} {rapport,rapport.NOUN:Masc+SG+Noun} {fait,faire.VERB:IndP+SG+P3+Verb} {état,état.NOUN:Masc+SG+Noun} {des,de.PREDET:Prep=le+Masc+Fem+PL+Def+Det} {principales,principal.ADJ:Fem+PL+Adj} {limites,limite.NOUN:Fem+PL+Noun} {rencontrées,rencontrer.VERB:PaPrt+Fem+PL+Verb} {lors de,lors de.PREP:Prep} {cette,ce.DET:Fem+SG+Dem+Det} {étude,étude.NOUN:Fem+SG+Noun} ,  
{c'est-à-dire,c'est-à-dire.OTHER:Coord} {la,le.DET:Fem+SG+Def+Det} {disponibilité,disponibilité.NOUN:Fem+SG+Noun} {et,et.OTHER:Coord} {l',le.DET:Masc+Fem+SG+Def+Det} {accès,accès.NOUN:Masc+SG+PL+Noun} {aux,à.PREDET:Prep=le+Masc+Fem+PL+Def+Det} {informations,information.NOUN:Fem+PL+Noun} {pertinentes,pertinent.ADJ:Fem+PL+Adj} ,  
{ainsi que,ainsi que.CONJ:SConj} {les,le.DET:Masc+Fem+PL+Def+Det} {conseils,conseil.NOUN:Masc+PL+Noun} {pour,pour.PREP:Prep} {la,le.DET:Fem+SG+Def+Det} {poursuite,poursuite.NOUN:Fem+SG+Noun} {des,de.PREDET:Prep=le+Masc+Fem+PL+Def+Det} {recherches,recherche.NOUN:Fem+PL+Noun} .  
{S}

Ecrire une fonction intexToCesana(nomFichierIntex), qui prend comme argument nomFichierIntex, le nom d'un fichier ayant ce format, et qui crée le fichier au format CesAna correspondant, portant le même nom avec une extension .ces. Seules les balises <s> et <tok> porteront des identifiants.

Bonus (2 points) : ajouter des tests et des messages pour les cas où le format du fichier donné en entrée n'est pas conforme au modèle donné ci-dessus.