diff --git a/dateparser/languages/locale.py b/dateparser/languages/locale.py index b109c5a9f..b47148ea0 100644 --- a/dateparser/languages/locale.py +++ b/dateparser/languages/locale.py @@ -3,6 +3,7 @@ from collections.abc import Iterable, Iterator, Mapping, Sequence from functools import cached_property from itertools import chain, islice, product +from string import punctuation from typing import TYPE_CHECKING, Any, TypeVar import regex as re @@ -1056,15 +1057,12 @@ def get_wordchars_for_detection(self, settings: "Settings | None") -> set[str]: "7", "8", "9", - ":", - "(", - ")", - "'", "q", "a", "m", "p", " ", + *punctuation, } return self._wordchars_for_detection diff --git a/dateparser/search/text_detection.py b/dateparser/search/text_detection.py index 98017db38..ac62dc8b1 100644 --- a/dateparser/search/text_detection.py +++ b/dateparser/search/text_detection.py @@ -78,7 +78,7 @@ def character_check(self, date_string: str, settings: Settings) -> None: ] self.languages = [ i for j, i in enumerate(self.languages) if j not in indices_to_pop - ] + ] or [self.languages[0]] @apply_settings def _best_language( diff --git a/tests/test_search.py b/tests/test_search.py index c00b1cc57..6e56d0964 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -1114,6 +1114,15 @@ def test_detection(self, shortname: str, text: str) -> None: ("21 марта", datetime.datetime(2001, 3, 21, 0, 0)), ], ), + param( + text="july 2018 - december 2020", + languages=["en", "fr"], + settings={"PREFER_DAY_OF_MONTH": "first"}, + expected=[ + ("july 2018", datetime.datetime(2018, 7, 1, 0, 0)), + ("december 2020", datetime.datetime(2020, 12, 1, 0, 0)), + ], + ), param( text="um 10 Uhr am 5. Mai 2021", languages=["de"], @@ -1128,10 +1137,19 @@ def test_detection(self, shortname: str, text: str) -> None: settings=None, expected=[("1990 am 3. März in", datetime.datetime(1990, 3, 3, 0, 0))], ), + param( + text="20/10/2020 06:00 am", + languages=["en"], + settings=None, + expected=[ + ("20/10/2020 06:00 am", datetime.datetime(2020, 10, 20, 6, 0)) + ], + ), # Dates not found param(text="", languages=None, settings=None, expected=None), # Language not detected param(text="Привет", languages=["en"], settings=None, expected=None), + param(text="Привет", languages=None, settings=None, expected=None), # ZeroDivisionError param( text="DECEMBER 21 19.87 87",