-
Notifications
You must be signed in to change notification settings - Fork 428
/
DateTimeRecognizer.cs
148 lines (129 loc) · 7.79 KB
/
DateTimeRecognizer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
using System.Collections.Generic;
using Microsoft.Recognizers.Text.DateTime.Chinese;
using Microsoft.Recognizers.Text.DateTime.Dutch;
using Microsoft.Recognizers.Text.DateTime.English;
using Microsoft.Recognizers.Text.DateTime.French;
using Microsoft.Recognizers.Text.DateTime.German;
using Microsoft.Recognizers.Text.DateTime.Hindi;
using Microsoft.Recognizers.Text.DateTime.Italian;
using Microsoft.Recognizers.Text.DateTime.Portuguese;
using Microsoft.Recognizers.Text.DateTime.Spanish;
using Microsoft.Recognizers.Text.DateTime.Turkish;
namespace Microsoft.Recognizers.Text.DateTime
{
public class DateTimeRecognizer : Recognizer<DateTimeOptions>
{
public DateTimeRecognizer(string targetCulture, DateTimeOptions options = DateTimeOptions.None, bool lazyInitialization = false)
: base(targetCulture, options, lazyInitialization)
{
}
public DateTimeRecognizer(string targetCulture, int options, bool lazyInitialization = false)
: this(targetCulture, GetOptions(options), lazyInitialization)
{
}
public DateTimeRecognizer(DateTimeOptions options = DateTimeOptions.None, bool lazyInitialization = true)
: this(null, options, lazyInitialization)
{
}
public DateTimeRecognizer(int options, bool lazyInitialization = true)
: this(null, options, lazyInitialization)
{
}
public static List<ModelResult> RecognizeDateTime(string query, string culture, DateTimeOptions options = DateTimeOptions.None, System.DateTime? refTime = null, bool fallbackToDefaultCulture = true)
{
var recognizer = new DateTimeRecognizer(options);
var model = recognizer.GetDateTimeModel(culture, fallbackToDefaultCulture);
return model.Parse(query, refTime ?? System.DateTime.Now);
}
public DateTimeModel GetDateTimeModel(string culture = null, bool fallbackToDefaultCulture = true)
{
return GetModel<DateTimeModel>(culture, fallbackToDefaultCulture);
}
protected override void InitializeConfiguration()
{
RegisterModel<DateTimeModel>(
Culture.English,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new EnglishMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.English, options, dmyDateFormat: false))),
new BaseMergedDateTimeExtractor(
new EnglishMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.English, options, dmyDateFormat: false)))));
RegisterModel<DateTimeModel>(
Culture.EnglishOthers,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new EnglishMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.EnglishOthers, options, dmyDateFormat: true))),
new BaseMergedDateTimeExtractor(
new EnglishMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.EnglishOthers, options, dmyDateFormat: true)))));
RegisterModel<DateTimeModel>(
Culture.Chinese,
options => new DateTimeModel(
new FullDateTimeParser(
new ChineseDateTimeParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Chinese, options))),
new ChineseMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Chinese, options))));
RegisterModel<DateTimeModel>(
Culture.Spanish,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new SpanishMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Spanish, options))),
new BaseMergedDateTimeExtractor(
new SpanishMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Spanish, options)))));
RegisterModel<DateTimeModel>(
Culture.French,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new FrenchMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.French, options))),
new BaseMergedDateTimeExtractor(
new FrenchMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.French, options)))));
RegisterModel<DateTimeModel>(
Culture.Portuguese,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new PortugueseMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Portuguese, options))),
new BaseMergedDateTimeExtractor(
new PortugueseMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Portuguese, options)))));
RegisterModel<DateTimeModel>(
Culture.German,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new GermanMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.German, options))),
new BaseMergedDateTimeExtractor(
new GermanMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.German, options)))));
RegisterModel<DateTimeModel>(
Culture.Italian,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new ItalianMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Italian, options))),
new BaseMergedDateTimeExtractor(
new ItalianMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Italian, options)))));
RegisterModel<DateTimeModel>(
Culture.Turkish,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new TurkishMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Turkish, options))),
new BaseMergedDateTimeExtractor(
new TurkishMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Turkish, options)))));
RegisterModel<DateTimeModel>(
Culture.Hindi,
options => new DateTimeModel(
new BaseMergedDateTimeParser(
new HindiMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Hindi, options))),
new BaseMergedDateTimeExtractor(
new HindiMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Hindi, options)))));
// TODO to be uncommented when all tests for Dutch are green.
// RegisterModel<DateTimeModel>(
// Culture.Dutch,
// options => new DateTimeModel(
// new BaseMergedDateTimeParser(
// new DutchMergedParserConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Dutch, options))),
// new BaseMergedDateTimeExtractor(
// new DutchMergedExtractorConfiguration(new BaseDateTimeOptionsConfiguration(Culture.Dutch, options)))));
// TODO to be uncommented when all tests for Japanese are green.
// RegisterModel<DateTimeModel>(
// Culture.Japanese,
// options => new DateTimeModel(
// new FullDateTimeParser(new JapaneseDateTimeParserConfiguration(options)),
// new JapaneseMergedExtractor(options)));
}
}
}