• Aucun résultat trouvé

Cours langages de Script – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "Cours langages de Script – Cours et formation gratuit"

Copied!
3
0
0

Texte intégral

(1)

M´ethodes Empiriques et Langages de Script TP 7

G. A. Musillo musillo4@etu.unige.ch

October 24, 2006

1 Exercice 1: Une classe pour les heaps

En Perl, une classe n’est rien d’autre qu’un package qui met `a disposition d’un client un constructeur d’instances ou d’objets de cette classe. Typique- ment, un objet est une r´ef´erence sur un tableau associatif. Les cl´es de ce tableau associatif renvoie aux champs ou attributs de l’objet. Pour associer une r´ef´erence `a un module (autrement dit, pour construire un objet d’une classe), Perl utilise l’op´erateurblessqui prend une r´ef´erence et un nom de module comme arguments. Voici, par exemple, une classe pour des objects qui peuvent ˆetre enregistr´es dans une queue de priorit´e:

#!/usr/bin/perl

use strict; use warnings;

package PriorityQueueObject;

sub new { # constructor my $class = shift;

my $priority = shift;

my $object = shift;

my $pqo = {

_priority => $priority, _object => $object };

bless $pqo, $class;

return $pqo;

}

sub priority {

my $pqo = shift;

return $pqo->{_priority};

}

sub object {

my $pqo = shift;

1

(2)

return $pqo->{_object};

} 1;

Et voici comment un client pourrait utiliser la classePriorityQueueObject:

#!/usr/bin/perl

use strict; use warnings;

use PriorityQueueObject;

my $obj = ’Google’;

my $pqo = PriorityQueueObject->new(128, $obj);

print $pqo->object, ":", $pqo->priority, "\n";

Etant donn´ee la classePriorityQueueObject, on vous demande de pro- grammer une classe PriorityQueueHeapqui impl´emente les queues de pri- orit´e au moyen des heaps (litt´eralement, des tas). Vous trouverez une de- scription des queues de priorit´e et de leur impl´ementation en Oberon dans le document http://www.latl.unige.ch/mels/PriorityQueueHeap.pdf, r´ealis´e par Luka Nerima. Il vous suffit donc de traduire le code orient´e- object Oberon en code orient´e-object Perl. Vous devez ´egalement ´ecrire un programme Perl qui test votre classe PriorityQueueHeap.

2 Exercice 2: Commentaire des modules Sexpr.pm et SexprNode.pm.

Les documentshttp://www.latl.unige.ch/mels/SexprNode.pmet http://www.latl.unige.ch/mels/Sexpr.pm impl´ementent deux modules sans commentaires qui permettent de construire l’ arbre n-aire correspon- dant `a la notation parenth´es´ee d’une structure syntaxique. On vous de- mande de commenter ces deux modules. Vos commentaires doivent mon- trer que vous avez compris le code de ces deux modules. Pour vous aider, t´el´echargez les fichiers http://www.latl.unige.ch/mels/sexpr.datet http://www.latl.unige.ch/mels/sexpressions.pl, ´ex´ecutez

cat sexpr.dat |./sexpressions.plet observez la sortie.

3 Exercice 3: un classifieur Naive Bayes pour la classification de documents textuels

On vous demande de programmer un classifieur bay´esien na¨ıf capable d’apprendre

`

a classer des documents textuels. Le pseudo-code que vous devez impl´ementer en Perl vous a r´ecemment ´et´e pr´esent´e par Paola. Vous pouvez consulter

2

(3)

le document (http://www.latl.unige.ch/mels/cours7-bayes.pdf) qui d´ecrit ce pseudo-code.

Le pseudo-code de Paola sp´ecifie deux proc´edures: la proc´edure d’apprentissage et la proc´edure de classification. Bien que le pseudo-code de ces deux proc´edures soit correcte, son impl´ementation exige quelques modifications.

En effet, l’algorithme bay´esien na¨ıf demande de calculer un produit dont les facteurs sont des probabilit´es comprises entre 0 et 1. Or, le produit de nom- bres compris entre 0 et 1 pourrait bien ˆetre plus petit que le plus petit nombre qu’une machine puisse repr´esenter. Pour r´esoudre ce probl`eme d’underflow, il suffit de substituer `a une probabilit´e son logarithme (la fonction loga- rithme ´etant croissante, maximiser un produit de probabilit´es ´equivaut `a maximiser son logarithme). Rappelez-vous que la classe retourn´ee par le Naive Bayesest la classec qui maximise le produit

P(c)×Q

iP(wi|c)

Or le logarithme d’un produit de facteurs est la somme des logarithmes de ces facteurs. Par cons´equent, votre programme devra retounrner la classec qui maximise la somme

logP(c) +P

ilogP(wi|c)

Les donn´ees que vous utiliserez sont stock´ees dans l’archive

http://www.latl.unige.ch/mels/tp7_newgroups.tar.gz.

Cette archive contient des messages de newsgroups. Sauvegardez cette

archive et d´esarchivez-la au moyen de la commandetar -xzvf tp7_newgroups.tar.gz.

Il en r´esultera 7 r´epertoires: comp.sys.mac.hardware, comp.windows.x, etc. Chacun de ces r´epertoires correspond `a une classe de newsgroups qui contient des messages. Partionnez ces messages en messages d’entraˆınement (99 % des messages de chaque r´epertoire) et messages de test (1 % des messages de chaque r´epertoire). Les messages n’ont pas ´et´e pr´etrait´es: ils contiennent donc des mots (ou d’autres signes) qui ne sont pas utiles `a la classification. Tˆachez d’´eliminer ces mots ou signes inutiles.

Rapportez ´egalement toutes les mesures de performance qui vous paraissent les plus pertinentes pour ´evaluer votre classifieur.

Vous devez me faire parvenir votre code et vos r´esultats au plus tard le 17 janvier 2007 `a midi.

3

Références

Documents relatifs

⇒ pour rendre une interface explicite, le plus simple est d’enfermer la proc´edure externe dans un module (il existe d’autres solutions moins simples avec les bloc interface ,

Une variable de type C peut faire référence à un objet de la classe C. hauteur

Nous passerons donc en paramètres au script le nom du champ dans la base de données, son type, sa valeur et bien sûr l'id de l'enregistrement dont il faut modifier le champ....

Si la valeur propre est double (c'est-à-dire si elle est une solution de multiplicité deux de l'équation de Laplace), alors on a un système ou deux équations sont superflues, et

Ensuite le même programme en un langage légèrement plus évolué : le langage Basic.. Ce langage, dont le nom est un acronyme de Beginer’s All-purpose Symbolic Instruction Code, a

Le langage Pascal fournit cinq modes de structuration distincts, qui peuvent en général être combinés entre eux puisque les composants d’un objet de type structuré peuvent le

Le modèle des classes d’UML saisit la structure statique d'un système en montrant les objets dans le système, les relations entre les objets, les attributs et

Les génériques permettent donc, en quelques sortes, de déclarer une série de classes (potentielles) en une seule fois, ou plus exactement de déclarer un modèle de classe, mais avec