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

  FORUM HardWare.fr
  Programmation
  PHP

  Recherche de ressemblances entre chaines de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recherche de ressemblances entre chaines de caractères

n°534658
L0k
Posté le 08-10-2003 à 18:51:30  profilanswer
 

Je tiens un liste de film dans une base de donnée MySQL et j'aimerais savoir si il existe des fonction qui permettent de tester la ressemblance d'une chaine de caractère avec une autre, pour éviter les doublons dans ma liste. J'ai regardé dans la doc mais je n'ai pas trouvé de fonction qui me convenaient, il en a mais pour l'anglais et vu que c un script en fr..  
 
Ex. Si dans la base de donnée il y a ( Daredevil ) et que qqun essaie d'ajouter ( Dardevil ), il faudrais que la fonction détecte une ressemblance..
 
Existe t'il un moyen en php ? Sans pour autant tuer le serveur qui héberge le script ?

mood
Publicité
Posté le 08-10-2003 à 18:51:30  profilanswer
 

n°534671
omega2
Posté le 08-10-2003 à 19:02:30  profilanswer
 

il y a toujours moyen de le faire, mais ca sera surement plus lourd que des fonctions faites en assembleur. :p
De manière, théorique, il faut transormer le tesxte saisie en codes phonétique et faire une comparaison sur la version "phonétique" du texte.
 
Bonne chance en tout cas pour le faire sans erreur et sans "time out". ;)

n°534674
L0k
Posté le 08-10-2003 à 19:04:39  profilanswer
 

C'est aussi ce que je me disait.. Mouais, bah je v demandé de l'aide à 2 3 potes je penses.. sinon ça va pas aller..
 
Sinon pas d'autres solutions ?

n°534808
porksoda
Posté le 08-10-2003 à 21:15:02  profilanswer
 

et strstr()? Tu pourrais détecter si l'utilisateur veut entrer "SUPERMAN II" lorsque dans la base il y a déja "LE SUPERMAN 2" et confirmer s'il veut le rentrer ou non.
 
Tu peux faire un explode() sur la chaine entré pour vérifier mot à mot aussi.
 
J'sais pas si j'suis dans l'coup mais bon... Voila mon grain de sel  :pt1cable:


Message édité par porksoda le 08-10-2003 à 21:15:24
n°534943
Hermes le ​Messager
Breton Quiétiste
Posté le 08-10-2003 à 23:32:31  profilanswer
 

C'est pas une trop mauvaise idée.
 
On peut à partir de là faire une vérif des lettres de chaque mot et tilter à partir de 90% de lettres communes pour les mots de plus de 10 lettres par exemple, en plus de ce qui a déjà été dit...
 
Mais bon , de toutes manières, à l'arrivée, il faudra juste mettre un message du genre : vérifier que ce film n'a pas déjà été rentré, parce que un ordinateur pour le moment n'a aucune culture cinématographique hein...

n°534978
JWhy
je peux plier (héhé)
Posté le 09-10-2003 à 07:00:13  profilanswer
 

y'a bien la fonction mySQL SOUNDEX
et tu as la meme en PHP, mais c'est pas dit que ca fasse ce que tu veux vu que c'est en anglais :/
 
 
une autre solution serait d'utiliser similar_text

Code :
  1. <html><body>
  2. <?
  3. $w1 = "Daredevil";
  4. $w2 = "Dardevil";
  5. $c = similar_text($w1, $w2, &$p);
  6. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  7. $w1 = "Le Superman II";
  8. $w2 = "Superman 2";
  9. $c = similar_text($w1, $w2, &$p);
  10. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  11. $w1 = "Ca n'a rien a voir";
  12. $w2 = "Vraiment queudalle!";
  13. $c = similar_text($w1, $w2, &$p);
  14. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  15. ?>
  16. </body></html>


qui te donnera

Lettres communes entre 'Daredevil' et 'Dardevil': 8 (94.117647058824%)
Lettres communes entre 'Le Superman II' et 'Superman 2': 9 (75%)
Lettres communes entre 'Ca n'a rien a voir' et 'Vraiment queudalle!': 6 (32.432432432432%)


En fixant un pourcentage plus ou moins elevé, tu devrais avoir des resultats convenables...
 
Par contre comme l'a dit hermes, ne fait pas la selection automatique ... mets plutot un message affichant la liste des films "ressemblants" et laisse l'utilisateur faire son choix parmi ceux la (ou d'ajouter une nouvelle fiche, si le film n'existe pas)


Message édité par JWhy le 09-10-2003 à 07:04:41

