is it possible to call Java functions from aiml?

喜你入骨 提交于 2019-12-11 06:27:42

问题


I am creating a chatbot using Java and program ab. In few places I can’t answer the questions directly, I have to process something or call a web service and process the result and then reply back. In such cases how to include the result of my java function to the responses in the aiml.

Say,

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

In the above example, $50 is not going to be same always. I have to take that in run time. So how to solve this problem?

**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;
}

Please someone help me. Thanks in advance.


回答1:


Typically AIML extensions are implemented as an extension tag. So you wouldn't call a programming language method/function directly from AIML script. In the AB documentation you can find more details about implementing this kind of functionality here. Below is the relevant text with an updated link to PCAIMLProcessorExtension found in a forked project on GitHub. There a couple of practical examples on of working extensions can be found.

AIMLProcessorExtension

Program AB defines a Java Interface called AIMLProcessorExtension that you can use to define new AIML tags.

A class implementing AIMLProcessorExtension must provide:

  • a Set of tag names.
  • a function to recursively evaluate the XML parse tree for each node associated with a new tag.

The Program AB source includes a sample implementation of this interface called PCAIMLProcessorExtension, which defines a collection of tags simulating a contacts database.




回答2:


There is a simple and general option, you can keep a keyword to be used in switch later on, e.g.

AIML template will have a keyword for operation,

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

And update java code like:

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;
}


来源:https://stackoverflow.com/questions/43406590/is-it-possible-to-call-java-functions-from-aiml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!