Regrouper des expressions qui se ressemblent, en PHP ou MySQL, à l'aide

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par milkiway, 6 Mars 2011.

  1. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 196
    J'aime reçus:
    0
    Bonjour,

    Je bute sur une "fonction" à réaliser car je ne vois pas du tout comment faire. J'ai à ma disposition PHP et MySQL.

    J'ai une liste de mots qui sort d'une base de données, comme ceci :
    Ce que je voudrais faire : avec un code PHP, ou directement MySQL, réussir à détecter les parties communes dans la liste pour pouvoir les isoler, dans ce cas ça donnerait:
    Comment vous y prendriez vous ? Ca me semble complexe à faire, je ne dois pas avoir les bons automatismes en tête.

    Toute aide sera grandement appréciée, merci d'avance.
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 952
    J'aime reçus:
    275
    Tu tries par ordre alphabétique, tu parcours en comparant à chaque fois la chaine la chaine précédente, si elles sont identiques tu ajoute à un autre tableau
    Une fois que tu as finis de parcourir tu affiches le tableau avec un group on pour avoir les valeurs uniquement une fois
     
  3. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 196
    J'aime reçus:
    0
    Merci mais ça ne marchera pas puisque par exemple Lauréate et Lauréate + 16" ne sont pas identiques.
    Je voudrais en fait détecter, au sein d'une liste, les expressions qui sont uniques et qui se répètent, pour pouvoir regrouper sous "Lauréate", les "Lauréate" ainsi que "Lauréate +16" ou encore les "Version fr Lauréate".
     
  4. marchandeo
    marchandeo WRInaute discret
    Inscrit:
    18 Janvier 2011
    Messages:
    93
    J'aime reçus:
    0
    Tu peux peut-être regarder du côté de Lucene : http://framework.zend.com/manual/fr/zend.search.lucene.html
    Puisque ce que tu recherches n'est pas réalisable en utilisant uniquement Mysql. Il faut visiblement attribuer un certain poids à chacun des mots de ta liste et travailler avec une liste de stop words.
     
  5. bgdc
    bgdc WRInaute impliqué
    Inscrit:
    23 Mai 2005
    Messages:
    536
    J'aime reçus:
    0
    Est ce que le mot clé "important" est toujours composé justement d'un seul mot ?
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Si le seul mot "important" c'est le premier, alors tu peux faire quelque chose comme:

    Code:
    select substring_index(colonne, ' ', 1) from table group by 1 having count(*) > 1
    Si tu dois prendre en compte les mots quelle que soit leur position, c'est un peu plus compliqué parce que je ne crois pas que mysql ait l'équivalent du regexp_split_to_table de postgresql. L'idée serait alors de faire une sous-requête avec une série de UNION qui renvoient chacun des mots un par un. Probablement plus simple de faire ça au niveau php avec un petit explode sur chaque ligne.

    Jacques.
     
  7. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    tu places tes elements en sortie dans un tableau php

    pas tester mais ca fonctionne (j'ai repris une fonction pour le nbre max de mots, tu peux simplifier si besoin):

    Code:
    <?php
    
    function getMaxWord($p_chaine, $p_maxWord){
        $array = explode(' ',$p_chaine);
        if(count($array)<=$p_maxWord){
            return $p_chaine;
        }
        
        $chaine = "";
        for($i=0; $i<$p_maxWord;$i++){
            $chaine .= $array[$i]." ";
        }
        return $chaine;
    }
    
    
    $tab = array("Attraction",
    "Ambition",
    "Attraction",
    "Lauréate",
    "Trend",
    "Attraction",
    "Trend A",
    "Attraction + jantes 16",
    "Ambition",
    "Ambition",
    "Trend Luxe",
    "Attraction",
    "Lauréate",
    "Ambition A",
    "Lauréate FR");
    
    $i=0;
    while ($i < sizeof($tab)) {
    $new_tab[] = trim(getMaxWord($tab[$i],1));
    $i++;
    }
    
    $result = array_unique($new_tab);
    
    
    ?>
    te reste plus qu'a lister le tableau $result :wink:
    si tu les veux par ordre alphabétique: sort($result);
     
  8. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 196
    J'aime reçus:
    0
    Merci à vous tous. Je vais creuser dans le sens de l'eplode. Je pense exploder les chaines, créer une table temporaire qui va stocker les points attribués à chaque mots via PHP et ne garder que les redondances les plus importantes. ON verra bien si ça marche.

    jcaron, merci mais oui l'expression peut être multiple et là ça se corse.

    Pour utiliser Zend_Search_Lucene il faut installer quelque chose sur le serveur non ?
     
  9. fobec
    fobec WRInaute discret
    Inscrit:
    10 Mai 2005
    Messages:
    186
    J'aime reçus:
    0
    Php propose pas mal de fonctions pour comparer des mots entre eux.
    - comparaison phonétique avec soundex(),
    - distance entre 2 mots avec levenshtein()

    A voir si elles te permettent de filtrer plus rapidement les mots qu'une méthode avec des array.
     
  10. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    excellentes fonctions php
    mais ca ne sera pas plus rapide
    puisqu'il devra boucler sur chaque élements et le comparer aux autres pour chercher une correspondance exacte, une distance égale a 0
     
  11. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 196
    J'aime reçus:
    0
    Tiens KOogar, un "vieux" WRiste.

    Merci pour ces pistes, les fonctions deviennent rapidement gourmandes surtout que mes expressions peuvent avoir n mot.
    Je crois que je vais procéder autrement car mon petit Celeron n'en pourra vite plus.
     
Chargement...
Similar Threads - Regrouper expressions ressemblent Forum Date
Comment regrouper le contenu de 2 sites sans perdre en SEO ? Référencement Google 30 Septembre 2021
Regrouper dans Analytics les visites de pages AMP/Non-AMP Google Analytics 14 Mars 2021
Regrouper plusieurs sites en un seul : impact référencement Référencement Google 23 Juillet 2019
Regrouper 30 sites en sous-domaines en acceptant de perdre tout le référencement Noms de domaine et référencement 3 Janvier 2017
Regrouper certaines pages pour améliorer la lisibilité Google Analytics 18 Novembre 2014
Comment regrouper 20 sites nichés sur un "gros" site ? Débuter en référencement 19 Septembre 2014
Regrouper plusieurs sites sur un seul nom de domaine Débuter en référencement 19 Juillet 2013
Regrouper les fichiers .js externe à son site Développement d'un site Web ou d'une appli mobile 19 Mai 2013
Tags pour regrouper les pages par rubriques dans les statistiques Google Analytics 12 Juillet 2012
Comment regrouper ses mots-clés dans AdWords ? AdWords 31 Août 2011
Regrouper les mots clès similaires dans analytics Google Analytics 25 Février 2009
Regrouper deux hébergements sous un même domaine ? Débuter en référencement 21 Octobre 2008
regrouper et compter les doubles Développement d'un site Web ou d'une appli mobile 10 Juin 2007
Regrouper des flux rss de plusieurs sites Administration d'un site Web 29 Mai 2005
Regrouper 2 sites sous le même domaine avec répertoire diff. Référencement Google 21 Mars 2005
Comment regrouper différentes conversations Gmail ? Gmail, Google Talk, Blogger et Orkut 1 Mars 2005
Plusieurs URL pour une page - comment les regrouper ? Netlinking, backlinks, liens et redirections 21 Février 2005
Idées d'expressions régulières utiles en SEO Référencement Google 17 Mai 2021
Outil pour enregistrer les expressions de recherche (et mots clés) Rédaction web et référencement 20 Novembre 2020
PHP Expressions Régulières ! Modifier plusieurs occurences Développement d'un site Web ou d'une appli mobile 5 Août 2015