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 :

Rechercher un groupe du mots par priorité


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Points : 61
    Points
    61
    Par défaut Rechercher un groupe du mots par priorité
    Bonjour les amis
    Je me remis à vous encore et encore pour m'aidé sur un petit système que je doit faire.

    J'ai une liste de questions / Réponses dans des Arrays en PHP

    Et donc quand quelqu'un pose une question (Celle qui viens dans le $_GET dans le code çi dessus), j'ai met une fonction qui découpe la question en plusieurs mots.

    Et je veut faire un système qui recherche le plus du mots qui s'adapte aux questions qui sont dans des arrays et affiché la réponse situé dans le même classement dans la listes des réponses.

    Voila mon petit bout du code:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    <?php
    $question=$_GET['txt'];
     
    function splitquest($question)
    {    
        /* caractères que l'on va remplacer (tout ce qui sépare les mots, en fait) */
        $aremplacer = array(",",".",";",":","!","?","(",")","[","]","{","}","\"","'"," ");
        /* ... on va les remplacer par un espace, il n'y aura donc plus dans $phrase que des mots et des espaces */
        $enremplacement = " "; 
     
        /* on fait le remplacement (comme dit ci-avant), puis on supprime les espaces de début et de fin de chaîne (trim) */
        $sansponctuation = trim(str_replace($aremplacer, $enremplacement, $question)); 
     
        /* on coupe la chaîne en fonction d'un séparateur, et chaque élément est une valeur d'un tableau */
        $separateur = "[ ]+"; // 1 ou plusieurs espaces
        $mots = explode($separateur, $sansponctuation); 
     
        for($i = 0; $i < count($mots); $i++){
          echo $mots[$i] . ' ';
        }
     
     
    }
     
    $reponses = array(
    'bien merci',
    'Non mais ! je parle quand et ou je veut !',
    'No, je suis un robot donc jai pas besoin du courage',
    'Non, je suis votre prof',
    'Mon nom c papa');
     
    $questions = array(
    'hello, ca va ?',
    'tu parle trop',
    'bon courage',
    'tu est un robot ?',
    'c quoi ton nom ?');
    ?>

    Voila, donc j'espère que vous pourriez m'aidé

  2. #2
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Points : 61
    Points
    61
    Par défaut
    Plus de précisions:
    Je peut comparer qu'un seul mots avec une question, moi je veut comparer tout les mots avec toutes les questions, et la comparaison la plus prioritaire elle sera affiché.

    Exemple: Si dans une question (Qui se situe dans les arrays) je trouve 4 mots de la questions coupé en mots, et dans une autre je trouve 3 j'affiche la première qui a 4 mots

  3. #3
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Avec l'exemple que tu as donné, est-ce que tu pourrais poster le résulat escompté.

  4. #4
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Points : 61
    Points
    61
    Par défaut
    Désolais, je n'est aucune idée du comment m y prendre

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu peux toujours essayer avec ceci :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
     
    $reponses = array(
       'bien merci',
       'Non mais ! je parle quand et ou je veux !',
       'Non, je suis un robot donc jai pas besoin du courage',
       'Non, je suis votre prof',
       'Mon nom c papa'
    );
     
    $questions = array(
       'hello, ca va ?',
       'tu parle trop',
       'bon courage',
       'tu es un robot ?',
       'c quoi ton nom ?'
    );
     
    $mapReps = array();
    foreach($reponses as $phrase) {
       $mapReps[] = explode(' ', $phrase);
    }
     
    $mapQuest = array();
    foreach($questions as $question) {
       $mapQuest[] = explode(' ', $question);
    }
     
    // tableau contenant comme clé : l'index de la question et comme valeur
    // un tableau comptant le nombre de mots communs entre la question et la réponse
    $results = array();
    $i = 0;
    foreach($mapQuest as $question) {
       foreach($mapReps as $reponse) {
          $results[$i][] = count(array_intersect($question, $reponse));
       }
       ++$i;
    }
     
    ?>
    Bon c'est loin d'être optimisé mais ça donne une piste.
    Saches quand même que c'est très complexe à gérer ce genre de requête. En général, tout ce qui relève de la linguistique devient rapidement très compliqué.

  6. #6
    Membre du Club
    Inscrit en
    Août 2010
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 156
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup pour votre réponse, ça ma beaucoup aidé

    Voila le début du code que je voulé:
    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
    $reponses = 'courage bon !';
     
    $questions = array(
       'hello, ca va ?',
       'tu parle trop',
       'bon courage',
       'tu es un robot ?',
       'c quoi ton nom ?'
    );
     
     
    $mapReps = explode(' ', $reponses);
     
     
    $mapQuest = array();
    foreach($questions as $question) {
    $mapQuest[] = explode(' ', $question);
    }
     
    $results = array();
    $i = 0;
    foreach($mapQuest as $question) {
     
          $results[$i] = count(array_intersect($question,$mapReps));
    	  $all = $results[$i];
          ++$i;
     
    }
    Je fait comment pour ressortir de FOREACH toute la ligne qui est affiché (00200 dans ce cas) ? et pouvoir la magner comme je veut après dans tout le code

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/12/2012, 18h14
  2. [MySQL] Recherche par priorité
    Par valentin45000 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/01/2012, 00h21
  3. Requète pour une recherche par Priorité
    Par amine.h dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/12/2011, 14h45
  4. Perl-Excel:differencier groupes de mots par la couleur
    Par makohsarah dans le forum Modules
    Réponses: 0
    Dernier message: 01/12/2008, 14h15
  5. Rechercher fichiers avec un ou plusieurs groupes de mots
    Par Boubas1 dans le forum Windows XP
    Réponses: 6
    Dernier message: 23/09/2008, 23h04

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