LUIS 应用的 DatetimeV2 预生成实体

重要

LUIS 将于 2025 年 10 月 1 日停用,从 2023 年 4 月 1 日开始,你将无法创建新的 LUIS 资源。 建议将 LUIS 应用程序迁移对话语言理解,以便从持续的产品支持和多语言功能中受益。

datetimeV2 预生成实体提取日期和时间值。 将以标准化格式解析这些值,使客户端程序能够使用它们。 当某条陈述包含不完整的日期或时间时,LUIS 会在终结点响应中包含过去的值和未来的值。 由于此实体已经过训练,因此不需要将包含 datetimeV2 的陈述示例添加到应用程序意向中。

datetimeV2 的类型

通过 Recognizers-text GitHub 存储库管理 DatetimeV2。

示例 JSON

下面显示了以下话语及其部分 JSON 响应。

8am on may 2nd 2019

"entities": {
    "datetimeV2": [
        {
            "type": "datetime",
            "values": [
                {
                    "timex": "2019-05-02T08",
                    "resolution": [
                        {
                            "value": "2019-05-02 08:00:00"
                        }
                    ]
                }
            ]
        }
    ]
}

datetimeV2 的子类型

datetimeV2 预生成实体具有以下子类型,后面的表中提供了每个子类型的示例:

  • date
  • time
  • daterange
  • timerange
  • datetimerange

解析值

  • 如果陈述中的日期或时间已完全指定且没有歧义,则数组包含一个元素。
  • 如果 datetimeV2 值歧义,则数组包含两个元素。 歧义性包括缺少特定的年份、时间或时间范围。 有关示例,请参阅歧义日期。 不确定时间是上午还是下午时,将包括这两个值。
  • 如果陈述包含两个有歧义的元素,则数组包含四个元素。 这种歧义性包括具有以下特征的元素:
    • 日期或日期范围在年份方面存在歧义
    • 上下午不确定的时间或时间范围,例如 4 月 3 日 3 点。

values 数组的每个元素可以包含以下字段:

属性名称 属性说明
timex 遵循 ISO 8601 标准的、以 TIMEX 格式表示的时间、日期或日期范围,以及使用 TimeML 语言的注释的 TIMEX3 属性。
mod 术语,用于说明如何使用 beforeafter 等值。
type 子类型,可以是下述项目之一:datetimedatetimedaterangetimerangedatetimerangedurationset
value 可选。 采用 yyyy-MM-dd(日期)、HH:mm:ss(时间)、yyyy-MM-dd HH:mm:ss(日期/时间)格式的日期/时间对象。 如果 typeduration,则值是秒数(持续时间)
仅当 typedatetimedatetime 或 `duration 时才使用。

有效日期值

datetimeV2 支持以下范围内的日期:

Min Max
1900 年 1 月 1 日 2099 年 12 月 31 日

歧义日期

如果日期可以是过去或未来的日期,则 LUIS 会提供这两个值。 包括年份中的月份和日期的陈述就是一个例子。

例如,给定以下话语:

May 2nd

  • 如果今天的日期是 2017 年 5 月 3 日,则 LUIS 会提供“2017-05-02”和“2018-05-02”作为值。
  • 如果今天的日期是 2017 年 5 月 1 日,则 LUIS 会提供“2016-05-02”和“2017-05-02”作为值。

以下示例显示了实体“5 月 2 日”的解析。 此解析假设今天的日期是 2017 年 5 月 2 日和 2018 年 5 月 1 日之间的某个日期。 在 timex 字段中包含 X 的字段是未在陈述中显式指定的日期的一部分。

日期解析示例

下面显示了以下话语及其部分 JSON 响应。

May 2nd

"entities": {
    "datetimeV2": [
        {
            "type": "date",
            "values": [
                {
                    "timex": "XXXX-05-02",
                    "resolution": [
                        {
                            "value": "2019-05-02"
                        },
                        {
                            "value": "2020-05-02"
                        }
                    ]
                }
            ]
        }
    ]
}

数字日期的日期范围解析示例

datetimeV2 实体提取日期和时间范围。 startend 字段指定范围的开始和结束。 对于话语 May 2nd to May 5th,LUIS 会提供当年和下一年的 daterange 值。 在 timex 字段中,XXXX 值指示年份的歧义性。 P3D 指示时间段为三天。

下面显示了以下话语及其部分 JSON 响应。

May 2nd to May 5th


"entities": {
    "datetimeV2": [
        {
            "type": "daterange",
            "values": [
                {
                    "timex": "(XXXX-05-02,XXXX-05-05,P3D)",
                    "resolution": [
                        {
                            "start": "2019-05-02",
                            "end": "2019-05-05"
                        },
                        {
                            "start": "2020-05-02",
                            "end": "2020-05-05"
                        }
                    ]
                }
            ]
        }
    ]
}

星期日期的日期范围解析示例

以下示例演示 LUIS 如何使用 datetimeV2 来解析话语 Tuesday to Thursday。 在此示例中,当前日期为 6 月 19 日。 LUIS 为当前日期前面和后面的日期范围包含 daterange 值。

下面显示了以下话语及其部分 JSON 响应。

Tuesday to Thursday

"entities": {
    "datetimeV2": [
        {
            "type": "daterange",
            "values": [
                {
                    "timex": "(XXXX-WXX-2,XXXX-WXX-4,P2D)",
                    "resolution": [
                        {
                            "start": "2019-10-08",
                            "end": "2019-10-10"
                        },
                        {
                            "start": "2019-10-15",
                            "end": "2019-10-17"
                        }
                    ]
                }
            ]
        }
    ]
}

歧义时间

如果时间或时间范围歧义,values 数组将包含两个 time 元素。 如果时间的上下午不确定,则值会同时包含上午时间和下午时间。

时间范围解析示例

DatetimeV2 JSON 响应在 API V3 中已更改。 以下示例演示 LUIS 如何使用 datetimeV2 来解析包含时间范围的陈述。

自 API V2 以来的更改:

  • datetimeV2.timex.type 属性不再返回,因为它在父级别 datetimev2.type 返回。
  • datetimeV2.value 属性已重名为 datetimeV2.timex

下面显示了以下话语及其部分 JSON 响应。

from 6pm to 7pm

以下 JSON 的 verbose 参数设置为 false


"entities": {
    "datetimeV2": [
        {
            "type": "timerange",
            "values": [
                {
                    "timex": "(T18,T19,PT1H)",
                    "resolution": [
                        {
                            "start": "18:00:00",
                            "end": "19:00:00"
                        }
                    ]
                }
            ]
        }
    ]
}

时间解析示例

下面显示了以下话语及其部分 JSON 响应。

8am

"entities": {
    "datetimeV2": [
        {
            "type": "time",
            "values": [
                {
                    "timex": "T08",
                    "resolution": [
                        {
                            "value": "08:00:00"
                        }
                    ]
                }
            ]
        }
    ]
}

已弃用的预生成日期时间

datetime 预生成实体已弃用,已由 datetimeV2 取代。

若要在 LUIS 应用中将 datetime 替换为 datetimeV2,请完成以下步骤:

  1. 打开 LUIS Web 界面的“实体”窗格。
  2. 删除 datetime 预生成实体。
  3. 选择“添加预生成的实体”
  4. 选择“datetimeV2”并单击“保存”。

后续步骤

了解维度电子邮件实体和数字