From 33e913cbfa57bf1b0c86753ab527ccc2b6d0b9b2 Mon Sep 17 00:00:00 2001 From: Claudio Klingler Date: Tue, 23 Jun 2026 10:11:16 +0200 Subject: [PATCH] italian: support 'un ora fa', 'un'ora fa', 'oggi alle 11:00'. (#1049) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improve Czech (cs) language data (#1172) - Add month locative/dative forms (lednu, únoru, březnu, dubnu, květnu, červnu, červenci, srpnu, říjnu, prosinci) for dates like "v lednu 2023" - Add July abbreviation "črv" - Fix "za měsíc/týden/rok" not parsing: add accusative simplification patterns (previous patterns only matched instrumental -em forms) - Add tests covering the new expressions Co-Authored-By: Claude Sonnet 4.6 (1M context) * italian: support 'un ora fa', 'un'ora fa', 'oggi alle 11:00'. Finishes PR #1049 and resolves conflicts with master: - Keep master's improved "(\d+[.,]?\d*)\s+ora" simplification and add a new one mapping "un ora"/"un'ora" to "1 ore". - Anchor the new simplification with word boundaries (\bun[' ]ora\b) so it no longer corrupts words such as "un orario" / "ciascun orario". - Add "alle" to the skip tokens so "oggi alle 11:00" parses as "oggi 11:00". - Regenerate it.py from it.yaml. - Drop an accidental duplicate test line from the original PR and add a regression test that locks in the word-boundary fix. Co-Authored-By: Serhii A Co-Authored-By: Claude Opus 4.8 (1M context) --------- Co-authored-by: Serhii A Co-authored-by: Claude Sonnet 4.6 (1M context) Co-authored-by: Serhii A --- dateparser/data/date_translation_data/it.py | 4 ++++ .../date_translation_data/it.yaml | 3 ++- tests/test_languages.py | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dateparser/data/date_translation_data/it.py b/dateparser/data/date_translation_data/it.py index 9dcdd4f6a..ef56aaeeb 100644 --- a/dateparser/data/date_translation_data/it.py +++ b/dateparser/data/date_translation_data/it.py @@ -254,6 +254,7 @@ "skip": [ "circa", "e", + "alle", " ", "'", ",", @@ -277,6 +278,9 @@ "simplifications": [ { "(\\d++[.,]?\\d*+)\\s+ora": "\\1 ore" + }, + { + "\\bun[' ]ora\\b": "1 ore" } ] } diff --git a/dateparser_data/supplementary_language_data/date_translation_data/it.yaml b/dateparser_data/supplementary_language_data/date_translation_data/it.yaml index 100f41217..f05e8fbdb 100644 --- a/dateparser_data/supplementary_language_data/date_translation_data/it.yaml +++ b/dateparser_data/supplementary_language_data/date_translation_data/it.yaml @@ -1,4 +1,4 @@ -skip: ["circa", "e"] +skip: ["circa", "e", "alle"] sentence_splitter_group : 1 @@ -28,3 +28,4 @@ relative-type: simplifications: - (\d+[.,]?\d*)\s+ora: \1 ore + - \bun[' ]ora\b: 1 ore diff --git a/tests/test_languages.py b/tests/test_languages.py index 7d8b35942..88fcb1f4b 100644 --- a/tests/test_languages.py +++ b/tests/test_languages.py @@ -1141,6 +1141,12 @@ def test_translation(self, shortname, datetime_string, expected_translation): param("it", "oggi", "0 day ago"), param("it", "2 settimana fa", "2 week ago"), param("it", "2 anno fa", "2 year ago"), + param("it", "un ora fa", "1 hour ago"), + param("it", "un'ora fa", "1 hour ago"), + param("it", "oggi alle 11:00", "0 day ago 11:00"), + param("it", "oggi 11:00", "0 day ago 11:00"), + # "un'ora" simplification must not corrupt words like "orario" + param("it", "un orario", "un orario"), # Portuguese param("pt", "anteontem", "2 day ago"), param("pt", "ontem", "1 day ago"),