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 :

Distance de Levenshtein sur un tableau de chaines


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Points : 143
    Points
    143
    Par défaut Distance de Levenshtein sur un tableau de chaines
    Bonjour;
    j'ai une application matlab qui génère un fichier txt contenant des chaines de caractère séparé par des espace, ci dessous l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sad neuf plus zero sad six moin trois sad moin moin par_fer sin par_ouv dal
    je veux le comparer avec un fichier txt que je défini moi même contenant aussi des chaines séparées par des espace, ci dessous l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sin neuf plus un sin six moin deux sin egale par_fer sin par_ouv dal
    je veux utiliser la distance de levenshtein si c'est fesable.
    d'avance merci

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Cela est totalement possible. Il existe différente implémentation de cet algorimthe déjà près à l'emploie !

    Ici : http://rosettacode.org/wiki/Levenshtein_distance , tu trouvera les différentes implémentations de cette fonction.

    Voici un exemple d'utilisation sur ton exemple :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    package org.k.developpez.forum;
     
    /**
     * @author pkolodziejczyk
     * Exemple d'utilisatation de la distance de levenshtein
     * Basé sur le code source présent sur :
     *              http://rosettacode.org/wiki/Levenshtein_distance#Java
     * Utilisant du sujet suivant :
     *              www.developpez.net/forums/d1514493/general-developpement/algorithme-mathematiques/algorithmes/distance-levenshtein-tableau-chaines/
     */
    public class Levenshtein {
     
    	public static int distance(String a, String b) {
    		a = a.toLowerCase();
    		b = b.toLowerCase();
    		// i == 0
    		int[] costs = new int[b.length() + 1];
    		for (int j = 0; j < costs.length; j++)
    			costs[j] = j;
    		for (int i = 1; i <= a.length(); i++) {
    			// j == 0; nw = lev(i - 1, j)
    			costs[0] = i;
    			int nw = i - 1;
    			for (int j = 1; j <= b.length(); j++) {
    				int cj = Math.min(1 + Math.min(costs[j], costs[j - 1]), a.charAt(i - 1) == b.charAt(j - 1) ? nw : nw + 1);
    				nw = costs[j];
    				costs[j] = cj;
    			}
    		}
    		return costs[b.length()];
    	}
     
    	public static void main(String[] args) {
    		String input = "sad neuf plus zero sad six moin trois sad moin moin par_fer sin par_ouv dal";
    		String base = "sin neuf plus un sin six moin deux sin egale par_fer sin par_ouv dal";
    		System.out.println("distance(\"" + input + "\",\n\t \"" + base + "\") = " + distance(input, base));
    		String[] data = input.split(" ");
    		String[] arrayBase = base.split(" ");
    		for (int i = 0; i < data.length && i < arrayBase.length; i++)
    			System.out.println("distance(" + data[i] + ", " + arrayBase[i] + ") = " + distance(data[i], arrayBase[i]));
    	}
    }
    Voici le résultat :
    distance("sad neuf plus zero sad six moin trois sad moin moin par_fer sin par_ouv dal",
    "sin neuf plus un sin six moin deux sin egale par_fer sin par_ouv dal") = 23
    distance(sad, sin) = 2
    distance(neuf, neuf) = 0
    distance(plus, plus) = 0
    distance(zero, un) = 4
    distance(sad, sin) = 2
    distance(six, six) = 0
    distance(moin, moin) = 0
    distance(trois, deux) = 5
    distance(sad, sin) = 2
    distance(moin, egale) = 5
    distance(moin, par_fer) = 7
    distance(par_fer, sin) = 7
    distance(sin, par_ouv) = 7
    distance(par_ouv, dal) = 6
    Note : Si tu veux réalisé cela via matlab , je te conseil de voir ce code :
    https://github.com/benhamner/Metrics.../levenshtein.m

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre habitué Avatar de kawther
    Inscrit en
    Avril 2006
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 307
    Points : 143
    Points
    143
    Par défaut
    infiniment merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/08/2011, 13h06
  2. Traitement sur un tableau de chaines de caratères
    Par Anduriel dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/08/2011, 12h26
  3. Probleme avec malloc sur tableau de chaine
    Par grex1 dans le forum C
    Réponses: 2
    Dernier message: 12/09/2010, 22h36
  4. malloc sur tableau de chaine
    Par ishikawa dans le forum C
    Réponses: 13
    Dernier message: 27/04/2007, 14h24
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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