'Undefined' 使用 EntityRecognizer.resolveTime 时的值

'Undefined' value when using EntityRecognizer.resolveTime

我正在使用 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);,结果相同。

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

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