public DateTimeParseResult Parse(ExtractResult er, DateObject referenceTime) { object value = null; if (er.Type.Equals(ParserName)) { DateTimeResolutionResult innerResult; // Resolve timezome if (TimeZoneUtility.ShouldResolveTimeZone(er, config.Options)) { var metadata = er.Data as Dictionary <string, object>; var timezoneEr = metadata[Constants.SYS_DATETIME_TIMEZONE] as ExtractResult; var timezonePr = config.TimeZoneParser.Parse(timezoneEr); innerResult = InternalParse(er.Text.Substring(0, (int)(er.Text.Length - timezoneEr.Length)), referenceTime); if (timezonePr.Value != null) { innerResult.TimeZoneResolution = ((DateTimeResolutionResult)timezonePr.Value).TimeZoneResolution; } } else { innerResult = InternalParse(er.Text, referenceTime); } if (innerResult.Success) { innerResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.TIME, DateTimeFormatUtil.FormatTime((DateObject)innerResult.FutureValue) } }; innerResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.TIME, DateTimeFormatUtil.FormatTime((DateObject)innerResult.PastValue) } }; value = innerResult; } } var ret = new DateTimeParseResult { Text = er.Text, Start = er.Start, Length = er.Length, Type = er.Type, Data = er.Data, Value = value, TimexStr = value == null ? "" : ((DateTimeResolutionResult)value).Timex, ResolutionStr = "" }; return(ret); }
public List <ExtractResult> Extract(string text, DateObject reference) { var tokens = new List <Token>(); tokens.AddRange(MatchSimpleCases(text)); tokens.AddRange(MergeTwoTimePoints(text, reference)); tokens.AddRange(MatchTimeOfDay(text)); var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName); if ((this.config.Options & DateTimeOptions.EnablePreview) != 0) { timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text); } return(timePeriodErs); }
public virtual List <ExtractResult> Extract(string text, DateObject reference) { var tokens = new List <Token>(); tokens.AddRange(BasicRegexMatch(text)); tokens.AddRange(AtRegexMatch(text)); tokens.AddRange(BeforeAfterRegexMatch(text)); tokens.AddRange(SpecialCasesRegexMatch(text, reference)); var timeErs = Token.MergeAllTokens(tokens, text, ExtractorName); if ((this.config.Options & DateTimeOptions.EnablePreview) != 0) { timeErs = TimeZoneUtility.MergeTimeZones(timeErs, config.TimeZoneExtractor.Extract(text, reference), text); } return(timeErs); }
public virtual List <ExtractResult> ExtractImpl(string text, DateObject reference) { var tokens = new List <Token>(); tokens.AddRange(BasicRegexMatch(text)); tokens.AddRange(AtRegexMatch(text)); tokens.AddRange(BeforeAfterRegexMatch(text)); tokens.AddRange(SpecialCasesRegexMatch(text, reference)); var timeErs = Token.MergeAllTokens(tokens, text, ExtractorName); if ((this.config.Options & DateTimeOptions.EnablePreview) != 0) { timeErs = TimeZoneUtility.MergeTimeZones(timeErs, config.TimeZoneExtractor.Extract(text, reference), text); } // Remove common ambiguous cases timeErs = ExtractResultExtension.FilterAmbiguity(timeErs, text, this.config.AmbiguityFiltersDict); return(timeErs); }
public List <ExtractResult> Extract(string text, DateObject reference) { var tokens = new List <Token>(); tokens.AddRange(MatchSimpleCases(text)); tokens.AddRange(MergeTwoTimePoints(text, reference)); tokens.AddRange(MatchTimeOfDay(text)); // Handle pure number cases like "from 6 to 7" cannot be extracted as time ranges under Calendar Mode if ((this.config.Options & DateTimeOptions.CalendarMode) != 0) { tokens.AddRange(MatchPureNumberCases(text)); } var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName); if ((this.config.Options & DateTimeOptions.EnablePreview) != 0) { timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text); } return(timePeriodErs); }
public DateTimeParseResult Parse(ExtractResult er, DateObject refTime) { var referenceTime = refTime; object value = null; if (er.Type.Equals(ParserName)) { var innerResult = InternalParse(er.Text, referenceTime); // Handling timeZone if (innerResult.Success && TimeZoneUtility.ShouldResolveTimeZone(er, this.Config.Options)) { var metadata = er.Data as Dictionary <string, object>; var timezoneEr = metadata[Constants.SYS_DATETIME_TIMEZONE] as ExtractResult; var timezonePr = this.Config.TimeZoneParser.Parse(timezoneEr); if (timezonePr != null && timezonePr.Value != null) { innerResult.TimeZoneResolution = ((DateTimeResolutionResult)timezonePr.Value).TimeZoneResolution; } } if (innerResult.Success) { if (!IsBeforeOrAfterMod(innerResult.Mod)) { innerResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.START_DATETIME, DateTimeFormatUtil.FormatDateTime(((Tuple <DateObject, DateObject>)innerResult.FutureValue).Item1) }, { TimeTypeConstants.END_DATETIME, DateTimeFormatUtil.FormatDateTime(((Tuple <DateObject, DateObject>)innerResult.FutureValue).Item2) }, }; innerResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.START_DATETIME, DateTimeFormatUtil.FormatDateTime(((Tuple <DateObject, DateObject>)innerResult.PastValue).Item1) }, { TimeTypeConstants.END_DATETIME, DateTimeFormatUtil.FormatDateTime(((Tuple <DateObject, DateObject>)innerResult.PastValue).Item2) }, }; } else { if (innerResult.Mod == Constants.AFTER_MOD) { // Cases like "1/1/2015 after 2:00" there is no EndTime innerResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.START_DATETIME, DateTimeFormatUtil.FormatDateTime((DateObject)innerResult.FutureValue) }, }; innerResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.START_DATETIME, DateTimeFormatUtil.FormatDateTime((DateObject)innerResult.PastValue) }, }; } else { // Cases like "1/1/2015 before 5:00 in the afternoon" there is no StartTime innerResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.END_DATETIME, DateTimeFormatUtil.FormatDateTime((DateObject)innerResult.FutureValue) }, }; innerResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.END_DATETIME, DateTimeFormatUtil.FormatDateTime((DateObject)innerResult.PastValue) }, }; } } value = innerResult; } } var ret = new DateTimeParseResult { Text = er.Text, Start = er.Start, Length = er.Length, Type = er.Type, Data = er.Data, Value = value, TimexStr = value == null ? string.Empty : ((DateTimeResolutionResult)value).Timex, ResolutionStr = string.Empty, }; return(ret); }
public DateTimeParseResult Parse(ExtractResult er, DateObject refTime) { var referenceTime = refTime; object value = null; if (er.Type.Equals(ParserName, StringComparison.Ordinal)) { DateTimeResolutionResult innerResult; if (TimeZoneUtility.ShouldResolveTimeZone(er, config.Options)) { var metadata = er.Data as Dictionary <string, object>; var timezoneEr = metadata[Constants.SYS_DATETIME_TIMEZONE] as ExtractResult; var timezonePr = config.TimeZoneParser.Parse(timezoneEr); innerResult = InternalParse( er.Text.Substring(0, (int)(er.Length - timezoneEr.Length)), referenceTime); if (timezonePr != null && timezonePr.Value != null) { innerResult.TimeZoneResolution = ((DateTimeResolutionResult)timezonePr.Value).TimeZoneResolution; } } else { innerResult = InternalParse(er.Text, referenceTime); } if (innerResult.Success) { innerResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.START_TIME, DateTimeFormatUtil.FormatTime(((Tuple <DateObject, DateObject>)innerResult.FutureValue).Item1) }, { TimeTypeConstants.END_TIME, DateTimeFormatUtil.FormatTime(((Tuple <DateObject, DateObject>)innerResult.FutureValue).Item2) }, }; innerResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.START_TIME, DateTimeFormatUtil.FormatTime(((Tuple <DateObject, DateObject>)innerResult.PastValue).Item1) }, { TimeTypeConstants.END_TIME, DateTimeFormatUtil.FormatTime(((Tuple <DateObject, DateObject>)innerResult.PastValue).Item2) }, }; value = innerResult; } } var ret = new DateTimeParseResult { Text = er.Text, Start = er.Start, Length = er.Length, Type = er.Type, Data = er.Data, Value = value, TimexStr = value is null ? string.Empty : ((DateTimeResolutionResult)value).Timex, ResolutionStr = string.Empty, }; return(ret); }