---------------
www.alliancefrancophone.org ... Home is where the heart is
n°535065
neogally
Battle Angel Alita
Posté le 09-10-2003 à 11:00:47  profilanswer
 

JWhy a écrit :

y'a bien la fonction mySQL SOUNDEX
et tu as la meme en PHP, mais c'est pas dit que ca fasse ce que tu veux vu que c'est en anglais :/
 
 
une autre solution serait d'utiliser similar_text

Code :
  1. <html><body>
  2. <?
  3. $w1 = "Daredevil";
  4. $w2 = "Dardevil";
  5. $c = similar_text($w1, $w2, &$p);
  6. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  7. $w1 = "Le Superman II";
  8. $w2 = "Superman 2";
  9. $c = similar_text($w1, $w2, &$p);
  10. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  11. $w1 = "Ca n'a rien a voir";
  12. $w2 = "Vraiment queudalle!";
  13. $c = similar_text($w1, $w2, &$p);
  14. echo("Lettres communes entre '$w1' et '$w2': $c  ($p%)<br/ >\n" );
  15. ?>
  16. </body></html>


qui te donnera

Lettres communes entre 'Daredevil' et 'Dardevil': 8 (94.117647058824%)
Lettres communes entre 'Le Superman II' et 'Superman 2': 9 (75%)
Lettres communes entre 'Ca n'a rien a voir' et 'Vraiment queudalle!': 6 (32.432432432432%)


En fixant un pourcentage plus ou moins elevé, tu devrais avoir des resultats convenables...
 
Par contre comme l'a dit hermes, ne fait pas la selection automatique ... mets plutot un message affichant la liste des films "ressemblants" et laisse l'utilisateur faire son choix parmi ceux la (ou d'ajouter une nouvelle fiche, si le film n'existe pas)


 
je pense que c'(est la meilleure solution :jap:

n°535123
omega2
Posté le 09-10-2003 à 12:03:56  profilanswer
 

Meillieure solution a première vue, certe.
Mais si tu commences a avoir pleins de film, tu va finir par tuer le serveur ou du moins ton script, tout simplement par ce que là t'es obligé de récupérer toute la liste des film déjà conus et de les tester un par un.
 
Mais bon, pour le début, c'est la meillieure solution ... et ca te laissera le temps de préparer un système où les comparaisons seront faites directement par la base de donnée. ;)

n°535259
L0k
Posté le 09-10-2003 à 15:07:56  profilanswer
 

directement par la base de donnée ? mhh ça m'intéresse de savoir ce que tu entends par la juste par curiosité..

n°535290
omega2
Posté le 09-10-2003 à 15:58:28  profilanswer
 

Ce que je veux dire, c'est tout simplement qu'un jour où l'autre tu auras besoin d'un système qui s'exécute plus vite que de faire un similar_text pour chaque film conus. Du coup, tu devras trouver un mouyen pour que les comparaisons soient faites par mysql, oracle, sybase ou autre base de donnée en fonction de celle que t'utilises.
Les bases de données sont capable de faire très vite des comparaisons simple sur des chaines de caractère, mais par contre  je penses pas que la pluspart d'entre elles disposent de fonction telle que similar_text.
En utilisant un système de comparaison des sonorités, il devrait être possible d'obtenir un système de recherche plus rapide que la récupération de la totale + similar_text sur chaque titre conus. ;)
 
Voilà ce que j'entendais par là. ;)

mood
Publicité
Posté le 09-10-2003 à 15:58:28  profilanswer
 

n°535358
L0k
Posté le 09-10-2003 à 16:44:55  profilanswer
 

ha okidoki ! ouais ben je suis pas encore a se niveau de maîtrise.. mais je cracherais pas dessus.. pis niveau rapidité ça ferais du bien que ça soit fait par la bdd c sur.. j'utilise mysql pour le mom ;)

n°535380
omega2
Posté le 09-10-2003 à 17:01:35  profilanswer
 

Le temps que t'ai besoin de plus rapide que la solution du similar_text, t'auras peut être atteint un niveau sufisant pour ça.
Tel que je le voit moi, un système de sonorité, corespond a une série de substring afin de déterminé la sonorité de chaque sillabe suivit par la création d'un "mot" corespondant a la sonorité su mot de départ. ;) Par contre, j'ai pas vu de code fesant ça pour la langue francaise. (pêut être qu'il y a ce qu'il faut pour le faire dans des bouquins d'études d'ortophoniste. )

n°535477
neogally
Battle Angel Alita
Posté le 09-10-2003 à 20:09:59  profilanswer
 

une procedure stocke alors ;)  
cela s'execute du cote serveur c beaucoup plus rapide que de faire des similar text mais dans ce cas il faut abandonner MySQL


