Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1404 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Distance entre deux chaines

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Distance entre deux chaines

n°1529219
florian95
Posté le 15-03-2007 à 22:53:23  profilanswer
 

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

mood
Publicité
Posté le 15-03-2007 à 22:53:23  profilanswer
 

n°1529255
sielfried
Posté le 15-03-2007 à 23:54:42  profilanswer
 

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.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1529263
florian95
Posté le 16-03-2007 à 00:07:45  profilanswer
 

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

n°1529270
gatsu35
Blablaté par Harko
Posté le 16-03-2007 à 00:20:07  profilanswer
 

http://fr.wikipedia.org/wiki/Distance_de_Levenshtein
 
Heu ton exemple il est mauvais : un exemple simple :  
chien - niche - chine
 
hotmail.fr / tohmai.fr

n°1529278
florian95
Posté le 16-03-2007 à 01:36:05  profilanswer
 

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

n°1529282
lkolrn
<comment ça marche?>
Posté le 16-03-2007 à 02:58:40  profilanswer
 

strpos($fichier,$resregexp2) - ( strpos($fichier,$resregexp1)+strlen($resregexp1) );
 
Après avoir vérifié que $resregexp2 est placée après $resregexp1 dans ta page

n°1529318
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-03-2007 à 09:13:59  profilanswer
 

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 ..

n°1529340
lkolrn
<comment ça marche?>
Posté le 16-03-2007 à 09:46:39  profilanswer
 

anapajari a écrit :

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)


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... [:airforceone]

n°1529350
anapajari
s/travail/glanding on hfr/gs;
Posté le 16-03-2007 à 09:58:42  profilanswer
 

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 :o

n°1529608
supermofo
Hello World !
Posté le 16-03-2007 à 15:59:34  profilanswer
 

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 ...


Message édité par supermofo le 16-03-2007 à 16:09:51
mood
Publicité
Posté le 16-03-2007 à 15:59:34  profilanswer
 

n°1529649
florian95
Posté le 16-03-2007 à 17:21:03  profilanswer
 

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

n°1529842
supermofo
Hello World !
Posté le 17-03-2007 à 03:47:58  profilanswer
 

T'as :

 
Code :
  1. preg_match($pixr, $file, $pixel);
  2. //et
  3. preg_match($resr, $file, $resolution);
 

Qui te sortent des resultats sous forme de tableau ( de taille differente )

 
Code :
  1. $pixel = array ( 'pixels' , 'px' , 'pxs' );
  2. $resolution = array ( '1024x768', '1280x1024', '800x600', '1244x768' );
  3. $findme = ( count($pixel) >= count($resolution) ) ? $pixel : $resolution;
  4. $negs = ( $findme == $resolution ) ? $pixel : $resolution;
  5. foreach($findme as $needle){
  6. foreach($negs as $neg){
  7. $posneedle = strpos($file, $needle);
  8. $posneg = strpos($file, $neg);
  9. //sens de la lecture de  gauche  a droite ou le contraire
  10. if($posneedle > $posneg){
  11. $res[$needle] = $posneedle;
  12. $res[$neg] = $posneg;
  13. $res['distance'] =  $posneedle - $posneg;
  14. $resp[] = $res;
  15. }
  16. //droite gauche
  17. else{
  18. //idem remplit $resn
  19. }
  20. }
  21. if(!$paramlecture){
  22. return array_merge($resp,$resn);
  23. }
  24. elseif(){
  25. return $resp;
  26. }
  27. else{
  28. return $resn
  29. }
  30. }
 

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)

 



Message édité par supermofo le 17-03-2007 à 04:26:14
n°1529909
masklinn
í dag viðrar vel til loftárása
Posté le 17-03-2007 à 14:03:15  profilanswer
 

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.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1530135
florian95
Posté le 18-03-2007 à 17:45:13  profilanswer
 

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

n°1530171
gatsu35
Blablaté par Harko
Posté le 18-03-2007 à 19:50:27  profilanswer
 

Nan mais ça c'est juste pour la position d'un caractère (ou chaine de caractères) dans une chaine.

n°1530792
lkolrn
<comment ça marche?>
Posté le 19-03-2007 à 21:14:03  profilanswer
 

Quiqui c'est qu'avait bien compris la question du monsieur ? :whistle: 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).
 
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.


Merci mais ma question exprimait plus un doute profond sur la réponse de Gatsu et d'anapajari (sauf leur respect :jap:) 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 [:airforceone]

n°1537599
florian95
Posté le 03-04-2007 à 05:00:35  profilanswer
 

Bonjour,
 
Me revoici... J'ai pas mal avancé depuis !
 
Juste pour vous remercier, ca m'a aiguillé !
 
Florian


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Distance entre deux chaines

 

Sujets relatifs
fopen | 255 caractères | fichier csv avec chaines sup[réglé] fonction de calcul de distance
[RESOLU]comment calculer la distance entre 2 villes (code postaux?) ??Extraction de chaînes avec sscanf et des expressions régulières
Selection de sous chainesFormer le nom d'un objet a partir de chaines de caractères (VB)
Eteindre plusieurs PC à distance sous XP[ RESOLU] Suppression de chaînes de caractères
[batch] Exécuter un batch à distanceProbleme connexion à distance (mysql)
Plus de sujets relatifs à : Distance entre deux chaines


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR