Beispiel #1
0
    def resolve_duration(candidate: Timex, constraints: [Timex]):
        results = []

        for constraint in constraints:
            if Constants.TIMEX_TYPES_DATETIME in constraint.types:
                results.append(
                    TimexHelpers.timex_datetime_add(constraint, candidate))
            elif Constants.TIMEX_TYPES_TIME in constraint.types:
                results.append(
                    TimexHelpers.timex_time_add(constraint, candidate))

        return results
    def resolve_date_timerange(timex: Timex):
        if timex.part_of_day is not None:
            date = TimexValue.date_value(timex)
            time_range = TimexResolver.part_of_day_timerange(timex)

            entry = Entry()

            entry.timex = timex.timex_value()
            entry.type = 'datetimerange'
            entry.start = f'{date} {time_range[0]}'
            entry.end = f'{date} {time_range[1]}'
            entry.value = None

            return [entry]
        else:
            time_range = TimexHelpers.expand_datetime_range(timex)

            entry = Entry()

            entry.timex = timex.timex_value()
            entry.type = 'datetimerange'
            entry.start = f'{TimexValue.date_value(time_range.start)} {TimexValue.time_value(time_range.start)}'
            entry.end = f'{TimexValue.date_value(time_range.end)} {TimexValue.time_value(time_range.end)}'
            entry.value = None

            return [entry]
    def resolve_time_range(timex: Timex):
        if timex.part_of_day is not None:
            range = TimexResolver.part_of_day_timerange(timex)

            entry = Entry()

            entry.timex = timex.timex_value()
            entry.type = 'timerange'
            entry.start = range[0]
            entry.end = range[1]
            entry.value = None

            return [entry]

        else:
            range = TimexHelpers.expand_time_range(timex)
            entry = Entry()

            entry.timex = timex.timex_value()
            entry.type = 'timerange'
            entry.start = TimexValue.time_value(range.start)
            entry.end = TimexValue.time_value(range.end)
            entry.value = None

            return [entry]
Beispiel #4
0
    def resolve_by_timerange_constraints(candidates, timex_constraints):
        timerange_contraints = list(
            map(
                lambda ti: TimexHelpers.timerange_from_timex(ti),
                filter(lambda t: Constants.TIMEX_TYPES_TIMERANGE in t.types,
                       timex_constraints)))
        collapsed_time_ranges = TimexConstraintsHelper.collapse(
            TimexConstraintsHelper(), timerange_contraints)

        if not any(collapsed_time_ranges):
            return candidates

        resolution = []

        for timex in candidates:
            t = Timex(timex)

            if Constants.TIMEX_TYPES_TIMERANGE in t.types:
                r = TimexRangeResolver.resolve_timerage(
                    t, collapsed_time_ranges)
                resolution.extend(r)
            elif Constants.TIMEX_TYPES_TIME in t.types:
                r = TimexRangeResolver.resolve_time(t, collapsed_time_ranges)
                resolution.extend(r)

        return TimexRangeResolver.remove_duplicates(resolution)
    def resolve_definite_daterange(timex: Timex):
        date_range = TimexHelpers.expand_datetime_range(timex)

        entry = Entry()
        entry.timex = timex.timex_value()
        entry.type = 'daterange'
        entry.start = TimexValue.date_value(date_range.start)
        entry.end = TimexValue.date_value(date_range.end)

        return [entry]
Beispiel #6
0
    def resolve_by_date_range_constraints(candidates: [str],
                                          timex_constraints: [Timex]):
        date_range_constraints = list(
            map(
                lambda t: TimexHelpers.daterange_from_timex(t),
                filter(lambda t: Constants.TIMEX_TYPES_DATERANGE in t.types,
                       timex_constraints)))

        collapsed_date_ranges = TimexConstraintsHelper.collapse(
            TimexConstraintsHelper(), date_range_constraints)

        if not any(collapsed_date_ranges):
            return candidates

        resolution = []

        for timex in candidates:
            resolve_date = TimexRangeResolver.resolve_date(
                Timex(timex), collapsed_date_ranges)
            resolution.extend(resolve_date)

        return TimexRangeResolver.remove_duplicates(resolution)
