我已经建立了一个 Luis 模型,并且在解析 builtin.datetime.date 以获取诸如“this weeked”之类的条目时遇到问题返回 2016-W20-WE(或类似的东西),该条目无法使用 DateTime.Parse 成功解析。
我遇到了这篇文章,它似乎使用了一个名为 LUISParse 的类,但我在 Google 上找不到对此的任何引用。
我已经建立了一个 Luis 模型,并且在解析 builtin.datetime.date 以获取诸如“this weeked”之类的条目时遇到问题返回 2016-W20-WE(或类似的东西),该条目无法使用 DateTime.Parse 成功解析。
我遇到了这篇文章,它似乎使用了一个名为 LUISParse 的类,但我在 Google 上找不到对此的任何引用。
我有同样的问题,并在他们的 sdk 文档中看到他们在实际实体字符串上使用 Chronic,而不是试图解释日期格式。见这里:
所以我做了这样的事情:
Chronic.Parser parser = new Chronic.Parser();
EntityRecommendation date = new EntityRecommendation();
luisResponse.TryFindEntity("builtin.datetime.date", out date);
var dateResult = parser.Parse(date.Entity);
它从 date.Entity 开始工作,只包含与日期相关的字符串。例如:我将“是的,我计划下周去”传递给 Luis,实体包含“下周”。
我发现我不得不深入研究内部元素并使用“value”、“start”和“end”属性,而不是使用原始值。这些属性至少遵循日期格式。这适用于周末或未来 3 天以及今天和特定日期请求等持续时间。
if (entity.Type == "builtin.datetimeV2.daterange")
{
var resolutionValues = (IList<object>)entity.Resolution["values"];
foreach (var value in resolutionValues)
{
_start = Convert.ToDateTime(((IDictionary<string, object>)value)["start"]);
_end = Convert.ToDateTime(((IDictionary<string, object>)value)["end"]);
}
}
else if (entity.Type == "builtin.datetimeV2.date")
{
var resolutionValues = (IList<object>)entity.Resolution["values"];
foreach (var value in resolutionValues)
{
_when = Convert.ToDateTime(((IDictionary<string, object>)value)["value"]);
}
}