LUIS是否在话语中识别出多个相同的Pre Built实体

时间:2018-01-09 14:50:57

标签: botframework luis

话语: 我想预订下周一从海得拉巴到班加罗尔的航班,最好在下午左右,下周五返回,最好是在晚上。

实体: FromDestination:海德拉巴,

ToDestination:班加罗尔

预建Enties: Buiiltin.DateTimeV2:下周一,周五。

Builtin.DateTimeV2.TimeRange:下午,晚上

.NET代码识别enties:

       foreach(EntityRecommendation obj in result.Entities)
            {
                if(obj.Type == FlightBotConstants.fromDestination)
                {
                    context.PrivateConversationData.SetValue<string>("fromDestination", Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(obj.Entity.ToLower()));
                }
                else if(obj.Type == FlightBotConstants.toDestination)
                {
                    context.PrivateConversationData.SetValue<string>("toDestination", Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(obj.Entity.ToLower()));
                }
                else if(obj.Type == FlightBotConstants.prebuiltdate)
                {
                    Chronic.Parser depparser = new Chronic.Parser();
                    var depDateResult = depparser.Parse(obj.Entity);
                    string departureDate = depDateResult.Start.Value.ToString("yyyy-MM-dd");
                    context.PrivateConversationData.SetValue<string>("departtDate", Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(departureDate));
                }
                else if(obj.Type == FlightBotConstants.prebuilttimeRange)
                {
                    Chronic.Parser depTimeParser = new Chronic.Parser();
                    var deptimeResult = depTimeParser.Parse(obj.Entity);
                    var depStartTime = deptimeResult.Start.Value.TimeOfDay;
                    var depEndTime = deptimeResult.End.Value.TimeOfDay;
                    context.PrivateConversationData.SetValue<string>("departureStartTime", Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(depStartTime.ToString()));
                    context.PrivateConversationData.SetValue<string>("departureEndTime", Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(depEndTime.ToString()));
                }
            }

我需要一个如下输出。我怎么能完全

出发地点:海德拉巴

抵达地点:班加罗尔

出发日期:2018-01-15

出发时间:13:00

出发结束时间:18:00

回归日期:2018-01-19

返回开始时间:19:00

出发结束时间:22:00

我可以获取所有实体数据,但我的问题是如果用户话语是&#34; 我想预订下周一从海得拉巴到班加罗尔的航班,下周五返回,最好是在晚上&#34;。

我是如何编写代码以获得低于输出的。

出发地点:海德拉巴

抵达地点:班加罗尔

出发日期:2018-01-15

离港开始时间:

出发结束时间:

回归日期:2018-01-19

返回开始时间:19:00

出发结束时间:22:00

2 个答案:

答案 0 :(得分:1)

您能举例说明实体返回的内容吗? 不知道LUIS模型我只能提供一些提示:

  • 如果您正确获取所有实体,则可以将实体添加到机器人的临时列表/容器中,然后根据您的方案对其进行格式化。

  • 您可以尝试围绕composite entities训练您的LUIS模型。这将允许您将自定义实体(FromDestination,ToDestination)与预构建的datetime实体相关联。

希望有所帮助

答案 1 :(得分:0)

为获得良好的LUIS,它将确定参考天/周/月/年

喜欢, datetimeV2->去年,datetimeV2->上一年,

datetimeV2->下个月,datetimeV2->上个月,

datetimeV2->上周,datetimeV2->下周,

datetimeV2->前一天,datetimeV2->下周初,

datetimeV2->第二天,datetimeV2->昨天,

datetimeV2->明天,datetimeV2->前天,

datetimeV2->后天,

等等

类似地, datetimeV2->明天早晨,datetimeV2->明天清晨, datetimeV2->今天傍晚,

等等,

您的查询“我想在下周一预订从海得拉巴飞往班加罗尔的航班,下周五最好在晚上返回”

您可以将日历引用为datetimeV2->下周一和datetimeV2->下周五,并确定适用的适当日期。 当用户提到早上或晚上确认输入并提示用户指定时间时。

毕竟,机器人是一个对话界面,它必须提出问题并寻求澄清,以帮助用户实现其目标。