在watson对话中,如何提取输入文本中输入的多个值

时间:2017-06-14 08:39:33

标签: json node.js sails.js ibm-watson watson-conversation

我在一个应用程序上工作,我根据用户的“价格范围”在我的库存中显示产品..

我需要知道如何提取输入文本中输入的值(价格)。

我尝试使用系统实体@sys-currency& @sys-number但我只能提取一个值(第一个值)..

示例:

用户要求“显示200美元到500美元之间的产品”

如何提取要与单个产品价格进行比较的值并显示相关产品..

建议赞赏..

2 个答案:

答案 0 :(得分:0)

如果您正在使用nodejs,基于IBM Developers中的会话简单示例,您可以执行以下操作:

enter image description here

节点:

enter image description here

访问此值的代码:

function updateMessage(input, data, req, res) {

 console.log("Entties: "+JSON.stringify(data.entities));
  //200 and 500 do something
  if (data.entities[0].value == '200' && data.entities[1].value == '500') {
        console.log("User choice value:" + data.entities)
    //  showProducts(data, req, res); do something inside this function
    // or paste your code for do something here
  }

Debugg:

enter image description here

Obs。:如果用户只键入一个值(@ sys-currency),如果有一个条件,则需要创建一个值,并获取此值以便在我的应用程序中执行某些操作例如:

data.entities //if have one value
data.entities[i] //Watson return some array if have more than 1 value

一个好主意是使用上下文变量和join来获取所有值,例如:

{ "context": {
    "result": "<? @sys-currency ?>"
   }
},

如果您在库存中传递所有库存中您想要输出的物品,例如我们有库存中的X,Y,Z,那么您可以在Watson中创建输出

 <? context.results.join(', ') ?> //all values return

重要提示:您需要访问 Watson Conversation调用data)中的conversation.message返回,以访问所有值,例如实体,意图和上下文变量等。喜欢:

conversation.message(payload, function (err, data) {
    console.log(data)
    if (err) {
      return res.status(err.code || 500).json(err);
    }
}

答案 1 :(得分:0)

在watson对话的节点中,您可以将实体作为数组进行访问。在你的情况下,它将是:

Currency 1: <? entities['sys-currency'] != null && entities['sys-currency'].size()> 0 ? entities['sys-currency'][0].value : "---" ?>; Currency 2: <? entities['sys-currency'] != null && entities['sys-currency'].size()> 1 ? entities['sys-currency'][1].value : "---" ?>

您需要添加适当的空检查并检查数组是否有更多的输入货币