Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement certains symboles.
Reportez-vous à la
documentation d'HEVEA.

Licence d'informatique
Module de C/Unix
Projet de C

ham, spam, graham...

Philippe Marquet

Décembre 2003

Ce document est disponible sous forme d'un fichier PostScript compressé ou d'un fichier PDF.





L'objet de ce projet est de mettre en oeuvre le principe utilisé par les filtres de pourriels (courriels non sollicités, ou spam) proposé par Paul Graham et décrit sur son site http://www.paulgraham.com/spam.html.

Dans un ensemble de courriels (courriers électroniques, emails), on distingue les spams, « mauvais » courriers, des hams, « bons » courriers. Une première phase d'apprentissage est basée sur un corpus existants de courriels identifiés comme spams et un corpus de courriels existants identifiées comme hams. La seconde phase permet d'utiliser les informations issues de cet apprentissage pour désigner un nouveau courriel donné comme spam ou ham.

1  Algorithme de Paul Graham

Les phases suivantes sont identifiées pour la mise en place d'un tel filtre. Quelques justifications sont données à l'URL citée ci-dessus.
Création de tables de hachage
À partir du corpus des spams et du corpus des hams, nous créons deux tables de hachage contenant pour chacune l'ensemble les mots du corpus et leur nombre d'apparition dans le corpus.

Cette création demande de définir précisément le terme mot. On peux par exemple choisir qu'un mot est une suite de caractères significatifs, les caractères significatifs étant les lettres et les signes - et _. Les autres caractères sont considérés comme délimiteurs et ignorés. Les lettres minuscules et majuscules sont indifférenciées.

Calcul de la probabilité associée à un mot
Paul Graham propose le calcul suivant, pour un mot word donné, de la probabilité qu'un courriel contenant ce mot soit un spam : nbad et ngood sont respectivement les tailles (nombre de courriels) des corpus spam et ham.

Élection des mots significatifs
À partir de l'ensemble des probabilités de chacun des mots d'un courriel, on ne retient que les 15 mots les plus significatifs. Un mot est d'autant plus significatif que sa probabilité est éloignée de la valeur neutre 0.5.

Calcul de la probabilité combinée
Les probabilités pi des 15 mots les plus significatifs sont combinées selon la formule suivante pour donner la probabilité que le courriel soit un spam :
 
Õ
i
pi
 
Õ
i
pi +
 
Õ
i
(1 - pi)


Qualification du courriel
Si la probabilité combinée est supérieure à 0.9, le courriel est considéré comme un spam.

2  Filtrage

Dans un premier temps votre programme : Vous utilisez pour manipuler les tables de hachage, les primitives hcreate(), hsearch() et hdestroy() de la bibliothèque Unix hsearch. Consultez le manuel en ligne ou http://www.opengroup.org/onlinepubs/007908799/xsh/hsearch.html.

3  Hachage

Dans une seconde étape, vous implantez votre propre bibliothèque de manipulation de tables de hachage.

4  Sauvegarde

Il s'agit ensuite de ne pas reconstruire les tables de hachage à chaque utilisation mais de mémoriser de manière permanente l'ensemble de l'information exploitée dans un fichier représentant une version indexée du corpus.

Vous développez alors

5  Validation

Un corpus de spams vous sera fourni. Vous pourrez utiliser vos propres courriels comme corpus de ham.


Ce document a été traduit de LATEX par HEVEA.