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

Langage Java Discussion :

Chaines de caractères


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut Chaines de caractères
    Salut à tous,

    je cherche quelques conseils, idées pour résoudre le problème suivant : Je dois, comparer 2 chaines de caractères, et dire si elles sont identiques, quasi identiques (notion de pourcentage) ou non identiques.

    Par exemple :
    - chaine 1 = Arret de l'impression
    - chaine 2 = Arret impression

    Dans ce cas, je voudrais que l'algo me dise que les chaines sont quasi identiques.

    Idées que j'ai eu :
    - stocker dans un vecteur tous les mots de chaque chaine (tout mot séparé par espace, apostrophe)
    - boucler sur le vecteur 1 et comparer aux mots du vecteurs 2
    - Faire ça pour tous les mots du vecteur 1
    - en fonction du nombre de mots max d'une des 2 chaines, faire le pourcentage


    est-ce que vous trouvez cela raisonnable ou vous voyez autres choses ???

    D'avance merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Bonjour,

    Le problème que je vois avec ta solution, c'est que les chaînes "Arret de l'impression" et "de impression l' Arret" seraient considérées comme identiques, ce qui n'est pas le cas...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    Merci de ta réponse

    Oui effectivement, maintenant que tu le dis

    C'est pour ça que je crois que ça va être la merde comme algo.

    Tu n'aurais pas une idée ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut !

    Peut être avec un map plutôt qu'un vecteur, par exemple

    Map1 : clé/valeur <=> mot/position
    Un/1
    chien/2
    bleu/3

    Un/1
    bleu/2
    chien/3

    @++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    On peut avoir plusieurs fois la même clé dans le Map, car, si cela se comporte comme une Hashtable, je vais avoir le problème, où je trouve plusieurs fois le même mots dans la chaine de caractère.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Excuse moi

    c'est l'inverse, la position d'un mot est unique donc position/mot au lieu de mot/position.

    @++

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    ah OK

    Bon, et bien, je vais essayer de me lancer dans cet algo, mais je le sens mal tout de mêm !

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Un algo qui soit digne de ce nom, malheureusement non.

    L'algo d'EtudiantJm est sans doute un peu mieux, mais là encore, il me semble qu'il y a des failles.

    Ce -> 1
    matin, -> 2
    j' -> 3
    ai -> 4
    mangé -> 5
    une -> 6
    pomme -> 7

    J' -> 1
    ai -> 2
    mangé -> 3
    une -> 4
    pomme -> 5

    Les deux phrases sont quasi identiques mais si on dit que deux mots sont "identiques" lorsque un mot d'une phrase apparaît dans l'autre phrase à une position égale à + ou - 1 mot près, alors les deux phrases précédentes seront considérées comme totalement différentes...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    disons que c'est bien pour ça que je voulais utiliser un vecteur tout simple, car, effectivement, dans ton cas, les phrases ne seront pas considérées comme équivalentes.

    D'où la notion de pourcentage que je voulais inclure.

    Dans ton cas, :
    - la première phrase est constituée de 7 mots
    - la deuxième phrase est constituée de 5 mots

    Dans la mesuren où on trouve 5 mots sur 7, "on peut" considérer que les chaines sont équivalentes

    Il est clair que ce type d'algo ne peut être qu'approximatif !

  10. #10
    Invité
    Invité(e)
    Par défaut
    Oui c'est vrai ! c'est pas simple comme problème...

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut diff
    Bonjour,
    L'utilitaire U**X diff fait a peu près çà, vous pourriez vous en inspirer?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    euh...c'est quoi au juste ??

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Par défaut
    Peut être qu'il faudrait faire en plusieurs fois :
    - On regarde le nombre de mots en communs
    - On regarde le nombre de mots bien placé dans les deux phrases (à un certain nombre de mots près)

    A mon avis il faudrait refaire le deuxième algo plusieurs fois en augmentant petit à petit le nombre de mots de décalage entre les deux phrases.

    Le pourcentage final serait alors le résultat d'un savant calcul selon les résultats des différents algos.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    Je vais découper mes deux chaines de caractères et stocker chaque mot dans un vecteur.

    Je vais boucler sur le vecteur 1 et pour chaque entité du vecteur 2, je vais comparer les mots. De cette comparaison, je vais avoir le nombre de mots identiques (en sachant, qu'il vaut mieux que je fasse des indexOf, car, un equals va passer à côté du cas : "Utilisateur" et "Utilisateurs" avec un S)...

    ensuite, je vais essayer de regarder la position des mots identiques de manière à faire ce que tu m'a suggéré, et là, peut être que ça pourrait à peu prés gazer !!

    Un bon résultat ne pourrait être que le fruit du hasard !

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    En plus, ces deux phrases sont très proches :
    -j'ai mangé une pomme
    -j'ai mangé une pome

    Il faut tenir compte de la "distance" entre les mots, et à partir de là mesurer la "distance" entre les phrases.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    ça se complique là....

    est-ce que quelqu'un sait ce qu'est l'utilitaire :

    "L'utilitaire U**X diff fait a peu près çà, vous pourriez vous en inspirer?"

    mentionné par wiztricks

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Oui, c'est un utilitaire qui fait une comparaison ligne à ligne et qui repère les lignes qui ne sont pas identiques. Ca ne permet pas de mesurer la différence entre deux phrases.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 116
    Par défaut
    Merci verbose pour l'info.

  19. #19
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Il faut utiliser l'algo de calcul de la distance de Levenshtein entre 2 chaînes. Ce qui te permet au passage de calculer ton indicateur de ressemblance.

    Tu as l'algo dans le lien que je t'ai fourni.

    -> il faut que les chaînes à comparer soient courtes.

  20. #20
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Par défaut
    Bonjour a tous
    Tu peux penser a l api REGEX! question de transformer la premiere phrase : Arret d'impression en Arret\s+d\W+impression et comparrer avec Arret impression ( qui va devenir ) arret\s+impression!
    Tu peux garder la trace des motifs interpreté et voir a la fin ( compare entre le nombre des motifs qui font la difference entre les deux mots ) sans se soucier de la sematique qui restera verfié par defaut par la REGEX ! Arret\s+Impression est casiment differente de Impression\s+Arret !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 17h40
  2. Crypter une chaine de caractères
    Par Yabo dans le forum Réseau
    Réponses: 18
    Dernier message: 20/11/2004, 00h04
  3. Réponses: 9
    Dernier message: 17/01/2003, 12h45
  4. Lire Une Chaine De Caractères
    Par Jonathan_Korvitch dans le forum C
    Réponses: 12
    Dernier message: 07/01/2003, 06h37
  5. Réponses: 2
    Dernier message: 06/12/2002, 08h50

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