Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/08/2011, 08h08   #1
Membre expérimenté
 
Inscription : février 2004
Messages : 1 301
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 1 301
Points : 527
Points : 527
Envoyer un message via MSN à mister3957
Par défaut Calculer la "différence" entre deux chaînes

Bonjour à tous,

Je possède une table avec des noms de ville et mon application propose la recherche d'une ville par son nom.

Au lieu de me baser sur une strict égalité, j'aimerais proposer à l'utilisateur un jeu de résultats plus ou moins pertinent.

Par exemple s'il tape "Touloe", j'aimerais lui renvoyer :
- Toulon : 92%
- Toulouse : 76%
- Toul : 59%
etc.

Est-ce possible avec PostgreSQL ?

Merci à vous,
A bientôt
mister3957 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 13h39   #2
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 577
Points : 1 209
Points : 1 209
Bonjour,

je crois que ce que tu cherches s'appelle du full text search. Tu peux regarder les fonctions de ranking.
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


Code C :
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char **argv) {
 
    printf("So long, and thanks for the fish, Dennis...\n");
    return 0;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 17h50   #3
Membre expérimenté
 
Inscription : février 2004
Messages : 1 301
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 1 301
Points : 527
Points : 527
Envoyer un message via MSN à mister3957
Merci pour ta réponse.

J'ai lu attentivement et ça à l'air de matcher les mots exacts, en y ajoutant des fonctionnalités de pondération, prise en compte de la longueur du document ainsi que des dictionnaires pour gérer des synonymes, des mots à ignorer etc.

Les données adresses que j'aurai en entrée seront saisies par des utilisateurs de sites web où un opérateur au téléphone, par conséquent, je m'intéresse dans un premier temps aux fautes de frappes ou d'orthographe des mots.

En fait j'aurai besoin de ces fonctionnalités où mon dictionnaire serait les lettres de l'alphabet et qui gérerait le côté consécutif des lettres ainsi que la longueur.

C'est faisable ça ?

Sinon je ferai une fonction, mais utiliser un truc intégrer à PostgreSQL me rassurerait sur les performances..

Merci à toi,
A bientôt
mister3957 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 21h29   #4
Membre expérimenté
 
Inscription : février 2004
Messages : 1 301
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 1 301
Points : 527
Points : 527
Envoyer un message via MSN à mister3957
Je pense que j'ai trouvé mon bonheur avec ceci : http://www.postgresql.org/docs/8.4/s...ystrmatch.html qui implémente la Distance de Levenshtein

J'ai créé une fonction qui part de 100 et soustrait la distance de Levenshtein multipliée par un coefficient d'importance selon le type de donnée (genre se planter de pays est plus important que se planter de ville qui est plus important que se planter de rue puis de numéro). Et pour chacune de ces données, se planter de 3 caractères est plus grave que de se planter de deux caractères.

Merci encore
mister3957 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 22h51   #5
Membre Expert
 
Avatar de kain_tn
 
Homme
Inscription : mars 2005
Messages : 577
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations forums :
Inscription : mars 2005
Messages : 577
Points : 1 209
Points : 1 209
La distance de Levenstein est une bonne méthode pour déterminer le nombre de transformations nécessaires pour passer d'une chaîne à l'autre donc si ton but est de détecter les fautes de frappes, c'est une bonne idée
__________________
Copier c'est copier; voler c'est vendre un CD une vingtaine d'euros!


Code C :
1
2
3
4
5
6
7
#include <stdio.h>
 
int main(int argc, char **argv) {
 
    printf("So long, and thanks for the fish, Dennis...\n");
    return 0;
}
kain_tn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h42.


 
 
 
 
Partenaires

Hébergement Web