解析 LOUIS builtin.datetime.date

Parse LUIS builtin.datetime.date

我已经建立了一个 Luis 模型,我在解析 builtin.datetime.date 的条目时遇到了问题,例如 "this weeked" returns 2016-W20-WE(或类似的东西)不使用 DateTime.Parse 成功解析。

我发现了这个 post,它似乎使用了一个名为 LUISParse 的 class,但我在 Google 上找不到任何对此的引用。

我有同样的问题,在他们的 sdk 文档中看到他们在实际实体字符串上使用 Chronic 而不是试图解释日期格式。 See Here:

所以我做了这样的事情:

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 仅包含与日期相关的字符串。例如:我将 "Yes I am planning to go next week" 传递给 Luis,实体包含 "next week".

我发现我必须深入研究内部元素并使用 "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"]);
                }
            }