rivescript
Rivescript l'ordre de codage.
Si l'on compare le rivescript a l'aiml, on se rend compte tres vite que le rivescripte n'a pas tout a fait la même logique.
L'aiml va executer les code les uns a la suite des autres et renvoyer imediatement le resultat. Exemple :
+ depart prenom
- comment tu t appelles ?
+ *
% comment tu t appelles*
* <bot prenom> == <star> => ho, comme moi ! c'est marrant <env nom=<star>> et tu es donc {@chercher genre prenom}
- <env prenom=<star>> <env prenom> ok et tu es {@chercher genre prenom}
+ chercher genre prenom
* <env prenom> == gennie => <env genre=fille>une <env genre>
comme cela ça fonctionne.
Mais en aiml on aurait pu
demander son nom pui
enregistrer la réponse et renvoyer sur la recherche de genre puis la faire afficher.
<pattern> * <patterne/>
<template> <set name="nom"></star></set> <srai> rechercher genre<srai/> ha donc tu es un <get name="genre">
Pas ici, la fonction est executer en entier directement, donc :
- <env prenom=<star>> <env prenom> ok et tu es {@chercher genre prenom} <env genre>
avec
* <env prenom> == gennie => <env genre=fille>
ne fonctionera pas alors que dans le premier exemple ça marche car c'est la sous fonction de recherche du genre qui fait afficher le genre, pas la fonction premiere d'enregistrement du nom !
Petite nuance qui change beaucoup de chose :) il faudra s'y faire.
Deuxieme subtilité: l'orde dans le quel vous organisez le codage.
Un code peut interferer sur un autre suivant s'il est placé avant ou aprés celui ci.
Exemple :
on met les non en premier car il matche sur la 1ere array trouvé
exemple : bien sur que non (dans les non) va matcher un oui alors que la phrase veut dire non => bien sur (dans les oui )
En mettant les non en premier, il va trouver non et ne cherchera pas le bien sur ensuite.
! array non = pas mal mauvais mauvaise bof moyen nul nulle naz bidon rien
^ bien sur que non|aucunement|j ai des doutes|j aime pas
+ [*] (@non) [*]
@nongeneral // sert a pouvoir repondre non par rapport a un sujet definis en utilisant le array
+ nongeneral
- non ?
- ok
- tres bien
- ha non
- je vois
+ non
@nongeneral
+ * non
@non
+ * non *
@non
+ non *
@non
! array oui = oui yes evidament evidement ok absolument super extra terrible top cool heureu
^ genial geniale bonheur impecable impeccable parfait assurement certainement certe parfaitement
^ nikel sympa exact surement accord
^ bien sur|pas mal|oki|j aime|tant mieux|pourquoi pas|pas mauvais|pas mauvaise
^ c est deja ca|pas trop mal
+ [*] (@oui) [*]
@ouigeneral // sert a pouvoir repondre oui par rapport a un sujet definis en utilisant le array
+ ouigeneral
- oui
- ok
- absoluement
- super
- genial
- parfait
- on est d'accord
- tant mieux
- tres bien
+ comme tu dis
- oui ...
+ * comme tu dis
@comme tu dis
+ * comme tu dis *
@comme tu dis
+ comme tu dis *
@comme tu dis
D'autres interferance de ce type peuvent se produire lorsque vous utiliser les [*]
Soyez donc vigilent et ...tester :)
rivescript subtilité sur les renvois et utilisation des tableaux array
Voila, je viens de pousser plus a bout les tests sur rivscripte, et aprés pas mal d'heure de boulot, grosse deception. Les fonctions de base comme :
+ garcon
% tu es une fille ou un garcon
- ho comme moi !
+ * garcon
@garcon
+ * garcon *
@garcon
+ garcon *
@garcon
Ne fonctionne pas !
Pourquoi ?
Parceque si on répond garcon, ça marche, mais si l'on répond un garcon, le % n'est plus pris en compte !!! donc qu'il ne matche pas !
Pour que cela fonctionne, il faudrait a chaque fois réintroduire le %
Là où l'on gagner des lignes de code, on les reperds. Donc aucun interet a premiere vu.
salut, j'ai plusieurs pistes pour contourner ce probleme.
soit :
+ depart genre
- tu es une fille ou un garcon ? <set dis=fille ou garcon>
+ fille
* <get dis> == fille ou garcon => ho, une fille comme moi !
+ * fille
@fille
+ * fille *
@fille
+ fille *
@fille
Soit utiliser comme me la sugèré kirsle la solution qui me parait etre pour la plus part du temps la meilleur :
+ depart genre
- tu es une fille ou un garcon ?
+ [*] fille [*]
% * es une fille ou un garcon*
- ho une fille, comme moi !
qui fonctionne tres bien.
Si à cela on ajoute un array
! array fille = fille femme fillette madame dame donzelle gonzesse mademoiselle demoiselle femelle
! array filles = filles femmes fillettes madames dames donzelles gonzesses mademoiselles demoiselles femelles
alors, on a simplifié le code de façon impressionnante. le code deviens donc :
+ [*] (@fille) [*]
% * es une fille ou un garcon*
- ho une fille, comme moi !
Ou même carrément plus fort :
+ [*] (@fillenoune|@fillenounes) [*]
% * es une fille ou un garcon*
- ho une fille comme moi <env genre=fille>
Qui va reconnaitre toutes les vriante de fille plurielles ou pas !
Conclusion : Le rivescript s'aborde d'une façon différente. Tout ne fonctione pas comme pour l'aiml, mais bien souvent une solution existe tout aussi efficasse voir bien plus ! car là, en 3 lignes de code remplacent une bonne 60 ene de lignes aiml
Encore plus fort, en recoupant les tableaux entre eux :
+ [*] tu es [*] (@garconoune|@garconounes|@fillenoune|@fillenounes) [*]
- je suis <bot genre> <set sujet= fille ou garcon>
Va reconnaitre toutes les formes de questions du style
tu es une fille
et donc tu es une fille ou un garcon
tu es une femme toi alors
tu es un homme ou une femelle finalement
etc..
ici la rivescripte a l'aide de [*] et des tableaux simplifie le code de manière impressionante