据我所知,LUIS仅在英语的美国文化中出现(没有英语)。因此,我希望datetimeV2实体返回为YYYY-DD-MM。但是 有时 LUIS会将datetimeV2实体作为YYYY-MM-DD发送回去,因此无法确定何时以编程方式发生这种情况。
示例:
话语“起飞时间从01/03/2019到04/03/2019”解析为美国YYYY-DD-MM格式:
[ { timex: '(2019-01-03,2019-04-03,P90D)',
type: 'daterange',
start: '2019-01-03',
end: '2019-04-03' } ]
但是,话语“从2019年3月1日到2019年3月4日起飞”或“从2019年3月1日到2019年3月4日起飞”解析为英国YYYY-MM-DD格式:
[ { timex: '(2019-03-01,2019-03-04,P3D)',
type: 'daterange',
start: '2019-03-01',
end: '2019-03-04' } ]
此外,如果当月份> 12时日期写为DD / MM / YYYY,则格式将再次切换为YYYY-MM-DD。例如。 “将起飞时间从01/03/2019更改为18/03/2019”将第一个日期解析为YYYY-DD-MM,将第二个日期解析为YYYY-MM-DD:
[ { timex: '(2019-01-03,2019-03-18,P74D)',
type: 'daterange',
start: '2019-01-03',
end: '2019-03-18' } ]
如果格式不断更改,则很难解析日期。如何确保每个日期范围的格式都为YYYY-DD-MM?甚至YYYY-MM-DD,只要它 一致 ,或者至少告诉我它使用了什么格式,我都不会在意。
答案 0 :(得分:0)
您的问题中有几点要注意。
第一个是关于前两个项目的:这里的评估有误:
话语权“从起飞时间01/03/2019到04/03/2019”决定为美国 YYYY-DD-MM格式:
[ { 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个月。
对于您的最后一项,原因有所不同。当您查看它的工作原理时,可以对此进行解释。在这种情况下,您必须了解此项目识别的工作原理:如您所见here,LUIS使用Microsoft.Recognizers.Text
来从文本中提取此实体:
Microsoft.Recognizers.Text支持两个LUIS中的预建实体: 语言了解智能服务和Microsoft Bot 框架;并且还可以作为独立软件包使用(针对基础 类和不同的实体识别器)。
所有这些解决方案都是开源的,请访问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
可能性(由于我不知道在LUIS中使用哪个English
)进行了快速演示,以查看您的数据输出是什么: / p>
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"
}
]
}
如您所见,我的第一个结果与您的结果相符,所以我想LUIS是基于English
的文化,因此,en-US
如果您是上面的人,那就是
基于此,您可以在实现中看到,对于美国版,它将尝试首先匹配YYYY-DD-MM,而YYYY-MM-DD是后备,因此句子的第1个日期使用第一次匹配(确认为1月3日),而第二个日期使用后备时间(确认为3月18日)