2017-04-14 59 views
1

我正在使用Java和程序ab創建chatbot。在很少的地方我不能直接回答問題,我必須處理一些事情或者調用Web服務並處理結果,然後回覆。在這種情況下,如何將我的java函數的結果包含在目標中的響應中。是否有可能從aiml調用Java函數?

說,

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

在上面的例子中,$ 50不會是相同始終。我必須在運行時採取這一點。那麼如何解決這個問題呢?

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

請別人幫我。提前致謝。

回答

2

通常AIML擴展是作爲擴展標籤實現的。所以你不會直接從AIML腳本調用編程語言方法/函數。在AB文檔中,您可以找到有關實現這種功能here的更多詳細信息。以下是相關文本,其中鏈接至PCAIMLProcessorExtension的更新鏈接位於GitHub的forked project中。有幾個關於工作擴展的實例可以找到。

AIMLProcessorExtension

計劃AB定義的Java接口稱爲AIMLProcessorExtension是 你可以用它來定義新的AIML標籤。

類實現AIMLProcessorExtension必須提供:

  • 一組標記名稱。
  • 遞歸評估與新標籤關聯的每個節點的XML解析樹的函數。

方案AB源 包括這個接口稱爲 PCAIMLProcessorExtension,它定義的標籤 模擬聯繫人數據庫的集合的樣本實現。

+0

謝謝!但是有沒有關於如何使用AIMLProcessorExtension的教程或參考資料或任何文檔?我找不到任何有用的東西。 – Kavipriya

+0

通過指向您尋求的示例擴展的鏈接更新了答案。 –

+0

謝謝!你也可以看看這個問題嗎? http://stackoverflow.com/questions/43463390/aimlprocessorextension-tag-not-working-in-aiml – Kavipriya

2

有一個簡單而通用的選項,您可以保留一個關鍵字以後用於切換,例如,

AIML模板將有一個關鍵字進行操作,

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

和更新Java代碼,如:

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

如果在被調用的函數所依賴的響應中有兩個或多個組件,該怎麼辦?例如:房間X門是否打開?這裏的房間很有意義,因爲與房間相關的功能必須被調用,但是X也是有意義的,因爲它要檢查哪個房間也很重要。 –

+0

只需追加由逗號分隔的所有必需元素,並在程序中解析它們即可。就像在上面的例子中,我們知道對於這個響應,responseComponents [0]是方法,你可以在[1]中存儲自定義元素,在這種情況下是房間號碼。 –

+0

嗨。有誰解決了這個問題? – Jugi

相關問題