2017-04-14 4 views
1

Je crée un chatbot en utilisant Java et le programme ab. Dans quelques endroits, je ne peux pas répondre directement aux questions, je dois traiter quelque chose ou appeler un service web et traiter le résultat, puis répondre. Dans de tels cas, comment inclure le résultat de ma fonction java aux réponses dans l'aiml.est-il possible d'appeler des fonctions Java à partir de aiml?

Say,

User: What is the price of the product A? 
Bot: The price of product A is $50 

Dans l'exemple ci-dessus, 50 $ ne va pas être même toujours. Je dois prendre cela en cours d'exécution. Alors, comment résoudre ce problème?

**AIML:** 

<category> 
    <pattern>WHAT IS THE PRICE OF THE *</pattern> 
    <template>The price of <star/> is $<call some function price(productA)> 
    </template> 
</category> 

**JAVA:** 

public int price(String product){ 
    // gets the product price 
    // do the conversion 
    // apply discount 
    return price; 
} 

Aidez-moi, s'il vous plaît. Merci d'avance.

Répondre

2

Généralement, les extensions AIML sont implémentées en tant que balise d'extension. Vous n'appelez donc pas une méthode/fonction de langage de programmation directement à partir du script AIML. Dans la documentation AB, vous trouverez plus de détails sur l'implémentation de ce type de fonctionnalité here. Ci-dessous le texte correspondant avec un lien mis à jour à PCAIMLProcessorExtension trouvé dans un forked project sur GitHub. Il y a quelques exemples pratiques d'extensions de travail.

AIMLProcessorExtension

programme AB définit une interface Java appelé AIMLProcessorExtension que vous pouvez utiliser pour définir de nouvelles balises AIML.

Une classe implémentant AIMLProcessorExtension doit fournir:

  • un ensemble de noms de balises.
  • une fonction d'évaluation récursive de l'arborescence d'analyse XML pour chaque nœud associé à une nouvelle variable.

La source du programme AB comprend un exemple d'implémentation de cette interface appelée PCAIMLProcessorExtension, qui définit une collection d'étiquettes qui simulent une base de données de contacts.

+0

Merci! Mais existe-t-il un tutoriel ou un document de référence ou une documentation sur l'utilisation de AIMLProcessorExtension? Je n'ai rien trouvé d'utile. – Kavipriya

+0

Mise à jour de la réponse avec un lien vers l'extension d'exemple que vous recherchez. –

+0

Merci! pouvez-vous aussi regarder cette question? http://stackoverflow.com/questions/43463390/aimlprocessorextension-tag-not-working-in-aiml – Kavipriya

2

Il existe une option simple et générale, vous pouvez conserver un mot-clé à utiliser plus tard, par exemple.

modèle AIML aura un mot-clé pour le fonctionnement,

<category> 
    <pattern>WHAT IS THE PRICE OF THE *</pattern> 
    <template>PRICE,The price of <star/> is,<star/> </template> 

et mise à jour du code Java comme:

String response = aimlResponse(request); 
String [] responseComponents = reponse.parse(","); 
String method = responseComponents[0]; 

//Then use switch, also apply size check on array after parsing in case of response with No keywords 

Switch method: 
{ 
case PRICE: 
//here add the price to response string 
String price = price(responseComponents[2]); 
response = responseComponents[1]+ price; 
break; 
} 
+0

Et s'il y a deux composants ou plus dans la réponse sur laquelle la fonction à appeler dépend? quelque chose comme: La porte de la pièce X est-elle ouverte?ici la pièce a du sens car la fonction liée à la pièce doit être appelée, mais X a également du sens, car la pièce à vérifier est également importante. –

+0

Ajoutez simplement tous les éléments requis séparés par une virgule et dans le programme, vous pouvez les analyser. Comme dans l'exemple ci-dessus, nous savons pour cette réponse, responseComponents [0] est la méthode, vous pouvez stocker l'élément personnalisé à [1], dans ce cas le numéro de chambre. –

+0

salut. Quelqu'un a-t-il résolu ce problème? – Jugi