begin process at 2012 02 15 20:14:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > COMPARAISON DE 2 CHAINES , ET RETOUR DU POURCENTAGE DE RESSEMBLANCE

COMPARAISON DE 2 CHAINES , ET RETOUR DU POURCENTAGE DE RESSEMBLANCE


 Information sur la source

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :ressemblance, chaines, mots, compter, pourcentage Niveau :Débutant Date de création :26/08/2006 Vu :14 562

Auteur : franco_se

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

bonjour

cette fonction tres simple sert a comparer 2 chaines de caracteres, et de connaitre leur ressemblance en pourcentage.
il n'y a que 2 paramattres:
1/ la chaine de motes recherchées
2/ la chaine où s'effectue la recherche

Source

  • <?php
  • function ressemblance($chaine_recherchee, $chaine_de_contenu) {
  • //on supprime des caracteres de la chaine recherchée, n'entrant pas en compte dans le calcul de la ressemblance.
  • //trim() sert a supprimer les espaces potentielles en debut et fin de chaine.
  • //et strtolower() renvoie la chaîne en minuscules
  • $cle_chaine_rech = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_recherchee)));
  • //on renvoie aussi la chaîne de contenu en minuscules et on explose les chaines, pour obtenir des tableaux
  • $explode_contenu = explode(" ", strtolower($chaine_de_contenu));
  • $explode_cle = explode(" ", $cle_chaine_rech);
  • //on compte le contenu des tableau
  • $count_tab_cle = count($explode_cle);
  • $count_tab_contenu = count($explode_contenu);
  • //on compare les tableaux
  • for($i = 0; $i != $count_tab_contenu; $i++) $pointage[$i] = (in_array($explode_contenu[$i], $explode_cle))?1:0;
  • // on calcule la somme des valeurs du tableau, et on la retourne sous forme de pourcentage
  • return round(((array_sum($pointage)/$count_tab_contenu)*100), 2) . "%";
  • }
  • // les 2 paramettres representent respectivement la chaine de mots recherchées, et la chaine où l'on effectue la recherche
  • $chaine1 = 'test de recherche dans une chaîne';
  • $chaine2 = 'chaîne de contenu dans laquelle nous effectuons la recherche des mots de la chaîne 1';
  • echo "Chaine 1 = ".$chaine1."<br/>Chaine 2 = ".$chaine2."<br/>";
  • echo "Calcul du pourcentage de ressemblance: ".ressemblance($chaine1, $chaine2)."<br/>";
  • ?>
<?php

function ressemblance($chaine_recherchee, $chaine_de_contenu) {

//on supprime des caracteres de la chaine recherchée, n'entrant pas en compte dans le calcul de la ressemblance.
//trim() sert a supprimer les espaces potentielles en debut et fin de chaine.
//et strtolower() renvoie la chaîne en minuscules
    $cle_chaine_rech = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_recherchee)));

//on renvoie aussi la chaîne de contenu en minuscules et on explose les chaines, pour obtenir des tableaux
    $explode_contenu = explode(" ", strtolower($chaine_de_contenu));
    $explode_cle = explode(" ", $cle_chaine_rech);

//on compte le contenu des tableau    
    $count_tab_cle = count($explode_cle);
    $count_tab_contenu = count($explode_contenu);
    
//on compare les tableaux 	
	for($i = 0; $i != $count_tab_contenu; $i++) $pointage[$i] = (in_array($explode_contenu[$i], $explode_cle))?1:0; 

// on calcule la somme des valeurs du tableau, et on la retourne sous forme de pourcentage
 return round(((array_sum($pointage)/$count_tab_contenu)*100), 2) . "%";
}


// les 2 paramettres representent respectivement la chaine de mots recherchées, et la chaine où l'on effectue la recherche

$chaine1 = 'test de recherche dans une chaîne';
$chaine2 = 'chaîne de contenu dans laquelle nous effectuons la recherche des mots de la chaîne 1';
echo "Chaine 1 = ".$chaine1."<br/>Chaine 2 = ".$chaine2."<br/>";
echo "Calcul du pourcentage de ressemblance: ".ressemblance($chaine1, $chaine2)."<br/>";



?> 



 Sources du même auteur

CLASSE DATABASE POUR CONNECTION ET MODIFICATION D'UNE BDD MY...
CHIFFRE DE VIGENÈRE
Source avec Zip Source avec une capture COMPARER DEUX IMAGES ET VOIR LEURS DIFFÉRENCES
GÉNÉRATEUR D'UNE CHAINE ALEATOIRE FACILEMENT MEMORISABLE
DEFILEMENT D'IMAGES POUR ALBUMS PHOTOS

 Sources de la même categorie

Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000
Source avec Zip Source avec une capture GENERATEUR DE BOUTONS DE PARTAGES POUR RESEAUX SOCIAUX par cod57

 Sources en rapport avec celle ci

CRÉER UN PARSEUR LL par Morphinof
Source avec Zip Source avec une capture ENCODAGE UTF16 par foisse
COMPTER LE NOMBRE DE FICHIERS DANS UN DOSSIER par MJ92
COMPTER DES PAGES PRÉCISES (NEWS, TUTOS, ARTICLES) POUR STAT... par linkid
FILTRE À GROS MOTS POUR LIVRE D'OR par armenak

Commentaires et avis

Commentaire de malalam le 26/08/2006 19:09:34 administrateur CS

hello,

