使用EntityRecognizer.resolveTime时的“未定义”值

时间:2017-12-29 11:10:10

标签: javascript node.js botframework luis

我正在使用LuisRecognizer.recognize()方法在我的机器人的瀑布式对话框中查找datetimeV2实体,并使用EntityRecognizer.resolveTime()来解析答案,如下所示:

builder.LuisRecognizer.recognize(results.response, process.env.LUIS_MODEL_URL, function (err, intents, entities) {
        console.log(entities);
        if (entities) {
               var entity = builder.EntityRecognizer.findEntity(entities, 'builtin.datetimeV2.date');
               var resolvedTime = builder.EntityRecognizer.resolveTime(entities);
               console.log(entity);
               console.log(resolvedTime);
        }
    });

当我测试时,console.log(entity)打印以下json:

{ entity: 'mañana',
    type: 'builtin.datetimeV2.date',
    startIndex: 0,
    endIndex: 5,
    resolution: { values: [Object] } }

但第二个console.log(resolvedTime)打印undefined值。 我也尝试了builder.EntityRecognizer.parseTime(entities);同样的结果。

我能够从响应中的分辨率字段中提取日期,但是对于更复杂的话语(如范围日期),该解决方案不实用。

1 个答案:

答案 0 :(得分:1)

resolveTime function的源代码开始,我们发现此函数不会转换datetimeV2数据类型。所以你得到undefined

但是,您仍然可以利用entity.resolution获取datetimeV2的日期。

  • 对于builtin.datetimeV2.date日期类型:

    var date = builder.EntityRecognizer.findEntity(entities, 'builtin.datetimeV2.date');
    console.log(date.resolution.values[0].value);
    
  • builtin.datetimeV2.daterange

    var daterange = builder.EntityRecognizer.findEntity(entities, 'builtin.datetimeV2.daterange');
    console.log(daterange.resolution.values[0]);
    

    谁的对象应该是这样的:

    {end:"2018-01-10"
    start:"2018-01-09"
    timex:"(2018-01-09,2018-01-10,P1D)"
    type:"daterange"}