---------------
Battle Alita Angel
n°535634
JWhy
je peux plier (héhé)
Posté le 09-10-2003 à 22:05:28  profilanswer
 

omega2> il y a du code pour un SOUNDEX en francais mais ca se passe coté client (PHP) donc moyen :/

n°535755
omega2
Posté le 09-10-2003 à 23:48:53  profilanswer
 

Ben la transformation ce fait en php et ensuite, les comparaisons on peut les faire faire par la base de donnée. Je penses que ca diminue quand même pas mal le temps total d'exécution par rapport a du 100% php. ;)


Message édité par omega2 le 09-10-2003 à 23:49:50
n°535759
zozoll
Posté le 10-10-2003 à 00:23:58  profilanswer
 

Extrait de la doc de SQL Server :
 

Citation :

Examples
This example shows the SOUNDEX function and the related DIFFERENCE function. In the first example, the standard SOUNDEX values are returned for all consonants. Returning the SOUNDEX for Smith and Smythe returns the same SOUNDEX result because all vowels, the letter y, doubled letters, and the letter h, are not included.


 
En gros, essaye de faire une fonction qui vire toutes les voyelles, le y, le h, les doubles lettres, et compare le resultat.
 
Pour ton exemple avec Daredevil :  
 
Daredevil => Drdvl
Dardevil => Drdvl
 
On voit bien que le "soundex" des deux mots est identique, c'est peut etre une piste...


Message édité par zozoll le 10-10-2003 à 00:26:32
n°535771
gilou
Modérateur
Modosaurus Rex
Posté le 10-10-2003 à 01:15:00  profilanswer
 

Il y avait eu il y a qques années un type qui avait publié un algo superieur au soundex dans les Communications de l'ACM.
Faudrait voir de ce coté la, son algo etait assez simple a implementer.
Vas voir aussi du coté de phonix et du double metaphone: http://www.codeproject.com/string/dmetaphone1.asp
A+,


Message édité par gilou le 10-10-2003 à 01:22:38

---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°535851
jagstang
Pa Capona ಠ_ಠ
Posté le 10-10-2003 à 10:13:02  profilanswer
 

C'est un peu lourd pour éviter les doublons dans un BD de film.... et pis comment tu fais avec 2 films différents qui ont un nom similaire (voir le même nom)
 
Du style Rocky 1, 2, 3, 4, ...
La ligne verte / la ligne rouge
blanches fesse et les 7 mains :)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°535858
neogally
Battle Angel Alita
Posté le 10-10-2003 à 10:19:26  profilanswer
 

JagStang a écrit :

C'est un peu lourd pour éviter les doublons dans un BD de film.... et pis comment tu fais avec 2 films différents qui ont un nom similaire (voir le même nom)
 
Du style Rocky 1, 2, 3, 4, ...
La ligne verte / la ligne rouge
blanches fesse et les 7 mains :)


 
 [:ddr555]  [:yamusha]

n°536093
L0k
Posté le 10-10-2003 à 13:54:30  profilanswer
 

bah c'est pour ça que de toute façon avant que le code fasse qqch il demandera l'autorisation à M. le surfeur :) ben merci pour vos idées en tt cas !

n°536138
jagstang
Pa Capona ಠ_ಠ
Posté le 10-10-2003 à 14:30:43  profilanswer
 

Si tu veux. Moi j'appelle ça tuer un moustique au lance-flammes


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°536575
omega2
Posté le 10-10-2003 à 20:56:11  profilanswer
 

JagStang : Au moins ca évites les "doublons a la con". :p

n°536687
Osama
Posté le 10-10-2003 à 22:24:46  profilanswer
 

Y a une distance qui a été définie pour calculer ce genre de similarité, ça s'appelle distance de mahalanobis. Implémente l'algo dans une fonction à part, et après tu l'appelles quand tu en as besoin ...

mood
Publicité
Posté le   profilanswer
 


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

  Recherche de ressemblances entre chaines de caractères

 

Sujets relatifs
Recherche doc sur Dreamwaver et ActionScriptFaire 1 recherche sur 1 frame dans 1 autre frame [Résolu, code déposé]
Nombre de caractères dans une requète et drivers JDBCmoteur de recherche interne api google
Recherche bibliothèque java de visualisation de statsrecherche bouqin sur Php et MySql
arbre de rechercherecherche entre deux dates ?
Recherche outils de modelisation de mcd :/Recherche de motif dans un tableau 2d
Plus de sujets relatifs à : Recherche de ressemblances entre chaines de caractères


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)