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 PHP Discussion :

Comparer des chaines semblables [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Comparer des chaines semblables
    Bonsoir,

    j'essaie en vain de trouver le moyen de comparer deux chaines "presque égales".
    Désolé pour mon manque de vocabulaire

    Voilà en gros ce que je souhaite faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $chaine = "Le Seigneur des anneaux : la communauté de l'anneau";
     
    foreach($titres as $titre){
    	if($titre == $chaine){
    		echo $titre;
    		//Ici je voudrais avoir : Seigneur des anneaux - La communauté de l'anneau, Le
    	}
    }
     
    ?>
    Je parcours une liste de chaines (titre de films) celle-ci proviennent de imdb.
    Le problème, c'est que parfois le titre n'est pas réellement le bon.
    Comme dans l'exemple.

    Comment faire pour accepter quand même la chaine qui est quasiment la même, parfois avec un "le" ou "la" à la fin, un ":" à la place d'un "-"...

    J'ai commencé à zieuter le regex, mais là, je crois pas que ça convienne.

    On m'a parlé de soundex, mais je ne connais pas du tout cette technique (bien que j'ai regardé sur la doc ).


    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 28
    Points : 34
    Points
    34
    Par défaut
    il y a cette fonction aussi : similar_text

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci, j'ai trouvé mon bonheur :

    Code : 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
    function similaire($str1, $str2) {
     
        $strlen1=strlen($str1);
        $strlen2=strlen($str2);
        $max=max($strlen1, $strlen2);
        $splitSize=250;
     
        if($max>$splitSize)
        {
            $lev=0;
            for($cont=0;$cont<$max;$cont+=$splitSize)
            {
                if($strlen1<=$cont || $strlen2<=$cont)
                {
                    $lev=$lev/($max/min($strlen1,$strlen2));
    				break;
                }
                $lev+=levenshtein(substr($str1,$cont,$splitSize), substr($str2,$cont,$splitSize));
            }
        }
        else
    		$lev=levenshtein($str1, $str2);
        $porcentage= -100*$lev/$max+100;
        if($porcentage>75)
        similar_text($str1,$str2,$porcentage);
     
     return $porcentage;
     
    }
    Ça marche très bien pour moi
    Merci de ton aide.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 320
    Points : 311
    Points
    311
    Par défaut
    Salut,

    J'ai l'impression que soundex ne sera pas forcément un bon choix car cette technique se base sur la similarité de prononciation des chaînes.

    Or, ça a dû être développé par des américains, donc j'ai peur que ça ne marche bien qu'en anglais.

    En revanche, similar_text() semble être un choix un peu meilleur car elle calcule le nombre de caractères identiques entre deux chaînes.

    Comme tu maîtrises le contenu de ta chaîne de référence, et qu'imdb ne devrait normalement pas te fournir des anagrammes, c'est une solution sûre.

    Les performances chutent au-dessus de 20000 caractères d'après les commentaires de la doc.

    Plus d'infos ici

    http://fr.php.net/manual/fr/function.similar-text.php

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

Discussions similaires

  1. Comparer des chaines de caractères comme des nombres
    Par PhilLU dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/11/2014, 13h39
  2. [XL-2003] Pb pour comparer des chaines dans une fonction
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/09/2011, 19h53
  3. comparer des chaines de caractères
    Par briceyouemto dans le forum Débuter
    Réponses: 3
    Dernier message: 12/11/2009, 17h45
  4. syntaxe pour comparer des chaines lors de la lecture d'un fichier
    Par alfredaube dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 29/09/2009, 16h35
  5. Compare des chaines arabe
    Par senmar dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 17/02/2009, 17h39

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