IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Matching entre chaines de caractères


Sujet :

Algorithmes et structures de données

  1. #1
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut Matching entre chaines de caractères
    Bonjour,

    J'ai effectué quelques recherches sans obtenir satisfaction et finalement j'ai pensé poser mon "problème" sur ce forum.

    Je cherche des liens, des algos, du code, bref tout ce qui me premettrai d'atteindre mon but qui, en gros, de déterminer par exemple un pourcentage (0-100% donc) de "matching" entre 2 chaines de caractères (qui peuvent être des phrases, rarement un seul mot).

    J'espère que ce peu d'informations est suffisant, je ne sais pas trop comment l'expliquer plus simplement.

    Si vous avez des idées ou des informations je suis preneur.
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Pourrais-tu préciser ce que tu entends par "pourcentage" ?

    Par exemple, si j'ai ces deux chaines : "aa" et "ab", alors elles sont "similaires" à 50% ?
    Et en revanche, "aab" et "aac" sont similaires à 66.666666 % ?

    Si c'est cela, est-ce que l'ordre compte ?
    par exemple, est-ce que "aba" est 100 % similaire à "baa", ou bien à 33.33 % ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Où bien souhaites-tu vérifier la concordance seulement entres les mots de la chaîne de caractères plutôt que les lettres.
    Par exemple :

    "Le gentil programmeur" comparé à "Le gentil développeur" concordent à 66,66 %?
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    C'est cela efficks, je cherche à mesurer (pas forcément avec un pourcentage, juste une idée qui me passait par le système central ) la concordance entre 2 chaines.

    En fait, j'ai une liste de questions et une liste de réponses à ces questions, et je souhaite retrouver dans un dictionnaire les similitudes avec des questions/réponses qui ont déjà été utilisées afin de faire le lien entre des questionnaires, histoire de "macher" le travail de recherche je voudrai donc afficher les chaines du dictionnaire dans l'ordre "de la chaine qui concorde le plus à celle qui concorde le moins"
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Points : 35
    Points
    35
    Par défaut
    Dans la boite où je travail on a mis en place un FIC (Fichier Information Client), où nous avons du regroupper les personnes provenants de différentes sources. Nous avions plusieurs algorithmes mais la base était ce que l'on appelle le "soundex", pour comparer deux prononciations pareils.

    Ex : Rémi et Rémy vont matcher avec un algo comme celui-ci.

    L'algo de base ne donne pas de pourcentage mais il existe plusieurs versions (amélioré et adapter à une langue en particulier : Anglais, Français...) de cette algorithme que tu peux trouver sur le web.

    Nous l'avons utiliser pour comparaison des adresses je ne sais pas son efficaté pour comparaison de question/réponse, ceci me semble beaucoup plus complexe.

    Research

  6. #6
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Merci Research, si tu retrouves le nom de cet algorithme, tu me fait signe stp ?

    Sinon de mon côté j'ai trouvé un exemple d'implémentation de l'algorithme de Levenshtein qui ne me parait pas très probant pour des chaines de plusieurs mots après quelques tests mais j'en ai discuté avec un collègue et je pourrai faire un processus comme suis :

    - Chaque chaine de caractère sera décomposée, chaque mot séparé par un espace sera comparé individuellement
    - chaque mot sera passé au singulier (pas de 's' ou de 'x' à la fin par exemple) puis au masculin (pas de e à la fin)
    - suppression des caractères spéciaux : accents, cédilles, étoiles, underscores, etc
    - suppression des lettres doublons, par exemple le mot 'correction' deviendra "corection'
    - comparaison de chaque mot de la chaine 1 avec chaque mot de la chaine 2 en utilisant l'algo de Levenshtein qui donne un indice de concordance entre les 2 chaines / mots
    - calcul d'un taux de concordance en utilisant les indices donnés par l'algo, du travail à faire la dessus pour d"terminer la méthode la plus intéressante

    voilà où j'en suis pour l'instant, qu'en pensez vous ?
    si vous avez des conseils ou autre critique à faire n'hésitez pas, je suis preneur
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Avis personnel :
    Levenshtein est très bien (mais consommateurs de ressources) pour les mots, pour les phrases j'ai des doutes ; en tout état de cause, je commencerais par transformer les deux phrases en codage Métaphone (Google), qui me paraît plus adapté que SOUNDEX pour la suite, puis j'appliquerais Levenshtein sur les transformées.

    Le Métaphone original étant basé sur le prononciation anglaise, il faut l'adapter (peut-être google) pour le français.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Points : 35
    Points
    35
    Par défaut
    Le terme Soundex remonte à 1918. Le premier algorithme de ce type a été inventé par Margaret O’Dell et Robert C. Russell, probablement à cause des problèmes liés au recensement américain.
    http://sqlpro.developpez.com/cours/soundex/

    À ce lien tu trouveras tous ce qui concerne le Soundex. L'algo Levenshtein et l'algo Metaphone sont un dérivés de Soundex. Mais aucun de ces algorythmes n'est utilisables sans modification au contexte des données et surtout ne donne aucun pourcentage. Habituellement de plus, on cré des fonctions de nettoyage avant d'appliquer un algo de type Soundex. Bref, c'est une base pour construire.

    Research

  9. #9
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Oui ça c'est excellent, Merci Research

    je vais voir pour développer un process de découpage des chaines pour les comparer mot à mot en utilisant Soundex2 que je vais devoir adapter en C++

    en tout cas super le cours, il est bien complet, bien détaillé et montre des résultats en application réelle donc on peut se faire une idée précise de ce que cela donne

    merci encore, super le lien 8)
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauter ligne entre chaine de caractère
    Par cre31400 dans le forum C++
    Réponses: 7
    Dernier message: 09/07/2008, 16h29
  2. Egalité entre chaine de caractère
    Par Invité dans le forum Qt
    Réponses: 13
    Dernier message: 05/02/2008, 21h12
  3. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  4. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 12h16
  5. Entrée a partir d'une chaine de caractère
    Par Spartan03 dans le forum C
    Réponses: 5
    Dernier message: 18/03/2006, 19h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo