Teneo Developers

Date and Time NL Analyzer

Introduction

The Teneo Platform natively includes understanding and interpretation of date and time expressions in the below languages:

Date & Time
Chinese (Mandarin)FrenchNorwegian
DanishGermanPortuguese
DutchItalianSpanish
EnglishJapaneseSwedish

Date and time handling in the Teneo Platform consists of three parts:

  • specific date and time Language Objects in the Teneo Lexical Resources (to understand date and time expressions)
  • the DateTime Recognizer Input Processor in the European and Japanese input processing chain (to understand and annotate date and time expressions that aren't easily detected by Language Objects)
  • a post-processing handler for interpreting the results of the date time input processor within the solution.

Language Objects

There are three main Language Objects for the date and time understanding.

Language objectDescriptionVariableExamples
DT_DATE_TIME.RECMatches a combination of data and time when present in an expressiondatetime (map)"18:30 on August 14", "Tomorrow at 5 o'clock", "Next Wednesday at noon"
DT_DATE.RECMatches on just the date part of an expressiondate (map)"14.08.2019", "Monday next week", "Five days from now"
DT_TIME.RECMatches on just the time part of an expressiontime (map)"13:40", "A quarter past eight", "At 5pm", "This morning", "From 5 to 6:30"

The Language Objects are language specific and are delivered with the corresponding Teneo Lexical Resource.

Date formats

The DateTime Recognizer Input Processor is able to interpret dates in one of the three formats (e.g. for 30th June 2020):

Format identifierOrderExamplesDefault for
mdymonth, day, year06302020, 06.30.20, 6.30.2020English
ymdyear, month, day20203006, 20.30.06, 2020.30.6Swedish
dmyday, month, year30062020, 30.06.20, 30.6.2020All other TLRs

The defaults for each language are shown in the above table, however, it is easy for solutions to change the interpretation by copying the Language Object DT_CONFIG_YEAR_MONTH_DAY.SUPPORT, available in the Teneo Lexical Resources, to the local solution and disabling the current interpretation by commenting out the condition and activating the condition part for the desired interpretation order.

DT_CONFIG_YEAR_MONTH_DATE

Annotations

The DateTime Recognizer Input Processor recognizes and annotates various date and/or time expressions, these are then used by the Language Objects to support the Date & Time interpretation. These annotations are intended for internal use, however the information here may help to understand the annotation data which is shown in Try Out.

Language objectDescriptionVariablesExamples
DATE.DATETIMEAnnotation for collated date expressionsdmy (map), mdy(map), ymd(map), all with keys (int) day_of_month, monthand year"140219", "14.02.19", "3.4.2018", "03.04.2018", "20180403"
TIME.DATETIMEAnnotation for collated time expressionshour(int), minute (int), second(int), meridiem(string)"15h30", "11pm", "30 sec"

Named dates

Out-of-the-box, a number of named dates are supported, this list can be extended or modified by making a local copy of the Language Object DT_NAMED_DATE.SUPPORT and adding the condition and desired value.

DT_NAMED_DATE.SUPPORT

Usage

To make use of the date and time feature of Teneo, use one of the date/time/datetime Language Objects in a condition and extract the matched date/time using a propagation script:

tlml

1%DT_DATE_TIME.PHR^{ myDateTime = datetime.Handler.interpret(lob.datetime) }
2

Within the above propagation script the NLU variable is passed into the interpret method on the date time handler in order to convert it into a readily interpretable map.

Date map

KeyValue typeNotes
typeString "point" or "range"
startList<LocalDate>
endList<LocalDate>Populated only when type == range

Time map

KeyValue typeNotes
typeString "point" or "range"
startList<LocalTime>
endList<LocalTime>Populated only when type == range
Example Time Range

When a range is mentioned, type == range and both a start and an end date/time is returned, i.e.

from 17:00 until 18:00 tomorrow

tlml

1%DT_DATE_TIME.PHR^{ myDateTime = datetime.Handler.interpret(lob.datetime) }
2

groovy

1myDateTime = {
2	date = {
3		start = [2019-11-05],
4		type = point
5	},
6	time = {
7		start = [17:00],
8		end = [18:00],
9		type = range
10	}
11}
12
Example Ambiguous Time

Start and end date/time are lists and can return 2 values when the input is ambiguous, i.e.

tomorrow at 5

tlml

1%DT_DATE_TIME.PHR^{ myDateTime = datetime.Handler.interpret(lob.datetime) }
2

groovy

1myDateTime = {
2	date = {
3		start = [2019-11-05],
4		type = point
5	},
6	time = {
7		start = [05:00, 17:00],
8		type = point
9	}
10}
11
Example Interpretation Direction

For some expressions like 'on Monday' or 'in June' the interpretation depends on the context and can denote a date in the past or in the future. By default, the interpretation direction is set to 'forward', but can be changed to 'back', by adding an argument to the DateTime interpreter call:

java

1dateTime = datetime.Handler.interpret(lob.datetime, "back")
2

In June(input given on 6th December 2019)

Forward (default)

tlml

1%DT_DATE_TIME.PHR^{ myDateTime = datetime.Handler.interpret(lob.datetime) }
2

groovy

1myDateTime = {
2    date = {
3        start = [2020-06-01],
4        end = [2020-06-30],
5        type = range
6    },
7    time = {
8        start = [00:00],
9        type = point
10    }
11}
12

i.e. June 2020

Backward

tlml

1%DT_DATE_TIME.PHR^{ myDateTime = datetime.Handler.interpret(lob.datetime, "back") }
2

groovy

1myDateTime = {
2    date = {
3        start = [2019-06-01],
4        end = [2019-06-30],
5        type = range
6    },
7    time = {
8        start = [00:00],
9        type = point
10    }
11}
12

i.e. June 2019

Migration

For users of the previous standalone DateTime handler, there are a number of migration steps to act upon when starting to use the native Date & Time feature of Teneo 6:

  1. Removal of the global date&time pre-listener
    • It is no longer needed as recognition of collated date and time expressions now is handled by the DateTime Recognizer Input Processor
  2. Removal of the DateTimeHandler jar file from Resources > File in the solution
    • Interpretation of date and time expressions is now supported natively within the Engine at runtime
  3. Unassigning the DateTime Handler lexical resource form the solution
    • For the release Date and time Language Objects will be delivered with the Teneo Lexical Resources
    • For this Feature Dev Build Rudolph a separate .library file will be needed
  4. Renaming of Language Objects.
    • Date and time Language Objects for all languages now have the language neutral DT_ prefix and the REC suffix
    • In all languages the three main Language Objects to understand date and/or time expressions in conditions are renamed to: DT_DATE_TIME.REC, DT_DATE.REC and DT_TIME.REC
      • Old names for these Language Objects are however still supported via the Language Object aliases
    • All other Language Objects are renamed with the new DT_ language neutral prefix, and the newly introduced SUPPORT suffix
    • No backwards compatibility is available for these Language Objects as they are not intended to be used directly
  5. Please note the annotation names are changed to DATE.DATETIME and TIME.DATETIME. For the time annotation, the variables day_of_month, monthand year are now integers not strings. Please note that the language specific configurations are moved into the TLRs (and aren't included in the new input processor). The DateTime Recognizer now adds (up to) three different map variables for the DATE.DATETIME annotation as explained further above in the Annotation section.

Deprecated methods

The following static methods are removed from the datetime.Handler and can no longer be called from solution scripting:

java

1addNamedDate()
2getNamedDates()
3addNamedTime(...)
4getNamedTime()
5pastOnly(...)
6futureOnly()
7

Named Dates Configuration

As named dates are now configurable within a solution by modifying the DT_NAMED_DATE.SUPPORT Language Object, the named dates christmas_eve, new_years, new_years_eve, christmas_day and boxing_day have now been removed from the Java code.

Appendix - DateTime Language Object name map

  • Date and time Language Objects for all languages now have the language neutral DT_ prefix and the REC suffix
  • In all languages the three main Language Objects to understand date and/or time expressions in conditions are renamed to: DT_DATE_TIME.REC, DT_DATE.REC and DT_TIME.REC
    • Old names for these Language Objects are however still supported via the Language Object aliases
  • All other Language Objects are renamed with the new DT_ language neutral prefix, and the newly introduced SUPPORT suffix
  • No backwards compatibility is available for these Language Objects as they are not intended to be used directly
CategoryFolderNew nameOriginal nameComment
PrefixDT_DTNL_ DTDE_ DTFR_ DTIT_ DTNO_ DTSV_All language objects in all supported languages are renamed with the DT_ language neutral suffix
DT_DATE.RECDT_DATE.PHRExposed to users, keeping their original name as Alias
DT_TIME.RECDT_TIME.PHRExposed to users, keeping their original name as Alias
DT_DATE_TIME.RECDT_DATE_TIME.PHRExposed to users, keeping their original name as Alias
DateCompoundDT_DAY_MONTH.SUPPORTDT_DAY_AND_MONTH.DATE
DateCompoundDT_DAY_MONTH_YEAR.SUPPORTDT_DAY_MONTH_YEAR.DATE
DateCompoundDT_DAY_OF_MONTH.SUPPORTDT_DAY_OF_MONTH.DATE
DateCompoundDT_MONTH_YEAR.SUPPORTDT_MONTH_AND_YEAR.DATE
DateCompoundDT_SEASON_YEAR.SUPPORTDT_SEASON_YEAR.DATE
DateCompoundDT_THIS_NEXT_PREVIOUS_DATE.SUPPORTDT_THISNEXTPREVIOUS_DATEUNIT.DATE
DateCompoundDT_WEEKDAY_DAY_MONTH_YEAR.SUPPORTDT_WEEKDAY_DAY_MONTH_YEAR.DATE
DateCompoundDT_WEEKDAY_DAY_OF_MONTH.SUPPORTDT_WEEKDAY_DAY_OF_MONTH.DATE
DateDate expression phrasesDT_AFTER_DATE.SUPPORTDT_AFTER_DATE.PHR
DateDate expression phrasesDT_AROUND_DATE_DURATION.SUPPORTDT_AROUND_DURATION.PHR
DateDate expression phrasesDT_BEFORE_OFFSET_DATE.SUPPORTDT_BEFORE_OFFSET.PHR
DateDate expression phrasesDT_BETWEEN_DATE1_DATE2.SUPPORTDT_BETWEEN_DATE1_DATE2.PHR
DateDate expression phrasesDT_DATE_RANGE.SUPPORTDT_RANGE.PHR
DateDate expression phrasesDT_DURATION_DURING_DATE.SUPPORTDT_DURATION_DURING_DATE.PHR
DateDate expression phrasesDT_DATE_DURING_DATE_DURATION.SUPPORTDT_DURING_DURATION.PHR
DateDate expression phrasesDT_FIRST_LAST_DATE.SUPPORTDT_FIRSTLAST_DATEUNIT.PHR
DateDate expression phrasesDT_IN_OFFSET_DATE.SUPPORTDT_IN_OFFSET.PHR
DateDate expression phrasesDT_OFFSET_DATE_AFTER_DATE.SUPPORTDT_OFFSET_AFTER_DATE.PHR
DateDate expression phrasesDT_OFFSET_DATE_AGO.SUPPORTDT_OFFSET_AGO.PHR
DateDate expression phrasesDT_DATE_OFFSET_DATE_AGO.SUPPORTDT_OFFSET_AGO_DATE.PHR
DateDate expression phrasesDT_OFFSET_DATE_AROUND_DATE.SUPPORTDT_OFFSET_AROUND_DATE.PHR
DateDate expression phrasesDT_OFFSET_DATE_BEFORE_DATE.SUPPORTDT_OFFSET_BEFORE_DATE.PHR
DateDate expression phrasesDT_OFFSET_DATE.SUPPORTDT_OFFSET.PHR
DateDate expression phrasesDT_THIS_NEXT_PREVIOUS_DATE_DURATION .SUPPORTDT_PREVIOUSNEXT_DATE_DURATION.PHR
DateDate expression phrasesDT_THIS_NEXT_PREVIOUS_NAMED_DATE .SUPPORTDT_THISNEXTPREVIOUS_NAMED.PHR
DateDate expression phrasesDT_UNTIL_DATE.SUPPORTDT_UNTIL_DATE.PHR
DateNamed DateDT_NAMED_DATE.SUPPORTDT_NAMED.LIST
DateNumericalDT_DAY_OF_MONTH_DIGITS.SUPPORTDT_DAY_OF_MONTH.DATE.DIGITS
DateNumericalDT_MONTH_DIGITS.SUPPORTDT_MONTH.DATE.DIGITS
DateNumericalDT_YEAR_FULL.SUPPORTDT_YEAR.DATE.DIGITS
DateNumericalDT_YEAR_SHORT.SUPPORTDT_YEAR.SHORT.DATE.DIGITS
DateTextDT_MONTH_FULL_TEXT.SUPPORTDT_MONTHS_FULL.TEXT
DateTextDT_MONTH_SHORT_TEXT.SUPPORTDT_MONTHS_SHORT.TEXT
DateTextDT_MONTH_TEXT.SUPPORTDT_MONTHS.TEXT
DateTextDT_NAMED_RELATIVE_DATE.SUPPORTDT_NAMED_RELATIVE.DATE
DateTextDT_QUARTER.SUPPORTDT_QUARTER.DATE
DateTextDT_SEASON.SUPPORTDT_SEASON.DATE
DateTextDT_WEEK.SUPPORTDT_WEEK.DATE
DateTextDT_WEEKDAY_FULL_TEXT.SUPPORTDT_WEEKDAYS_FULL.TEXT
DateTextDT_WEEKDAY_SHORT_TEXT.SUPPORTDT_WEEKDAYS_SHORT.TEXT
DateTextDT_WEEKDAY_TEXT.SUPPORTDT_WEEKDAYS.TEXT
TimeBasic TimeDT_AMPM.SUPPORTDT_AMPM.SYN
TimeBasic TimeDT_NAMED_TIME.SUPPORTDT_NAMED_TIME.TIME
TimeBasic TimeDT_TIME_OF_DAY.SUPPORTDT_TIME_OF_DAY.TEXT
TimeCompound TimeDT_HRS.SUPPORTDT_HRS.TIME
TimeCompound TimeDT_HRS_MIN.SUPPORTDT_HRS_MIN.TIME
TimeCompound TimeDT_HRS_MIN_SEC.SUPPORTDT_HRS_MIN_SEC.TIME
TimeCompound TimeDT_THIS_NEXT_PREVIOUS_TIME.SUPPORTDT_THISNEXTPREVIOUS_TIMEUNIT.TIME
TimeTime Expressions phrasesDT_ABS_TIME.SUPPORTDT_ABS_TIME.PHR
TimeTime Expressions phrasesDT_AFTER_TIME.SUPPORTDT_AFTER_TIME.PHR
TimeTime Expressions phrasesDT_BEFORE_TIME.SUPPORTDT_BEFORE_TIME.PHR
TimeTime Expressions phrasesDT_BETWEEN_TIME1_TIME2.SUPPORTDT_BETWEEN_TIME1_TIME2.PHR
TimeTime Expressions phrasesDT_PREVIOUS_NEXT_TIME_DURATION.SUPPORTDT_PREVIOUSNEXT_DURATION.PHR
TimeTime Expressions phrasesDT_OFFSET_TIME.SUPPORTDT_TIME_OFFSET.PHR
TimeTime Expressions phrasesDT_OFFSET_TIME_FROM_NOW.SUPPORTDT_TIME_OFFSET_AFTER_DATE.PHR
TimeTime Expressions phrasesDT_OFFSET_TIME_AGO.SUPPORTDT_TIME_OFFSET_AGO.PHR
TimeTime Expressions phrasesDT_IN_OFFSET_TIME.SUPPORTDT_TIME_OFFSET_IN.PHR
TimeTime Expressions phrasesDT_OFFSET_TIME_PAST_TIME.SUPPORTDT_TIME_OFFSET_PAST_TIME.PHR
TimeTime Expressions phrasesDT_OFFSET_TIME_TO_TIME.SUPPORTDT_TIME_OFFSET_TO_TIME.PHR
TimeTime Expressions phrasesDT_UNTIL_TIME.SUPPORTDT_UNTIL_TIME.PHR
BothFunction wordsDT_A_FEW_COUPLE.SUPPORTDT_AFEWCOUPLE
BothFunction wordsDT_FILLER.SUPPORTDT_FILLER
BothFunction wordsDT_FIRST_LAST.SUPPORTDT_FIRSTLAST
BothFunction wordsDT_PREP.SUPPORTDT_PREP
BothFunction wordsDT_THE_A.SUPPORTDT_THE_A
BothFunction wordsDT_THIS_NEXT_PREVIOUS.SUPPORTDT_THISNEXTPREVIOUS
BothFunction wordsDT_TO_UNTIL_THRU.SUPPORTDT_TOUNTILTHRU
BothNumbers 0-99 cardinalsDT_0_24.SUPPORTDT_0_24
BothNumbers 0-99 cardinalsDT_0_59.SUPPORTDT_0_59
BothNumbers 0-99 cardinalsDT_0_99.SUPPORTDT_0_99
BothNumbers 0-99 cardinalsDT_1_4.SUPPORTDT_1_4
BothNumbers 0-99 cardinalsDT_1_12.SUPPORTDT_1_12
BothNumbers 0-99 cardinalsDT_1_31.SUPPORTDT_1_31
BothNumbers 0-99 cardinalsDT_1_53.SUPPORTDT_1_53
BothNumbers 0-99 digitsDT_DIGITS_0.SUPPORTDT_0.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_0_24.SUPPORTDT_0_24.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_0_59_AMPM.SUPPORTDT_0_59.AMPM.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_0_59.SUPPORTDT_0_59.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_0_59_H_MIN_SEC.SUPPORTDT_0_59.H_MIN_SEC.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_0_99.SUPPORTDT_0_99.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_4.SUPPORTDT_1_4.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_9.SUPPORTDT_1_9.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_12_AMPM.SUPPORTDT_1_12.AMPM.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_12.SUPPORTDT_1_12.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_31.SUPPORTDT_1_31.DIGITS
BothNumbers 0-99 digitsDT_DIGITS_1_53.SUPPORTDT_1_53.DIGITS
BothNumbers 0-99 digitsDT_WORDS_1_53.SUPPORTDT_1_53.WORDS
BothNumbers 0-99 digitsDT_DIGITS_1_59.SUPPORTDT_1_59.DIGITS
BothNumbers 0-99 digitsDT_WORDS_1_59.SUPPORTDT_1_59.WORDS
BothNumbers 0-99 digits W1DT_DIGITS_0_W1.SUPPORTDT_0.DIGITS_W1All W1 and W2 language objects are removed and their condition is moved up to the corresponding DIGITS_ LOBs
BothNumbers 0-99 digits W1DT_DIGITS_0_9_W1.SUPPORTDT_0_9.DIGITS_W1not used
BothNumbers 0-99 digits W1DT_DIGITS_0_24_W1.SUPPORTDT_0_24.DIGITS_W1
BothNumbers 0-99 digits W1DT_DIGITS_0_59.AMPM_W1.SUPPORTDT_0_59.AMPM.DIGITS_W1
BothNumbers 0-99 digits W1DT_DIGITS_0_59_W1.SUPPORTDT_0_59.DIGITS_W1
BothNumbers 0-99 digits W1DT_DIGITS_0_59.H_MIN_SEC.W1.SUPPORTDT_0_59.H_MIN_SEC.DIGITS_W1
BothNumbers 0-99 digits W1DT_0_99.DIGITS_W1.SUPPORTDT_0_99.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_4.DIGITS_W1.SUPPORTDT_1_4.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_9.DIGITS_W1.SUPPORTDT_1_9.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_12.AMPM.DIGITS_W1.SUPPORTDT_1_12.AMPM.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_12.DIGITS_W1.SUPPORTDT_1_12.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_31.DIGITS_W1.SUPPORTDT_1_31.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_53.DIGITS_W1.SUPPORTDT_1_53.DIGITS_W1
BothNumbers 0-99 digits W1DT_1_59.DIGITS_W1.SUPPORTDT_1_59.DIGITS_W1
BothNumbers 0-99 digits W2DT_0.DIGITS_W2.SUPPORTDT_0.DIGITS_W2
BothNumbers 0-99 digits W2DT_0_9.DIGITS_W2.SUPPORTDT_0_9.DIGITS_W2not used
BothNumbers 0-99 digits W2DT_0_24.DIGITS_W2.SUPPORTDT_0_24.DIGITS_W2
BothNumbers 0-99 digits W2DT_0_59.AMPM.DIGITS_W2.SUPPORTDT_0_59.AMPM.DIGITS_W2
BothNumbers 0-99 digits W2DT_0_59.DIGITS_W2.SUPPORTDT_0_59.DIGITS_W2
BothNumbers 0-99 digits W2DT_0_59.H_MIN_SEC.DIGITS_W2.SUPPORTDT_0_59.H_MIN_SEC.DIGITS_W2
BothNumbers 0-99 digits W2DT_0_99.DIGITS_W2.SUPPORTDT_0_99.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_4.DIGITS_W2.SUPPORTDT_1_4.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_9.DIGITS_W2.SUPPORTDT_1_9.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_12.AMPM.DIGITS_W2.SUPPORTDT_1_12.AMPM.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_12.DIGITS_W2.SUPPORTDT_1_12.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_31.DIGITS_W2.SUPPORTDT_1_31.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_59.DIGITS_W2.SUPPORTDT_1_59.DIGITS_W2
BothNumbers 0-99 digits W2DT_1_99.DIGITS_W2.SUPPORTDT_1_99.DIGITS_W2
BothNumbers 0-99 digits W2DT_HOUR_H_MIN.DIGITS_W2.SUPPORTDT_HOUR_H_MIN.DIGITS_W2
BothNumbers 0-99 OrdinalsDT_ORDINAL_0.SUPPORTDT_0.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_0_9.SUPPORTDT_0_9.ORDINALnot used
BothNumbers 0-99 OrdinalsDT_ORDINAL_0_59.SUPPORTDT_0_59.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_0_99.SUPPORTDT_0_99.ORDINALnot used
BothNumbers 0-99 OrdinalsDT_ORDINAL_1_4.SUPPORTDT_1_4.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_1_9.SUPPORTDT_1_9.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_1_12.SUPPORTDT_1_12.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_1_31.SUPPORTDT_1_31.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_1_59.SUPPORTDT_1_59.ORDINAL
BothNumbers 0-99 OrdinalsDT_ORDINAL_100_X.SUPPORTDT_100_X.ORDINALnot used
BothNumbers 0-99 WordsDT_WORDS_0.SUPPORTDT_0.WORDS
BothNumbers 0-99 WordsDT_WORDS_0_9.SUPPORTDT_0_9.WORDS
BothNumbers 0-99 WordsDT_WORDS_0_24.SUPPORTDT_0_24.WORDS
BothNumbers 0-99 WordsDT_WORDS_0_59.SUPPORTDT_0_59.WORDS
BothNumbers 0-99 WordsDT_WORDS_0_99.SUPPORTDT_0_99.WORDS
BothNumbers 0-99 WordsDT_WORDS_1_4.SUPPORTDT_1_4.WORDS
BothNumbers 0-99 WordsDT_WORDS_1_9.SUPPORTDT_1_9.WORDS
BothNumbers 0-99 WordsDT_WORDS_1_12.SUPPORTDT_1_12.WORDS
BothNumbers 0-99 WordsDT_WORDS_1_31.SUPPORTDT_1_31.WORDS