Analyse lexicale, comment faire?

selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006 - 31 août 2006 à 10:31
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006 - 3 sept. 2006 à 06:03
Bonjour,
J'aimerai définir des criticités à des produits de ma base de données, ceux-ci seront définit par l'utilisateur, exemple de saisie possible:
   vert: taille>26 ET {poids<120 OU encombrement>100}
   jaune: taille>26 
   rouge:taille<26 ET {poids>120 OU encombrement>1000}

j'aimerai analyser cette chaine de caractères, cependant le problème peut devenir assez complexe, et je voulais savoir si vous avez des idées pour résoudre ce problème dans un premier temps OU bien si vous pouvez me proposer une autre solution (autre type de saisie, éventuellement) pour ce problème .
 Merci.. 

13 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 août 2006 à 13:23
Hello,

le mieux est encore sans doute de créer un formulaire adapté. Histoire d'éviter un parsing.
Sinon, il te reste à définir ta grammaire, et créer les règles avec des expressions régulières.
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
31 août 2006 à 14:54
Salut,

je rejoins l'idée de malalam concernant les expression régulières.
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
31 août 2006 à 17:12
pour le formulaire , c'est ne va pas trop parce que pour l'instant on ne sait toujours pas comment est ce que l'on va définir les criticités et aussi quelle paramètres aura une incidence dans la criticité.
sinon les pour les expressions régulières est ce que vous pouvez me donner un exemple pour que je vois comment vous faites.
Merci pour votre réponse en tout cas.
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
31 août 2006 à 20:14
Salut,

voici une petite aide(si j'ai bien tout compris) :
<?php
function parse_string($pString,$pPattern) {
$charac = array();
preg_match_all($pPattern,$pString,$matches,PREG_SET_ORDER); //départ de l'analyse de la chaine
$num = count($matches);
#enregistrement des données récupérées dans un tableau plus facile à lire
for ($i=0; $i<$num; $i++) {
$charac[ $matches[$i][1] ] = $matches[$i][2];
}
return ($charac);
}

$string = "je veux un marteau de #couleur:verte ayant une #taille:16 et pesant un #poids:10"; //chaine à analyser
$pattern = '`#(couleur|taille|poids):([a-z0-9]+)`i'; //forme des entités à récupérer

$infos = parse_string($string,$pattern);
# affichage des infos retournées
echo "Caractéristiques de mon marteau:
\n";
foreach ($infos as $nom=>$val) {
echo "$nom - $val
\n";
}
?>

adresse trés utilise: www.php.net / recherche: preg_... ou regex
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2006 à 09:28
Salut!
Le pb c'est que faisant ça, tu loupes l'ordre des opérateurs (et la prédominance des { })

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
1 sept. 2006 à 10:10
oui effectivement, ce type de parsing revient a tout considérer comme une relation de ET entre les conditions : mais c'est pas trop ce que je voulais faire.
Cependant cette idée est interessante.
Il me semble qu'utiliser une décomposition en un arbre de l'expression permettrait déjà de simplifier le problème.
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
1 sept. 2006 à 10:15
Oui, c'est ce à quoi, je pensais:
tu pourrais déjà parser selon les opérateurs ( ET, OU ) et les délimiteurs ( { } ) en un arbre. Ensuite, pour chaque item, il faudra effectuer la recherche des critères...

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...
"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
1 sept. 2006 à 10:26
yaurai pas qqn qui a deja fait une classe arbre en PHP?
merci
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
1 sept. 2006 à 10:41
je viens d'avoir une autre idée qui est beaucoup plus simple :


d'utiliser la fonction eval de php.


de remplacer ET par &&,  OU par ||, allongement par $allongement


dans la chaine de caractère à l'aide de replace.


et enfin d'utiliser la fonction eval tout en assurant que les variables ont été créé auparavant.
Cette façon de résoudre le problème étant beaucoup plus simple


 
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
1 sept. 2006 à 13:16
Il s'agit d'un exemple.
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
1 sept. 2006 à 16:38
oui, effectivement il peut y avoir plusieurs solutions, mais finalement il n'est pas forcément nécessaire de faire un traitement de chaine de caractère.
bon voila merci en tout cas pour vos idée.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 sept. 2006 à 08:37
J'espère que c'est pour une utilisation limitée, avec des utilisateurs en qui tu as confiance.
Parce que... : saisie utilisateur + eval ()... dans le genre super, méga dangereux, on peut pas faire beaucoup mieux.
0
selim68 Messages postés 8 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 3 septembre 2006
3 sept. 2006 à 06:03
Oui effectivement tu as raison, mais les utilisateurs pouvant accéder à cette partie du site seront forcément des utilisateurs Administrateur. Cependant, je comprends que ce n'est pas très astucieux, mais je vois pas comment faire plus simplement, étant donné que la complexité du problème me dépasse un peu. Si tu as une meilleure idée, n'hésite pas...
0
Rejoignez-nous