jette un oeil à cette fonction Franco : levenshtein (php.net).
Tu simplifieras largement ta fonction ;-)

Commentaire de franco_se le 26/08/2006 20:13:48

je la connaissais pas cette fonction, merci. ( en meme tps, il y a pres de 1300 fonctions php, comment toutes les connaitres ?)

enfin, maintenant, faut que je comprenne bien son fonctionnement, et comment l'integrer lol

Commentaire de malalam le 26/08/2006 20:42:27 administrateur CS

Moi, je les apprends par coeur ;-)
Nan je plaisante...
Levenshtein () utilise l'algo de...Levenshtein ;-) Cet algo calcule la distance entre 2 chaînes (en caractères). La fonction te renvoie donc un entier. (sauf options).
Reste plus qu'à calculer un pourcentage après.

Commentaire de malalam le 26/08/2006 20:43:59 administrateur CS

Couplé à du soundex, c'est très intéressant. Au passage, je fais de la pub : tu peux jeter un oeil à mes codes soundex2 francisé, et phonex. Tu verras, ça peut apporter de l'eau à ton code (bien que cette expression ne veuille rien dire...)

Commentaire de coucou747 le 28/08/2006 12:43:25 administrateur CS

on peut calculer une "distance" entre deux chaines en prennant un alphabet pour calculer la distance entre deux lettres : sur un clavier par exemple, ce qui permetrait de minimiser l'importance des fautes de frapes : deux lettres proches sur le clavier seraient considérés comme proches...

soundex n'a pas cette fonction, pour soundex, les mots doivent avoir une sonoritée proche...

mais là, je ne vois pas trop ce que ton algo fait, tu pourrais détailler ? selon ce que j'ai vu, ça prend chaque lettre de la première chaine, et ça regarde si c'est dans la seconde chaine... mais donc, on s'en moque de la position dans la seconde chaine... bref, ton algo n'est pas réaliste à mon avis...

for($i = 0; $i != $count_tab_contenu; $i++)
ici un foreach devrait être plus approprié...

Commentaire de vduffaut le 19/02/2007 18:52:16

JE prends bonne note (?) des critiques mais je trouve l'idée intéressante et je m'en sers pour émettre, ou non) une alerte de mise à jour pour mes abonnés.

En revanche, il y a un erreur car si on compare deus chaînes identiques, on n'obtient pas 100%... En effet, le traitement de base effectué n'est pas identique pour les 2... Je vais regarder cette fonction évoquée par Malalam

$cle_chaine_rech = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_recherchee)));

J'ai donc ajouté :

$cle_chaine_cont = strtolower(trim(str_replace(array("!", "?", ",", ";", "*" ), "", $chaine_de_contenu)));

De plus les accents ne sont pas éliminés avant comparaison...

Commentaire de vduffaut le 19/02/2007 21:53:33

Et je vais même plus loin en utilisant la fonction similar_text qui calcule directement ce pourcentage...

similar_texte($chaine1,$chaine2,$poucent);

en utilisant :

$chaine1 = sansAccents(stripslashes(strtolower(trim(str_replace(array("!", "?", ",", ";", ".", "-", "(", ")", "[", "]"), "", strip_tags($chaine1))))));

et évidemment le même appel pour $chaine2 !

J'ai aussi remplacé le "*" par un "."
et ajouté "-", "(", ")", "[", "]"

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

compter les clics sur un lien [ par omnikod ] je voudrais savoir combien de fois tel ou tel lien a été cliqué (pour des download par exemple) c possible ? comment ? Compter des fichiers.... [ par FleX ] Alors voila. je voudrais me faire un script php3 qui compte le nombre de fichiers dans un dossier et que le resultat soit mis dans une variable, que j Couleur de mots cles dans une var [ par Arnaud ] Bonjour ke voulais savoir comment on fait pour changer la couleur des mots cles dans un var par ex print je voudrais qu'il soit bleu mais si je met // Compter les chiffre d'une colonne dans MySQL [ par Neozix ] Bonjour,Voila je souhaiterais compter les valeurs que j'ai dans une colonne, c'est une colonne qui contient des nombres de cd. cd -----1367je souhait compter le nombre de dimanche sur un intervalle de date [ par desrimaisd ] salut,je voudrais savoir si kelk'un connaitrait un moyen de savoir combien il y a de dimanche (en fait d'un jour en particulier, c pareil pour les aut menu et chaines de caractères [ par ayor ] bien le bonjour à tous, je voulais juste poser 2 petites questions : - tout d'abord, sous phpmyadmin, est-il possible de créer des champs de text Extraire que les MAJUSCULES d'une chaines de caracteres [ par sxvirus ] Bonsoir,Je cherche à extraire que les MAJUSCULES d'une chaines de caracteres mais je n'y arrive pas.Avez vous une solution , MERCI d'avance. remplacer strok par ereg [ par apz ] salut,j'utilise strok pour recuperer des sous-chaines d'une ligne dans un fichier.mais je voulais remplacer le strok (pour eviter les boucles et ainsi Découpage de chaines [ par stephtbesy ] Bonjour tout le monde,voilà mon prb... il n'y a pas de fonction lastIndexOf en php.Je souhaiterais en effet prendre juste le nom du fichier que j'uplo codes des chaines cryptées [ par fado0 ] bonjour,je cherche un code pour decryptées les chaines numeriques ou un logiciel ou un site ou je peux trouver une réponcemerci de votre aide


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,103 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales