我正在使用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);
同样的结果。
我能够从响应中的分辨率字段中提取日期,但是对于更复杂的话语(如范围日期),该解决方案不实用。
答案 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"}