public bool GetMatchedTimeRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); var pluralMatch = PluralTokenRegex.MatchBegin(trimmedText, trim: true); if (pluralMatch.Success) { trimmedText = trimmedText.Substring(pluralMatch.Length).Trim(); } beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = string.Empty; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.StartsWith(o, StringComparison.InvariantCulture))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.StartsWith(o, StringComparison.InvariantCulture))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.StartsWith(o, StringComparison.InvariantCulture))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.Equals(o, StringComparison.InvariantCulture))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.StartsWith(o, StringComparison.InvariantCulture))) { timeOfDay = Constants.Night; } else if (DateTimeDefinitions.BusinessHourSplitStrings.Any(o => trimmedText.Contains(o))) { timeOfDay = Constants.BusinessHour; } else { timex = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedTimexRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim().ToLowerInvariant(); if (trimmedText.EndsWith("s")) { trimmedText = trimmedText.Substring(0, trimmedText.Length - 1); } beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = ""; if (trimmedText.EndsWith(DateTimeDefinitions.Morning)) { timeOfDay = Constants.Morning; } else if (trimmedText.EndsWith(DateTimeDefinitions.Afternoon)) { timeOfDay = Constants.Afternoon; } else if (trimmedText.EndsWith(DateTimeDefinitions.Evening)) { timeOfDay = Constants.Evening; } else if (trimmedText.Equals(DateTimeDefinitions.Daytime)) { timeOfDay = Constants.Daytime; } else if (trimmedText.EndsWith(DateTimeDefinitions.Night)) { timeOfDay = Constants.Night; } else if (DateTimeDefinitions.BusinessHourSplitStrings.All(o => trimmedText.Contains(o))) { timeOfDay = Constants.BusinessHour; } else { timex = null; return(false); } var parseResult = TimexUtility.ParseTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedDailyTimex(string text, out string timex) { var trimmedText = text.Trim().Normalized(DateTimeDefinitions.SpecialCharactersEquivalent); float durationLength = 1; // Default value float multiplier = 1; string durationType; if (DayTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexDay; } else if (WeekTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexWeek; } else if (BiWeekTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexWeek; multiplier = 2; } else if (MonthTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexMonth; } else if (BiMonthTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexMonth; multiplier = 2; } else if (QuarterTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexMonth; multiplier = 3; } else if (SemiAnnualTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexYear; multiplier = 0.5f; } else if (YearTypeRegex.IsMatch(trimmedText)) { durationType = Constants.TimexYear; } else { timex = null; return(false); } timex = TimexUtility.GenerateSetTimex(durationType, durationLength, multiplier); return(true); }
public bool GetMatchedTimexRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); if (PluralTokenRegex.IsMatch(trimmedText)) { trimmedText = trimmedText.Substring(0, trimmedText.Length - 4); } beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = string.Empty; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.Equals(o))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Night; } else if (DateTimeDefinitions.BusinessHourSplitStrings.All(o => trimmedText.Contains(o))) { timeOfDay = Constants.BusinessHour; } else { timex = null; return(false); } var parseResult = TimexUtility.ParseTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedDailyTimex(string text, out string timex) { var trimmedText = text.Trim(); float durationLength = 1; // Default value float multiplier = 1; string durationType; if (DoubleMultiplierRegex.IsMatch(trimmedText)) { multiplier = 2; } else if (HalfMultiplierRegex.IsMatch(trimmedText)) { multiplier = 0.5f; } if (DayTypeRegex.IsMatch(trimmedText)) { durationType = "D"; } else if (WeekTypeRegex.IsMatch(trimmedText)) { durationType = "W"; } else if (WeekendTypeRegex.IsMatch(trimmedText)) { durationType = "WE"; } else if (MonthTypeRegex.IsMatch(trimmedText)) { durationType = "M"; } else if (QuarterTypeRegex.IsMatch(trimmedText)) { durationLength = 3; durationType = "M"; } else if (YearTypeRegex.IsMatch(trimmedText)) { durationType = "Y"; } else { timex = null; return(false); } timex = TimexUtility.GenerateSetTimex(durationType, durationLength, multiplier); return(true); }
public DateTimeParseResult Parse(ExtractResult er, DateObject refDate) { var referenceTime = refDate; var dateTimeParseResult = ParseMergedDuration(er.Text, referenceTime); if (!dateTimeParseResult.Success) { var parseResult = InternalParser.Parse(er); var unitResult = parseResult.Value as UnitValue; if (unitResult == null) { return(null); } var unitStr = unitResult.Unit; var numStr = unitResult.Number; dateTimeParseResult.Timex = TimexUtility.GenerateDurationTimex(double.Parse(numStr), unitStr, BaseDurationParser.IsLessThanDay(unitStr)); dateTimeParseResult.FutureValue = dateTimeParseResult.PastValue = double.Parse(numStr) * UnitValueMap[unitStr]; dateTimeParseResult.Success = true; } if (dateTimeParseResult.Success) { dateTimeParseResult.FutureResolution = new Dictionary <string, string> { { TimeTypeConstants.DURATION, dateTimeParseResult.FutureValue.ToString() }, }; dateTimeParseResult.PastResolution = new Dictionary <string, string> { { TimeTypeConstants.DURATION, dateTimeParseResult.PastValue.ToString() }, }; } var ret = new DateTimeParseResult { Text = er.Text, Start = er.Start, Length = er.Length, Type = er.Type, Data = er.Data, Value = dateTimeParseResult, TimexStr = dateTimeParseResult.Timex, ResolutionStr = string.Empty, }; return(ret); }
public bool GetMatchedTimexRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); if (trimmedText.EndsWith("s", StringComparison.Ordinal)) { trimmedText = trimmedText.Substring(0, trimmedText.Length - 1); } beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = string.Empty; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.Equals(o, StringComparison.Ordinal))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Night; } else { timex = null; return(false); } var parseResult = TimexUtility.ParseTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
private bool GetMatchedTimexRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = ""; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.Equals(o))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.EndsWith(o))) { timeOfDay = Constants.Night; } else { timex = null; return(false); } var parseResult = TimexUtility.ParseTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedTimeRange(string text, out string todSymbol, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim().Normalized(DateTimeDefinitions.SpecialCharactersEquivalent); beginHour = 0; endHour = 0; endMin = 0; // @TODO move hardcoded values to resources file if (trimmedText.EndsWith("madrugada", StringComparison.Ordinal)) { todSymbol = Constants.EarlyMorning; } else if (trimmedText.EndsWith("manha", StringComparison.Ordinal)) { todSymbol = Constants.Morning; } else if (trimmedText.Contains("passado o meio dia") || trimmedText.Contains("depois do meio dia")) { todSymbol = Constants.Afternoon; } else if (trimmedText.EndsWith("tarde", StringComparison.Ordinal)) { todSymbol = Constants.Evening; } else if (trimmedText.EndsWith("noite", StringComparison.Ordinal)) { todSymbol = Constants.Night; } else { todSymbol = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(todSymbol); todSymbol = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedTimeRange(string text, out string todSymbol, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); beginHour = 0; endHour = 0; endMin = 0; if (EarlyMorningStartEndRegex.IsMatch(trimmedText)) { todSymbol = Constants.EarlyMorning; } else if (AfternoonStartEndRegex.IsMatch(trimmedText)) { todSymbol = Constants.Afternoon; } else if (EveningStartEndRegex.IsMatch(trimmedText)) { todSymbol = Constants.Evening; } else if (NightStartEndRegex.IsMatch(trimmedText)) { todSymbol = Constants.Night; } else if (MorningStartEndRegex.IsMatch(trimmedText)) { todSymbol = Constants.Morning; } else { todSymbol = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(todSymbol); todSymbol = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }
public bool GetMatchedTimeRangeAndSwift(string text, out string todSymbol, out int beginHour, out int endHour, out int endMinute, out int swift) { var trimmedText = text.Trim(); // @TODO move hardcoded values to resources file beginHour = 0; endHour = 0; endMinute = 0; swift = 0; var tod = string.Empty; switch (trimmedText) { case "今晚": swift = 0; tod = Constants.Evening; break; case "今早": case "今晨": swift = 0; tod = Constants.Morning; break; case "明晚": swift = 1; tod = Constants.Evening; break; case "明早": case "明晨": swift = 1; tod = Constants.Morning; break; case "昨晚": swift = -1; tod = Constants.Evening; break; } if (MORegex.IsMatch(trimmedText)) { tod = Constants.Morning; } else if (MIRegex.IsMatch(trimmedText)) { tod = Constants.MidDay; } else if (AFRegex.IsMatch(trimmedText)) { tod = Constants.Afternoon; } else if (EVRegex.IsMatch(trimmedText)) { tod = Constants.Evening; } else if (NIRegex.IsMatch(trimmedText)) { tod = Constants.Night; } else if (string.IsNullOrEmpty(tod)) { todSymbol = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(tod); todSymbol = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMinute = parseResult.EndMin; return(true); }
private DateTimeResolutionResult ParseMergedDuration(string text, DateObject referenceTime) { var ret = new DateTimeResolutionResult(); var durationExtractor = DurationExtractor; // DurationExtractor without parameter will not extract merged duration var ers = durationExtractor.Extract(text, referenceTime); // only handle merged duration cases like "1 month 21 days" if (ers.Count <= 1) { ret.Success = false; return(ret); } var start = ers[0].Start ?? 0; if (start != 0) { var beforeStr = text.Substring(0, start - 1); if (!string.IsNullOrWhiteSpace(beforeStr)) { return(ret); } } var end = ers[ers.Count - 1].Start + ers[ers.Count - 1].Length ?? 0; if (end != text.Length) { var afterStr = text.Substring(end); if (!string.IsNullOrWhiteSpace(afterStr)) { return(ret); } } var prs = new List <DateTimeParseResult>(); var timexDict = new Dictionary <string, string>(); // insert timex into a dictionary foreach (var er in ers) { var unitRegex = DurationUnitRegex; var unitMatch = unitRegex.Match(er.Text); if (unitMatch.Success) { var pr = (DateTimeParseResult)Parse(er); if (pr.Value != null) { timexDict.Add(UnitMap[unitMatch.Groups["unit"].Value], pr.TimexStr); prs.Add(pr); } } } // sort the timex using the granularity of the duration, "P1M23D" for "1 month 23 days" and "23 days 1 month" if (prs.Count == ers.Count) { ret.Timex = TimexUtility.GenerateCompoundDurationTimex(timexDict, UnitValueMap); double value = 0; foreach (var pr in prs) { value += double.Parse(((DateTimeResolutionResult)pr.Value).FutureValue.ToString(), CultureInfo.InvariantCulture); } ret.FutureValue = ret.PastValue = value; } ret.Success = true; return(ret); }
public bool GetMatchedTimexRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = string.Empty; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.MidDayTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.MidDay; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.Equals(o, StringComparison.Ordinal))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Night; } else if (DateTimeDefinitions.BusinessHourTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.BusinessHour; } else { timex = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; // Modify time period if "early"/"late" is present if (DateTimeDefinitions.EarlyHourTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { endHour = beginHour + Constants.HalfMidDayDurationHourCount; // Handling special case: night ends with 23:59. if (endMin == 59) { endMin = 0; } } if (DateTimeDefinitions.LateHourTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { beginHour = beginHour + Constants.HalfMidDayDurationHourCount; } return(true); }
public bool GetMatchedTimeRange(string text, out string timex, out int beginHour, out int endHour, out int endMin) { var trimmedText = text.Trim(); if (trimmedText.EndsWith("s", StringComparison.Ordinal)) { trimmedText = trimmedText.Substring(0, trimmedText.Length - 1); } beginHour = 0; endHour = 0; endMin = 0; var timeOfDay = string.Empty; if (DateTimeDefinitions.MorningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Morning; } else if (DateTimeDefinitions.AfternoonTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Afternoon; } else if (DateTimeDefinitions.EveningTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Evening; } else if (DateTimeDefinitions.DaytimeTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Daytime; } else if (DateTimeDefinitions.NighttimeTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Nighttime; } else if (DateTimeDefinitions.NightTermList.Any(o => trimmedText.EndsWith(o, StringComparison.Ordinal))) { timeOfDay = Constants.Night; } else if (DateTimeDefinitions.BusinessHourSplitStrings.All(o => trimmedText.Contains(o))) { timeOfDay = Constants.BusinessHour; } else if (DateTimeDefinitions.MealtimeBreakfastTermList.Any(o => trimmedText.Contains(o))) { timeOfDay = Constants.MealtimeBreakfast; } else if (DateTimeDefinitions.MealtimeBrunchTermList.Any(o => trimmedText.Contains(o))) { timeOfDay = Constants.MealtimeBrunch; } else if (DateTimeDefinitions.MealtimeLunchTermList.Any(o => trimmedText.Contains(o))) { timeOfDay = Constants.MealtimeLunch; } else if (DateTimeDefinitions.MealtimeDinnerTermList.Any(o => trimmedText.Contains(o))) { timeOfDay = Constants.MealtimeDinner; } else { timex = null; return(false); } var parseResult = TimexUtility.ResolveTimeOfDay(timeOfDay); timex = parseResult.Timex; beginHour = parseResult.BeginHour; endHour = parseResult.EndHour; endMin = parseResult.EndMin; return(true); }