Distance entre deux chaines - PHP - Programmation
Marsh Posté le 15-03-2007 à 23:54:42
Je suis pas sûr de comprende.
Donne un exemple simple de ce que ta ou tes regexp fait (font), et de ce que tu voudrais avoir.
Marsh Posté le 16-03-2007 à 00:07:45
Le principe est simple.
J'analyse une page web, je regarde le mot "resolution" et "0000 x 0000 pixel(s)" par exemple. Et je calcul la distance entre ces 2 valeurs trouvées.
Merci
Marsh Posté le 16-03-2007 à 00:20:07
http://fr.wikipedia.org/wiki/Distance_de_Levenshtein
Heu ton exemple il est mauvais : un exemple simple :
chien - niche - chine
hotmail.fr / tohmai.fr
Marsh Posté le 16-03-2007 à 01:36:05
Non, le principe est d'associer des caractéristiques techniques (Reconnu par mots clés) à des valeurs dont les formats sont connus (Poids, taille, etc...). Et calculer la distance en caractère entre ces deux données. A l'origine la chaine complete est une page WEB.
Merci pour cet article !
Florian
Marsh Posté le 16-03-2007 à 02:58:40
strpos($fichier,$resregexp2) - ( strpos($fichier,$resregexp1)+strlen($resregexp1) );
Après avoir vérifié que $resregexp2 est placée après $resregexp1 dans ta page
Marsh Posté le 16-03-2007 à 09:13:59
Perso à l'instinct j'aurais dit comme Gatsu à savoir levenshtein
http://fr2.php.net/levenshtein
Bon après tu en as plein d'autres qui font à peu près le même boulot en php:
http://fr2.php.net/manual/fr/function.similar-text.php ( méthode d'Olivier)
http://fr2.php.net/manual/fr/function.soundex.php ( du D. Knuth dans toute sa splendeur)
http://fr2.php.net/manual/fr/function.metaphone.php ( celle là je connais pas trop)
Mais en lisant plus précisément je dirais que ton besoin est très "spécifique" et que tu risques de devoir coder toi-même cette fonction ..
Marsh Posté le 16-03-2007 à 09:46:39
anapajari a écrit : Perso à l'instinct j'aurais dit comme Gatsu à savoir levenshtein |
Ca sert à calculer la distance en caractères entre 2 mot-clés ça
Je croyais qu'il s'agissait juste de compter le nombre de caractères entre 2 mot-clés dans une page...
Marsh Posté le 16-03-2007 à 09:58:42
Moi de ce que j'ai compris il a un système de "poids" sur certains mots clés et ils souhaitent comparer deux urls en fonction du poid qu'elles contiennent.
Maintenant c'est vendredi matin hein
Marsh Posté le 16-03-2007 à 15:59:34
Tu utilises les balises HTML, (autres ) ou pas ?
Est-ce que t'as une structure de donnee, si oui laquelle ?
Tu parles de distance et en meme temps tu definis aucune unite.
Si t'as pas besoin d'aide il faut le dire hein, sinon il ya toujours le chaleureux manuel ...
Marsh Posté le 16-03-2007 à 17:21:03
Oui, mon message est assez peu explicite... Désolé
Je récupère une page Web, je la nettoie (J'enleve le code HTML plus le contenu de certaines balises inutiles).
Voici deux regex que je vais ensuite appliquer à la page :
/([Pp]ixel(s)?|[Ss]ize)|([Rr]esolution)|([sS]creen)/
/[0-9]{3,4}(\s)?x(\s)?[0-9]{3,4}(\s)?(pixel(s)?|px(s)?)?/
Je regarde la distance en caractère entre toutes les valeurs trouvés et le couple qui a la plus petite distance est la bonne valeur. En gros...
La similitude entre deux mot ne m'interresse que peu à ce niveau.
Merci pour vos messages,
Florian
Marsh Posté le 17-03-2007 à 03:47:58
T'as :
Code :
|
Qui te sortent des resultats sous forme de tableau ( de taille differente )
Code :
|
Faut placer le sens de lecture comme parametre de la fonction, pour diminuer operations ( dodo moi ).
Essayer de placer ca dans une recherche au meilleur cout marche pas tres bien vu que le coup est la distance (strpos).
Sinon comme alternative tu as :
- changer le pattern pour matcher pixel et resolution avec le spam au milieu et donc sa longueur
- faire une recherche en profondeur en limitant le nombre de bouclage ( $counter > 10 ) break;
- discuter la taille de l'ensemble de recherche ( diminuer la taille du fichier ou la taille des tableau de preg)
Marsh Posté le 17-03-2007 à 14:03:15
lkolrn a écrit : Ca sert à calculer la distance en caractères entre 2 mot-clés ça |
Ca calcule la "distance" entre deux chaînes de caractères en fonction de certains critères. Levenshtein est basé sur le nombre de substitutions d'une chaîne à l'autre, alors que Soundex est basé sur la distance phonétique (plus des chaînes se ressemblent au niveau prononciation et plus elles seront proches), idem pour Metaphone qui a été développé face aux manques et problèmes de Soundex mais spécialisé sur l'anglais (et Double Metaphone, une version encore plus avancée de Metaphone).
Il y a aussi la distance de Hamming entre des chaînes si tu veux, mais ça ne permet de comparer que des chaînes de même longueur.
Marsh Posté le 18-03-2007 à 17:45:13
Bonjour,
Merci pour vos réponses. J'ai trouvé sur le site de PHP un element de réponse :
http://fr.php.net/strpos
Florian
Marsh Posté le 18-03-2007 à 19:50:27
Nan mais ça c'est juste pour la position d'un caractère (ou chaine de caractères) dans une chaine.
Marsh Posté le 19-03-2007 à 21:14:03
Quiqui c'est qu'avait bien compris la question du monsieur ? Quoique je suis toujours pas sûr...
masklinn a écrit : Ca calcule la "distance" entre deux chaînes de caractères en fonction de certains critères. Levenshtein est basé sur le nombre de substitutions d'une chaîne à l'autre, alors que Soundex est basé sur la distance phonétique (plus des chaînes se ressemblent au niveau prononciation et plus elles seront proches), idem pour Metaphone qui a été développé face aux manques et problèmes de Soundex mais spécialisé sur l'anglais (et Double Metaphone, une version encore plus avancée de Metaphone). |
Merci mais ma question exprimait plus un doute profond sur la réponse de Gatsu et d'anapajari (sauf leur respect ) qu'une réelle méconnaissance de Levenshtein ou Soundex (par contre je connaissais po Metaphone "1" et "2" ). Enfin, je le répète je suis toujours pas certain, mais je crois que le but ici revenait tout simplement à calculer la taille de la chaîne entre 2 chaînes particulières
Marsh Posté le 03-04-2007 à 05:00:35
Bonjour,
Me revoici... J'ai pas mal avancé depuis !
Juste pour vous remercier, ca m'a aiguillé !
Florian
Marsh Posté le 15-03-2007 à 22:53:23
Bonjour,
Voilà, j'ai des regex qui me permettent de detecter la présence de mot clés, et d'autres qui me permettent de récupérer certaines valeurs correspondant aux mots-clés.
Mais je voudrais du même coups, compter le nombre de caractères qui les séparents, car les regex renvoient plusieurs valeurs.
Auriez-vous une idée ou une piste à suivre ?
Merci bcp,
Florian