Bonjour,

Ma question relève plus de l'algorithmie que du MYSQL, mais je ne sais pas trop ou poster.

Voici la problèmatique:

Je dois "rapprocher" des chaines de caractères entre elles en fonction de leur similitude et donner un score de rapprochement pertinent qui exprimerait la qualité de ce dernier.
Après avoir lui le tutoriel de sqlpro (http://sqlpro.developpez.com/cours/s...aisons-motifs/) sur la comparaison de motifs,
j'ai d'abord utilisé les distances existantes entre chaines de caractères (Hamming, Levensthein, Inférence, Jaro-Winkler, etc.).
Cependant, ces dernières ne me satisfont pas totalement. En effet elles sont bien adaptées aux mots simples, mais pour des chaines de plusieurs mots, plus le nombre de mots augmentent, moins les résultats sont significatifs.
J'aimerais donc savoir s'il existe un algorithme (plus complexe qu'un contains) permettant de rechercher un ensemble de mots clefs (ou formes fléchies et parties de ces mots clefs) dans une chaine de caractères tout en renvoyant un score global de similitude.
Est ce qu'un simple "match against" donnerait des résultats satisfaisants pour ce type de problème?

Un exemple sera peut être plus clair:

Voici 2 libellés que cet algo devrait rapprocher avec un bon score:

Libellé à rapprocher: "Clio ess 75 chvx"
Libellé type: "Renault Clio 2 essence 75 chevaux"

Pour l'instant j'ai un algo maison (trop simpliste):

1) Extraction des mots clefs et numériques sur libellé à rapprocher:
- LMC= {Clio, ess, chvx, 75}
2) Conversion des formes fléchies (parmi les mots clefs extraits) en formes complètes
- ess -> essence
- chvx -> chevaux
=> LMC = {Clio, essence, chevaux, 75}
3) Recherche des mots clefs (avec un contains) dans le libellé type
4) Score = nb de mots clefs trouvés/nb de mots clefs
Les problèmes majeurs de ce dernier sont
l'étape 2 => nécessite la mise en place de dictionnaires de formes fléchies (long et fastidieux)
étape 3 et 4 => trop simplistes. Si un mot clef extrait (ex: essen.) ne fait pas partie du dictionnaire, il ne sera pas "rapproché" de essence
et donc n'entrera pas dans le score alors que les libellés sont proches.

Le but serait de regrouper les étapes 2 et 3 en recherchant directement les mots clefs bruts (ess, chvx) dans la chaine de caractères en attribuant un score si un mot ressemblant (ex: ess <-> essence) a été détecté (sur le même principe que les distances entre chaines: Jaro, Levensthein, etc.)

J'espère avoir été clair.
Je ne suis pas à la recherche d'une solution clef en main, mais de pistes pour pouvoir avancer sur ce développement....

Merci d'avance.