Beispiel #7
0
    def resolve_by_time_constraints(candidates, timex_constraints):
        times = list((map(
            lambda ti: TimexHelpers.time_from_timex(ti),
            filter(lambda t: Constants.TIMEX_TYPES_TIME in t.types,
                   timex_constraints))))
        if not any(times):
            return candidates

        resolutions = []

        for timex in list(map(lambda t: Timex(t), candidates)):
            if Constants.TIMEX_TYPES_DATE in timex.types and not (
                    Constants.TIMEX_TYPES_TIME in timex.types):
                for time in times:
                    timex.hour = time.hour
                    timex.minute = time.minute
                    timex.second = time.second
                    resolutions.append(timex.timex_value())
            else:
                resolutions.append(timex.timex_value())

        return TimexRangeResolver.remove_duplicates(resolutions)
Beispiel #8
0
    def resolve_timerage(timex: Timex, constraints: [TimeRange]):
        candidate = TimexHelpers.timerange_from_timex(timex)
        result = []

        for contraint in constraints:
            if candidate.is_overlapping(contraint):
                start = max(candidate.start.get_time(),
                            contraint.start.get_time())
                time = Time.from_seconds(start)

                resolved = copy.copy(timex)

                resolved.part_of_day = None
                resolved.seconds = None
                resolved.minutes = None
                resolved.hours = None
                resolved.second = time.second
                resolved.minute = time.minute
                resolved.hour = time.hour

                result.append(resolved.timex_value())

        return result
def test_datatypes_helpers_expanddatetimerange_short():
    timex = Timex(timex='(2017-09-27,2017-09-29,P2D)')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == '2017-09-27'
    assert range.end.timex_value() == '2017-09-29'
def test_datatypes_helpers_daterangefromtimex():
    timex = Timex(timex='(2017-09-27,2017-09-29,P2D)')
    range = TimexHelpers.daterange_from_timex(timex)

    assert range.start == datetime(2017, 9, 27).date()
    assert range.end == datetime(2017, 9, 29).date()
def test_datatypes_helpers_expandtimerange():
    timex = Timex(timex='(T14,T16,PT2H)')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == 'T14'
    assert range.end.timex_value() == 'T16'
def test_datatypes_helpers_expanddatetimerange_year():
    timex = Timex(timex='1999')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == '1999-01-01'
    assert range.end.timex_value() == '2000-01-01'
def test_datatypes_helpers_expanddatetimerange_month():
    timex = Timex(timex='2017-05')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == '2017-05-01'
    assert range.end.timex_value() == '2017-06-01'
def test_datatypes_gelpers_expanddatetimerange_include_time():
    timex = Timex(timex='(2017-10-10T16:02:04,2017-10-10T16:07:04,PT5M)')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == '2017-10-10T16:02:04'
    assert range.end.timex_value() == '2017-10-10T16:07:04'
Beispiel #15
0
 def resolve_definite_against_constraint(timex, constraint):
     timex_date = TimexHelpers.date_from_timex(timex)
     if constraint.start <= timex_date < constraint.end:
         return [timex.timex_value()]
     return ['']
def test__datatypes_helpers_datefromtimex():
    timex = Timex(timex='2017-09-27')
    date = TimexHelpers.date_from_timex(timex)

    assert date == datetime(2017, 9, 27).date()
def test_datatypes_helpers_timefromtimex():
    timex = Timex(timex='T00:05:00')
    time = TimexHelpers.time_from_timex(timex)

    assert time.get_time() == Time(0, 5, 0).get_time()
def test_datatypes_helpers_expanddatetimerange_long():
    timex = Timex(timex='(2006-01-01,2008-06-01,P882D)')
    range = TimexHelpers.expand_datetime_range(timex)

    assert range.start.timex_value() == '2006-01-01'
    assert range.end.timex_value() == '2008-06-01'