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

PHP & Base de données Discussion :

Ressemblance entre lignes


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut Ressemblance entre lignes
    Salut à tous... J'ai un problème épineux...
    je cherche à trouver via mysql le pourcetage de ressemblance d'une ligne dans une table par rapport aux autres lignes de cette table

    Un petit exmeple pour expliquer

    Admettons que j'ai 4 colonnes
    et un jeu d'essai comme ça

    ligne1 (0,0,0,0);
    ligne2 (0,1,1,1);
    ligne3 (0,0,1,1);
    ligne4 (0,0,0,1);
    ligne5 (1,1,1,0);
    ligne6 (1,1,1,2);
    ligne7 (1,0,1,1);
    ligne8 (0,1,0,0);

    Je voudrai comparer la ligne 1 (ligne de référence) aux autres lignes de la
    table et les classer par pourcentage de ressemblance des colonnes.

    A savoir le classement final serait (ligne = %age de ressemblance à la ligne1)

    ligne4 = 75%
    ligne8 = 75%
    ligne3 = 50%
    ligne2 = 25%
    ligne5 = 25%
    ligne7 = 25%
    ligne6 = 0%

    bref est il possible de faire ça directement en mysql... et si Non, est il possible de le faire en php bien que ça risque de pomper un max de ressources...)

    thnks a lot !
    @++

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    salut, en cherchant je suis tombé sur la "distance de levenshtein" dans des posts ... mais je me demande si ça peut s'appliquer à mon cas et surtout si c'est implémenté dans Mysql nativement...
    ++

  3. #3
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    Salut, j'ai pas cherché au niveau mysql
    je te propose un code que j'ai posé très rapidement :

    Code php : 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
     
    $ligne[1] = array(0,0,0,0);
    $ligne[2] = array(0,1,1,1);
    $ligne[3] = array(0,0,1,1);
    $ligne[4] = array(0,0,0,1);
    $ligne[5] = array(1,1,1,0);
    $ligne[6] = array(1,1,1,2);
    $ligne[7]= array(1,0,1,1);
    $ligne[8]= array(0,1,0,0);
     
    $nb_ligne = count($ligne);
    for($i=2;$i<$nb_ligne + 1;$i++)
    {
    	$arIntersect = array_intersect($ligne[$i], $ligne[1]);
    	$arClassement[$i] = 25 * count($arIntersect);
     
    }
    arsort($arClassement);
    print_r($arClassement);

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Array
    (
        [8] => 75
        [4] => 75
        [3] => 50
        [7] => 25
        [5] => 25
        [2] => 25
        [6] => 0
    )
    Alors bien sûr ça vaux une réflexion d'une minute ^^.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    déjà ça c'est EXCELLENT ! j'ose même pas imaginer si tu réfléchis 5minutes alors ...
    Bon super première piste mais ça m'obligerai à faire un select * et de traiter l'intégralité de ma table via php à chaque fois ...
    alors au début ça irait mais à partir de 5000 enregistrements ça va commencer à ramer je pense ... faut que je trouve un truc via Mysql
    moi je pensais concaténer toutes les colones en une (car il y en aura plus que 4) pour avoir une suite de type 011011011011110001 et comparer ces strings entre elles ... Mais je ne connais pas les fonctions qui vont bien en mysql

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    248
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 248
    Par défaut
    re
    Personne n'aurai une idée en Mysql parce que ça raame trop malheureusement avec cette technique

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 672
    Par défaut
    Citation Envoyé par CaviarNAS Voir le message
    re
    Personne n'aurai une idée en Mysql parce que ça raame trop malheureusement avec cette technique
    montre nous la requête que tu as essayée

Discussions similaires

  1. écart entre lignes d'une table indésiré sous IE
    Par Galkir dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/04/2007, 13h50
  2. Expressions régulières : cibler du texte entre ligne vide, {
    Par lrbabe dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/02/2007, 10h49
  3. Espace involontaire entre lignes d'une image découpée
    Par joviper dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/01/2007, 11h30
  4. Suppression espace entre ligne d'un tableau
    Par Alain15 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 17/08/2006, 12h04
  5. Réponses: 2
    Dernier message: 24/04/2005, 13h17

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