Les Snippets

Connexion

Bayes : anti spam

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 18/05/2008 23:38:18 et initié par coucou747 [Liste]
Vue : 1003
Catégorie(s) : Base de données, Algorithme, Chaîne de caractères, Email & Messagerie, Control
Langages dispo pour ce code :
- PHP 5



Langage : PHP 5
Date ajout : 18/05/2008
Posté par coucou747 [Liste]
function psplit($string){ return explode(' ', strtolower($string)); }  // decoupage d'une chaine en array de mots
interface WordDb{ public function Count($word); } // words database
class FileWordDb implements WordDb{
  public function __construct($filename){ $this->words = array_count_values(psplit(file_get_contents($filename))); }
  public function Count($word){ return isset($this->words[$word])?$this->words[$word]:0; }
  public function isInPart($word, $p){
    $count = count($this->words);
    $val = $this->Count($word);
    $n = 0;
    foreach ($this->words as $v) if ($v > $val)$n++;
    return $n < $count * $p;
  }
  protected $words;
}
function is_spam($string, WordDb $spams, WordDb $ham){
  $tab=psplit($string);
  $P1=1; $Q1=1;
  foreach ($tab as $w){
    if ($ham->isInPart($w, 1/30) && $spams->isInPart($w, 1/30)) continue; // permet de supprimer les determinants et choses qui n'apportent rien
    $H = $ham->Count($w); $S = $spams->Count($w);
    $f=(0.5+$S)/(1+$S+$H);
    $P1*=(1-$f); $Q1*=$f;
  }
  return (1-$P1)/(2-$P1-$Q1);
}

Remarque :

En copiant mes fichiers spams et mails de thunderbird, j'arrive a avoir des resultats satisfaisants pour les trois tests suivants :

echo is_spam( 'Bonjour un code en java a ete depose sur un forum codes-sources cliquez ici pour lire le nouveau message', new FileWordDb('bayesDb/spams'), new FileWordDb('bayesDb/informatique')), '';
echo is_spam( 'enlarge your penis', new FileWordDb('bayesDb/spams'), new FileWordDb('bayesDb/informatique')), '';
echo is_spam( 'enlarge your penis en codant en java', new FileWordDb('bayesDb/spams'), new FileWordDb('bayesDb/informatique')), '';

une valeur  0.5 incorrecte.

On peut s'en servir sur un forum pour eviter le spam, ou alerter les admins, ou faire des choses du genre.

Snippets en rapport avec : Bayes, Spam, Spamassassain, Filtre, Statistiques



Codes sources en rapport avec : Bayes, Spam, Spamassassain, Filtre, Statistiques

{Visual Basic, VB6, VB.NET, VB 2005} CARNET D'ADRESSE
C'est une application qui traite de l'enregistrement, de la suppression ou de la modification de don...

{JAVA / J2EE} CHERCHER UN FICHIER
Bonjour, Cette classe vous permet d'effectuer une recherche de fichiers (1 ou plusieurs) dans un...

{PHP} PHPAINT : DESSIN ET FILTRES SUR UNE IMAGE - PROTOTYPE
PHPaint est une source permettant d'effectuer des traitements de base sur des images situées sur le ...

{C# / C#.NET} CAPTCHA [VS 2005]
Salut, voici une source qui génère un Captcha repris en partie de la source VB.NET de istamken...

{Flash} EFFET ONDES SUR L'EAU
ce code est une adaptation de celui d'Hpotter: http://www.flashkod.com/codes/EFFET-VAGUE-SUR-IMAGE-...

{Javascript / DHTML} BOUTONS A À Z OU 0 À 9
Il s'agit d'un objet javascript permettant d'afficher dans une zone une ensemble de boutons de A à Z...

{JAVA / J2EE} DÉTECTION DES EMAILS SPAMS PAR LA MÉTHODE DE CLASSIFICATION K PLUS PROCHES VOISIN
Ce code permet de détecter les courriers électroniques indésirables Spam par la méthode de classific...

{IRC} WANTISPAM V3.0
D’après les commentaires et les tests sur la version Wantispam V2.1, on a eus cette nouvelle générat...

{JAVA / J2EE} GRAPHIQUE EN BÂTON
Une classe permettant de créer des graphiques en bâton , plusieurs mises en forme sont disponnibles ...

{Delphi} GBIBLIO GESTION COMPLÈTE DE BIBLIOTHÈQUES
Bonjour à tous Le projet que vous voyer est un gestionnaire complet des bibliothèques. En réa...