[PHP5 - DOM - XPATH] CLASSE DE PRE-FILTRAGE DE TEXTE

cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 29 janv. 2007 à 21:04
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 10 févr. 2007 à 15:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41311-php5-dom-xpath-classe-de-pre-filtrage-de-texte

cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
10 févr. 2007 à 15:48
Voila alors le code a ete mis a jour.
Petit plus : la fonction Filtre::Analyse() renvoi toujours un tableau sauf que maintenant, 2 cases sont predefinies, il s'agit de 'foo' et 'final'. 'foo' est une case qui contient le nombre de mots trouves par la classe, 'final' est la somme de tous les pourcentages calcules par la classe (ce qui permet de savoir connaitre le pourcentage final de mots interdits dans une phrase sans en avoir fait le calcul)

@+
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 févr. 2007 à 18:45
Alalala... j'avais raison ! Comme d'hab tu m'en apporte plus qu'il ne m'en faut... ^^

J'ai trouve tes classes et j'ai lu les topics aussi j'avais quelques questions :
- je vais coder ma propre implementation de soundex (non pas que la tienne n'est pas bonne au contraire mais je desire comprendre).
Voila ce que j'ai trouve sur php.net
Soundex()
=> http://www.php.net/manual/fr/function.soundex.php
Levenshtein()
=> http://www.php.net/manual/fr/function.levenshtein.php
Metaphone()
=> http://www.php.net/manual/fr/function.metaphone.php

Je comprend l'interet de soundex() et metaphone() mais je ne comprend pas levenshtein. L'algo mathematique me donne mal a la tronche et l'exemple ne me parle pas franchement. Tu pourrais m'expliquer STP ?

"OUUUUUUUUUF!! ^^"
J'imagine bien ton soulagement ;-)

Je crois que je vais recoder ma classe en implementant au moins la focntion soundex histoire d'etre un peu plus precis.

A bientot ;-)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 févr. 2007 à 08:03
"Donc en conclusion, je dirais que cette classe n'a pas vocation de bot virtuel et qu'elle ne remplacera jamais le travail d'un bon admin sur un forum"

OUUUUUUUUUF!! ^^

Pour le reste, je sais...je disais juste ça comme ça ;-) On ne peut pas, dans ce domaine, trouver LA parade. Pas encore en tous cas.

A propos de phonétique,
"J'ai voulu egalement utilise la phonetique pour pallier ce genre de probleme mais je n'ai pas eu le temps de poussees mes recherches",
fouille mes sources...;-)
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
5 févr. 2007 à 22:27
Malalam >
"juste pour dire que je testerai ta classe et la lirai en détail"
J'esperai vraiment que tu me dises sa, tes conseils m'on toujours ete utile ! Tiens moi au courant :p

"ce qui manquera de toutes façons à un tel code, c'est prévois les erreurs humaines [...] Et puis, les internautes récalcitrants s'amuseront aussi : mairde! ou merdeuh"
J'en ai bien conscience aussi j'ai pris soins de virer tout signes de ponctuation de chaque mot extrait. La liste est modifiable a souhait, on l'a reconnait du premier coup d'oeil ;-). J'ai voulu egalement utilise la phonetique pour pallier ce genre de probleme mais je n'ai pas eu le temps de poussees mes recherches. Je sais que mysql le gere mais je ne voulais pas utiliser une base sql. Je continuerai mes recherches un peu plus tard car j'ai pas mal de taf a la bourre mais promis je garderai l'idee jusqu'au moment venu.
Pour tous les trucs genre "merdeuh", il faut d'abord comprendre le contexte. J'ai code cette classe pour un site qui se fait constament spamme par des internautes vraiment pas tres intelligent. Des membres du site du zero pense que nous avons copie leurs sites (http://www.inzeprog.info) et nous recevions (le livre d'or a ferme) beaucoup de messages du style : bande de copieur, vous etes trop null ect...
Les messages ete globalement les memes donc une telle protection aurait ete largement suffisante. Ensuite, j'aurais beau travailer a la nasa, je ne serai jamais a l'abri de ce genre de contours et personne d'ailleurs ne le sera, il faut se l'avouer ;-)
C'est pour cela que j'ai qualifie ce code de "pre-filtrage". Il ne fera qu'informer les webmasters qu'un message est potentiellement non conforme a l'ethique. Ainsi, si jamais un developpeur code l'envoi d'un mail a chaque alerte, un modo pourra alors cibler le message et aviser en fonction.
Un travail de mise a jour de la base sera egalement necessaire afin de se conformer au mieux aux propos des internautes qui frequent un site protege par cette classe (si on peut parler de protection evidement) ainsi qu'une rigueur dans le choix des categories du fichier xml.

Donc en conclusion, je dirais que cette classe n'a pas vocation de bot virtuel et qu'elle ne remplacera jamais le travail d'un bon admin sur un forum. Elle pourra par contre etre utilise dans un webmail perso (je ne vise pas les gros sites genre laposte ou gmail, j'en suis parfaitement conscient) et peut permettre d'acceder a un certains niveau de confort a de petit developpeur voulant proposer de bons services sans chercher a devenir milliardaire ^^

