Rechercher une chaine qui ressemble à une autre en SQL

Rechercher une chaine qui ressemble à une autre en SQL - SQL/NoSQL - Programmation

Marsh Posté le 27-12-2016 à 17:22:12    

Bonjour je suis en train de créer une sorte d'encyclopédie avec des sujets sur plusieurs thèmes.
J'ai donc une barre de recherche ou j'entre la recherche et avec LIKE dans la requête ça fonctionne bien, sauf que LIKE s'applique dans le cas ou une partie de la chaine est dans la base.
Dans mon cas a moi si j'ai dans ma base un titre "Bienvenue à tous sur le forum" par exemple et que j'entre le mot forum ça fonctionne sauf que si j'entre "Bienvenue sur le forum" ça ne me donnera aucun résultat car cette chaine n'est pas une partie de la chaine de ma base.
Plus clairement je veux faire une recherche approximative (je pense que les moteurs de recherche fonctionnent comme ça)
Ma requête "select * from table where nom LIKE '%".$search."%' or description LIKE '%".$search."%' order by id desc";
Merci d'avance pour vos réponses !  :)


Message édité par yrom le 27-12-2016 à 17:22:49
Reply

Marsh Posté le 27-12-2016 à 17:22:12   

Reply

Marsh Posté le 27-12-2016 à 17:48:18    

J'ai fait un truc similaire : la détection de tickets d'incidents dont le contenu est proche/similaire à d'autres.
C'est basé sur l'algo LSA ( https://fr.wikipedia.org/wiki/Analy [...] ue_latente ) mais je me suis arrêté avant de faire la SVD. Donc j'ai juste une matrice de corrélation entre des tickets. Dans ton cas, il faudrait faire la même chose entres des titres de tes articles et la chaîne de recherche.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-12-2016 à 17:59:08    

La tu m'as perdu :p
J'ai trouvé quelque chose qui à l'air de marcher c'est de décomposer la chaine en tableau et de faire une boucle qui ajoute des "or champ = 'valeur' " je sais pas si il y a plus optimisé, quelqu'un à mieux?
En fait j'ai oublié de dire que je travaille en PHP.

Reply

Marsh Posté le 27-12-2016 à 23:02:41    

Mon algo LSA est aussi codée en PHP + Mysql. L'avantage de l'algo LSA, c'est qu'il n'est pas sensible à la conjugaison des verbes, au noms communs au pluriel ou féminin puisqu'il intègre une étape de lemmatisation. Moi, je l'ai faite via la BD Lexique.org : http://www.lexique.org/telLexique.php.
 
Après, y'a une étape de calcul du Tf-idf : https://fr.wikipedia.org/wiki/TF-IDF
 
Puis on calcule les covariances entre les documents, à partir de la matrice où, en ligne, tu as les termes, c'est-à-dire les mots lemnisés et en colonne, les documents (dans ton cas, les titres d'articles) ce qui permet d'avoir le taux de corrélation entre chaque document. A noter qu'on peut calculer les covariances entre les termes : dans ce cas, on a le taux de proximité entre des termes, ce qui peut être intéressant si on veut faire de la recherche étendue à partir d'un terme saisi par l'utilisateur et qu'on incorpore des termes proches à ce terme dans la recherche pour trouver plus de résultats ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed