В вашем вопросе есть несколько моментов.
Первый из них касается первых двух пунктов: в вашей оценке здесь есть ошибка:
Изречение "взять перерыв с 01.03.2009 по 03.03.2009 », разрешается в формате США ГГГГ-ДД-ММ:
[ { timex: '(2019-01-03,2019-04-03,P90D)',
type: 'daterange',
start: '2019-01-03',
end: '2019-04-03' } ]
Разрешение здесь не американское (YYYY-DD-MM
)формат, это в британском формате YYYY-MM-DD
, потому что, как вы можете видеть, есть упоминание продолжительности P90D
: 90 дней между обеими датами, то есть 3 месяца.
Для вашего последнего элемента,причина в другом.Это можно объяснить, когда вы посмотрите, как это работает.В таких случаях вы должны понимать, как работает распознавание этих элементов: как вы можете видеть здесь , LUIS использует Microsoft.Recognizers.Text
для извлечения этой сущности из текстов:
Microsoft.Recognizers.Text поддерживает готовые объекты в LUIS: Language Understanding Intelligent Service и Microsoft Bot Framework;и также доступен в виде отдельных пакетов (для базовых классов и различных распознавателей сущностей).
Все это решение с открытым исходным кодом, здесь: https://github.com/Microsoft/Recognizers-Text, поэтому мы можем анализировать.
Список доступных культур в версии .Net приведен здесь: https://github.com/Microsoft/Recognizers-Text/blob/master/.NET/Microsoft.Recognizers.Text/Culture.cs
public const string English = "en-us";
public const string EnglishOthers = "en-*";
public const string Chinese = "zh-cn";
public const string Spanish = "es-es";
public const string Portuguese = "pt-br";
public const string French = "fr-fr";
public const string German = "de-de";
public const string Italian = "it-it";
public const string Japanese = "ja-jp";
public const string Dutch = "nl-nl";
public const string Korean = "ko-kr";
Я сделал небольшую демонстрацию, чтобы увидеть, что выводится с вашими данными, используя предоставленные возможности Culture
.по распознавателям (поскольку я не знаю, какой English
используется в LUIS):
Recognizing 'take time off 01/03/2019 to 18/03/2019'
**English**
01/03/2019 to 18/03/2019
{
"values": [
{
"timex": "(2019-01-03,2019-03-18,P74D)",
"type": "daterange",
"start": "2019-01-03",
"end": "2019-03-18"
}
]
}
**English Others**
01/03/2019 to 18/03/2019
{
"values": [
{
"timex": "(2019-03-01,2019-03-18,P17D)",
"type": "daterange",
"start": "2019-03-01",
"end": "2019-03-18"
}
]
}
Как вы видите, мой 1-й результат совпадает с вашим, поэтому я предполагаю, что LUIS основан на English
культура, поэтому en-US
, если вы смотрите выше.
Исходя из этого, в реализации вы можете видеть, что для версии для США она сначала пытается сопоставить YYYY-DD-MM и YYYY-MM-DD - запасной вариант, поэтому 1-я дата вашего предложения использует 1-е совпадение (распознано как 3 января), тогда как 2-я дата использует запасной вариант (распознан как 18 марта)