C'est a peu de chose pres mon etat d'esprit quand je code et que je poste sur CS.

J'espere ne pas avoir dit trop de betises :p

@++
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 févr. 2007 à 12:15
Hello,

juste pour dire que je testerai ta classe et la lirai en détail. mais je suis désolé, en ce moment, je ne trouve pas franchement le temps :-( !
Comme ta classe datetime, FhX... :-) T'as avancé ?

Jean => ce qui manquera de toutes façons à un tel code, c'est prévois les erreurs humaines : un mec peut écrire "mede" au lieu de "merde" sans faire attention (mais il voulait bien écrire merde...à moins qu'il ne voulait parler de cette charmante (sic) petite ville dans ma régione, la Mède... ;-)).
Et puis, les internautes récalcitrants s'amuseront aussi : mairde! ou merdeuh...
enfin bref, tu m'as compris... ;-)
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
30 janv. 2007 à 17:12
Hello

private $TableOfErrors
> dois passer statique ou constante. Au choix.

Pourquoi pas... sa peut permettre de mieux voir a quoi sert ce tableau

$this->File $NameOfFile;
> Aucune vérification à ce niveau la. (type ? est ce que c'est un fichier valable au moins ?)

Rejoins ce que tu as deja dit => "Hu ? Ce test aurait du figurer plus haut dans ton code :)"
Dans tout les cas, si la var n'est pas bonne, file_exists() est la pour sa. Pas la peine de verifier le type de la variable si apres il faut encore verifier si il existe. Si la var n'est aps bonne, le fichier n'existera pas. A la limite rajouter un cast histoire d'etre sur...

# $Result = $HandleDoc->save($NameOfFile);
# if ( $Result FALSE )
> Vu que tu t'en ressers pas :
if ( $HandleDoc->save($this->File) FALSE ) { ... } else { ... }
> J'ai même mieux :
$this->LastError ( $HandleDoc->save($this->file) FALSE ) ? $this->TableOfErrors[0] : $this->TableOfErrors[3];
Autant utiliser l'opérateur ternaire ici.
Pareil pour la méthode ::load().

Je suis un pas un fan de l'operateur ternaire (j'ai du mal avec la syntaxe et ce n'est pas specialement rapide) mais c'est vrai que l'idee est judicieuse. Why not ? ^^


# $Table[$Compteur] = strtolower($Result);
# $Compteur++;
> $table[$compteur++] = ..... ; :)

J'avais deja mis a jour avec un code du type $Compteur +1; que je prefere et de loin. Je n'aime pas trop joue avec les increments qui sont realise apres un tour de boucle, verification faite. Mais cela reste une bonne idee.
> Fait un tableau avec les valeurs à modifier. Ex :
$array = array(',', '!', '?', .....);
str_replace($array, '', $ton_tableau);
return $ton_tableau.

Claire que c'est mieux. Je mets a jour ;-)

Pour info, j'ai modifier egalement la facon d'extraire les mots. J'utilisais jusqu'a present strtok() (je venais d'ecrire un programme en C++ et je m'en suis servis donc je l'ai garde sous le coude) mais j'avais quelque doute sur sa vitesse (boucle while plus lente qu'une for() )
J'ai donc reecrit les fonctions avec un explode() et une boucle for(). Je n'ai pas l'impression que ce soit plus rapide (temps d'execution quasi-identique), faudrait tester sur des gros fichiers. Dans le doute, je met a jour le zip avec l'ancienne et la nouvelle version. A vous de voir lequel convient mieux a vos besoins (fonctionnement strictement identique).

@++
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 janv. 2007 à 21:51
Moi j'en ai :

private $TableOfErrors
> dois passer statique ou constante. Au choix.

$this->File $NameOfFile;
> Aucune vérification à ce niveau la. (type ? est ce que c'est un fichier valable au moins ?)

if ( !file_exists($NameOfFile) )
> Hu ? Ce test aurait du figurer plus haut dans ton code :) Après avoir tester que $NameOfFile est un type String.

# $Result = $HandleDoc->save($NameOfFile);
# if ( $Result FALSE )
> Vu que tu t'en ressers pas :
if ( $HandleDoc->save($this->File) FALSE ) { ... } else { ... }
> J'ai même mieux :
$this->LastError ( $HandleDoc->save($this->file) FALSE ) ? $this->TableOfErrors[0] : $this->TableOfErrors[3];
Autant utiliser l'opérateur ternaire ici.
Pareil pour la méthode ::load().


# $Table[$Compteur] = strtolower($Result);
# $Compteur++;
> $table[$compteur++] = ..... ; :)

# $Value = str_replace(',', '', $Value);
# $Value = str_replace('!', '', $Value);
# etc...

Fait un tableau avec les valeurs à modifier. Ex :
$array = array(',', '!', '?', .....);
str_replace($array, '', $ton_tableau);
return $ton_tableau.

Tu peux aussi passer la méthode en statique, vu qu'elle n'influe pas directement ta classe.

Voila entre autre :)
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
29 janv. 2007 à 21:04
Bon bah j'attend vos commentaires ;-)

@++
Rejoignez-nous