2017-06-11 7 views
2

J'utilise alice 2 aiml chatbot dans android. Mon besoin est de pouvoir invoquer certaines méthodes lorsque certaines questions sont posées par les utilisateurs pour retourner la réponse après quelques calculs. J'ai suivi this question posted earlier dans le même domaine mais j'ai échoué à comprendre l'implémentation de aimlprocessorextension et j'ai désespérément besoin d'une implémentation exemplaire pour des choses telles que faire un appel ou même simplement afficher une alerte sur certains msg par l'utilisateur.AIML processorextension appels de méthode java personnalisée

Aidez-nous s'il vous plaît.

+0

salut .. avez-vous résolu ce problème? – Jugi

+0

@Jugi Oui. mais je l'ai résolu d'une manière très grossière. Donc ce que j'ai fait, c'était ajouter un symbole # devant les réponses dans aiml pour lequel je devais invoquer une certaine fonction. Si le # a été détecté par le code java (en utilisant la méthode split), la fonction particulière a été invoquée à l'aide d'un commutateur. Je peux aussi montrer mes fichiers aiml en cas de doute. –

+0

merci. J'ai trouvé une solution pour cela en utilisant AIMLProcessorExtension. Je vais partager ma réponse dans le post. En attendant, partagez votre implémentation pour savoir comment vous avez résolu cela. – Jugi

Répondre

1

C'est ce que j'ai fait pour résoudre le problème de côté java. Créez une classe qui implémente AIMLProcessorExtension. La classe ressemblera à quelque chose comme ci-dessous,

public class TestAIMLExtenstion implements AIMLProcessorExtension 
{ 
    public Set<String> extensionTagNames = Utilities.stringSet("contactid","multipleids","displayname","dialnumber","emailaddress","contactbirthday","addinfo"); 
    public Set <String> extensionTagSet() { 
     return extensionTagNames; 
    } 

public String recursEval(Node node, ParseState ps) { 
     try { 
      String nodeName = node.getNodeName(); 
      if (nodeName.equals("contactid")) 
       return contactId(node, ps); 
      else if (nodeName.equals("multipleids")) 
       return multipleIds(node, ps); 
      else if (nodeName.equals("dialnumber")) 
       return dialNumber(node, ps); 
      else if (nodeName.equals("addinfo")) 
       return newContact(node, ps); 
      else if (nodeName.equals("displayname")) 
       return displayName(node, ps); 
      else if (nodeName.equals("emailaddress")) 
       return emailAddress(node, ps); 
      else if (nodeName.equals("contactbirthday")) 
       return contactBirthday(node, ps) ; 
      else return (AIMLProcessor.genericXML(node, ps)); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      return ""; 
     } 
    } 
} 

Et dans ma classe principale j'ai ajouté quelque chose comme,

AIMLProcessor.extension = new TestAIMLExtenstion(); 

Je l'ai fait la mise en œuvre de m en utilisant l'approche ci-dessus.

+0

C'était là dans les docs pour aiml mais je n'étais pas en mesure de le mettre en œuvre car il ne semblait pas correspondre à mon exigence. Peut-être que c'est mieux. Merci d'avoir partagé! +1 –