Source code for maha.parsers.rules.time.rule

__all__ = [
    "RULE_TIME_YEARS",
    "RULE_TIME_MONTHS",
    "RULE_TIME_WEEKS",
    "RULE_TIME_DAYS",
    "RULE_TIME_HOURS",
    "RULE_TIME_MINUTES",
    "RULE_TIME_AM_PM",
    "RULE_TIME_NOW",
    "RULE_TIME",
    "parse_time",
]

from ..common import combine_patterns
from .values import *


def get_combined_value(groups, expression: ExpressionGroup):
    value = TimeValue()
    for group in groups:
        exp = expression.get_matched_expression(group)
        value += next(iter(exp(group))).value  # type: ignore
    return value


[docs]def parse_time(match): groups = match.capturesdict() _year = groups.get("years") _months = groups.get("months") _weeks = groups.get("weeks") _days = groups.get("days") _hours = groups.get("hours") _minutes = groups.get("minutes") _am_pm = groups.get("am_pm") _now = groups.get("now") _month_day = groups.get("month_day") _year_month = groups.get("year_month") _year_month_day = groups.get("year_month_day") _hour_minute = groups.get("hour_minute") _hour_minute_second = groups.get("h_m_s") _hour_am_pm = groups.get("hour_am_pm") value = TimeValue() if _month_day: value += get_combined_value(_month_day, month_day_expressions) if _year_month: value += get_combined_value(_year_month, year_month_expressions) if _year_month_day: value += get_combined_value(_year_month_day, year_month_day_expressions) if _hour_minute: value += get_combined_value(_hour_minute, hour_minute_expressions) if _hour_am_pm: value += get_combined_value(_hour_am_pm, hour_am_pm_expressions) if _hour_minute_second: value += get_combined_value(_hour_minute_second, hour_minute_second_expressions) if _year: value += get_combined_value(_year, years_expressions) if _weeks: value += get_combined_value(_weeks, weeks_expressions) if _days: value += get_combined_value(_days, days_expressions) if _months: value += get_combined_value(_months, months_expressions) if _hours: value += get_combined_value(_hours, hours_expressions) if _minutes: value += get_combined_value(_minutes, minutes_expressions) if _am_pm: value += get_combined_value(_am_pm, am_pm_expressions) if _now: value += get_combined_value(_now, now_expressions) return value
years_expressions = ExpressionGroup( AFTER_N_YEARS, BEFORE_N_YEARS, LAST_TWO_YEARS, NEXT_TWO_YEARS, LAST_YEAR, NEXT_YEAR, NUMERAL_YEAR, ORDINAL_YEAR, THIS_YEAR, ) months_expressions = ExpressionGroup( AFTER_N_MONTHS, BEFORE_N_MONTHS, AFTER_SPECIFIC_NEXT_MONTH, LAST_TWO_MONTHS, NEXT_TWO_MONTHS, LAST_MONTH, NEXT_MONTH, NEXT_SPECIFIC_MONTH, PREVIOUS_SPECIFIC_MONTH, BEFORE_SPECIFIC_PREVIOUS_MONTH, THIS_MONTH, SPECIFIC_MONTH, ) weeks_expressions = ExpressionGroup( AFTER_N_WEEKS, BEFORE_N_WEEKS, LAST_TWO_WEEKS, NEXT_TWO_WEEKS, LAST_WEEK, NEXT_WEEK, THIS_WEEK, ) days_expressions = ExpressionGroup( AFTER_N_DAYS, BEFORE_N_DAYS, AFTER_NEXT_WEEKDAY, PREVIOUS_WEEKDAY, NEXT_WEEKDAY, AFTER_TOMORROW, TOMORROW, LAST_SPECIFIC_DAY, BEFORE_PREVIOUS_WEEKDAY, BEFORE_YESTERDAY, YESTERDAY, LAST_DAY, THIS_DAY, WEEKDAY, ) hours_expressions = ExpressionGroup( AFTER_N_HOURS, BEFORE_N_HOURS, LAST_TWO_HOURS, NEXT_TWO_HOURS, LAST_HOUR, NEXT_HOUR, NUMERAL_HOUR, ORDINAL_HOUR, THIS_HOUR, ) minutes_expressions = ExpressionGroup( AFTER_N_MINUTES, BEFORE_N_MINUTES, LAST_TWO_MINUTES, NEXT_TWO_MINUTES, LAST_MINUTE, NEXT_MINUTE, NUMERAL_MINUTE, ORDINAL_MINUTE, THIS_MINUTE, ) am_pm_expressions = ExpressionGroup(PM, AM) now_expressions = ExpressionGroup(AT_THE_MOMENT) month_day_expressions = ExpressionGroup( DAY_MONTH_FORM, ORDINAL_SPECIFIC_DAY, LAST_SPECIFIC_DAY_OF_SPECIFIC_MONTH, ORDINAL_AND_SPECIFIC_MONTH, ORDINAL_AND_THIS_MONTH, NUMERAL_AND_SPECIFIC_MONTH, NUMERAL_AND_THIS_MONTH, ) year_month_day_expressions = ExpressionGroup( DAY_MONTH_YEAR_FORM, ) year_month_expressions = ExpressionGroup(MONTH_YEAR_FORM, YEAR_WITH_MONTH) hour_minute_expressions = ExpressionGroup( NUMERAL_FRACTION_HOUR_MINUTE, ORDINAL_FRACTION_HOUR_MINUTE, HOUR_MINUTE_FORM ) hour_minute_second_expressions = ExpressionGroup(HOUR_MINUTE_SECOND_FORM) hour_am_pm_expressions = ExpressionGroup( NUMERAL_FRACTION_HOUR_AM, ORDINAL_FRACTION_HOUR_AM, NUMERAL_FRACTION_HOUR_PM, ORDINAL_FRACTION_HOUR_PM, NUMERAL_HOUR_AM, NUMERAL_HOUR_PM, ORDINAL_HOUR_AM, ORDINAL_HOUR_PM, ) now_group = named_group("now", now_expressions.join()) years_group = named_group("years", years_expressions.join()) months_group = named_group("months", months_expressions.join()) weeks_group = named_group("weeks", weeks_expressions.join()) days_group = named_group("days", days_expressions.join()) hours_group = named_group("hours", hours_expressions.join()) minutes_group = named_group("minutes", minutes_expressions.join()) am_pm_group = named_group("am_pm", am_pm_expressions.join()) month_day_group = named_group("month_day", month_day_expressions.join()) year_month_group = named_group("year_month", year_month_expressions.join()) year_month_day_group = named_group("year_month_day", year_month_day_expressions.join()) hour_minute_group = named_group("hour_minute", hour_minute_expressions.join()) hour_minute_second_group = named_group("h_m_s", hour_minute_second_expressions.join()) hour_am_pm_group = named_group("hour_am_pm", hour_am_pm_expressions.join())
[docs]RULE_TIME_YEARS = FunctionValue(parse_time, combine_patterns(years_group))
[docs]RULE_TIME_MONTHS = FunctionValue(parse_time, combine_patterns(months_group))
[docs]RULE_TIME_WEEKS = FunctionValue(parse_time, combine_patterns(weeks_group))
[docs]RULE_TIME_DAYS = FunctionValue(parse_time, combine_patterns(days_group))
[docs]RULE_TIME_HOURS = FunctionValue(parse_time, combine_patterns(hours_group))
[docs]RULE_TIME_MINUTES = FunctionValue(parse_time, combine_patterns(minutes_group))
[docs]RULE_TIME_AM_PM = FunctionValue(parse_time, combine_patterns(am_pm_group))
[docs]RULE_TIME_NOW = FunctionValue(parse_time, combine_patterns(now_group))
[docs]RULE_TIME = FunctionValue( parse_time, combine_patterns( year_month_day_group, year_month_group, month_day_group, hour_minute_second_group, hour_minute_group, hour_am_pm_group, now_group, years_group, months_group, weeks_group, days_group, hours_group, minutes_group, am_pm_group, seperator=TIME_WORD_SEPARATOR, combine_all=True,
), )