Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2011, 19h04   #1
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
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 :
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é
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 19h14   #2
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
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
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 19h18   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Avec l'exemple que tu as donné, est-ce que tu pourrais poster le résulat escompté.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 20h23   #4
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
Désolais, je n'est aucune idée du comment m y prendre
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 20h45   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Tu peux toujours essayer avec ceci :
Code :
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é.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 23h43   #6
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
Merci beaucoup pour votre réponse, ça ma beaucoup aidé

Voila le début du code que je voulé:
Code :
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
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h21.


 
 
 
 
Partenaires

Hébergement Web