comtravo / ctparse

Parse natural language time expressions in python
https://www.comtravo.com
MIT License
131 stars 24 forks source link

parsing time intervals incorrectly #105

Open inferense opened 3 years ago

inferense commented 3 years ago

Description

Time intervals where first int is larger than the 2nd int like in "tomorrow 9-5" are parsed always incorrectly. In such case this should result in a resolution of 9am-5pm (as there's no other feasible case for that parse). Instead, this parses the 2nd int as the next day end_time. Assuming this is due to the 24 hour system the parser uses.

r = ctparse("tomorrow 9-5")
r
Out[8]: CTParse(2021-02-23 09:00 (X/X) - 2021-02-24 05:00 (X/X), (114, 128, 136, 128, 'ruleHHMM', 'ruleHHMM', 'ruleTODTOD', 'ruleTomorrow', 'ruleDateInterval'), 4.300637883728172)
inferense commented 3 years ago

I have fixed this, happy to make a pr if you're interested.

r = ctparse('tomorrow 9-5')
Out[27]: CTParse(2021-02-24 09:00 (X/X) - 2021-02-24 17:00 (X/X), (114, 128, 136, 128, 'ruleHHMM', 'ruleHHMM', 'ruleTODTOD', 'ruleTomorrow', 'ruleDateInterval'), 4.300637883728172)
sebastianmika commented 3 years ago

Thank a lot for the effort.

I mostly agree with you proposal, but I am not entirely sure it is that straight forward. That is maybe driven by the application we have designed ctparse to work for - travel booking requests. If someone sends e.g. (and probably only then) flight times like 24.02.2021 22:15 - 01:05 that actually crosses the date border.

Maybe share your fix and then let's see what would happen to expression like that.