From 4194f3bb89e7abbf0910ec13b5001eac597cd806 Mon Sep 17 00:00:00 2001 From: Mr-Neutr0n Date: Wed, 12 Aug 2026 17:52:28 +0530 Subject: [PATCH 1/2] fix(normalize): validate symbol currencies Signed-off-by: Mr-Neutr0n --- semantica/normalize/number_normalizer.py | 5 +++++ tests/normalize/test_number_normalizer.py | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/semantica/normalize/number_normalizer.py b/semantica/normalize/number_normalizer.py index f7876b7c..808e527d 100644 --- a/semantica/normalize/number_normalizer.py +++ b/semantica/normalize/number_normalizer.py @@ -562,6 +562,11 @@ def __init__(self, **config): "SEK", "NOK", "DKK", + "RUB", + "KRW", + "ILS", + "NGN", + "PKR", ] self.logger.debug("Currency normalizer initialized") diff --git a/tests/normalize/test_number_normalizer.py b/tests/normalize/test_number_normalizer.py index 8af84eca..0cff4f05 100644 --- a/tests/normalize/test_number_normalizer.py +++ b/tests/normalize/test_number_normalizer.py @@ -49,6 +49,12 @@ def test_parse_currency(self): self.assertEqual(result["amount"], 100.0) self.assertEqual(result["currency"], "EUR") + def test_symbol_currencies_are_validated_as_supported_codes(self): + for symbol, expected_code in self.normalizer.currency_symbols.items(): + result = self.normalizer.normalize_currency(f"{symbol}100") + self.assertEqual(result["currency"], expected_code) + self.assertTrue(self.normalizer.validate_currency_code(result["currency"])) + class TestScientificNotationHandler(unittest.TestCase): def setUp(self): self.handler = ScientificNotationHandler() From 9d766d7a06f6693e51f28aa050b3c4a4759f8852 Mon Sep 17 00:00:00 2001 From: Mr-Neutr0n Date: Wed, 12 Aug 2026 18:31:53 +0530 Subject: [PATCH 2/2] fix(normalize): match currency codes by token boundaries Signed-off-by: Mr-Neutr0n --- semantica/normalize/number_normalizer.py | 12 +++++++----- tests/normalize/test_number_normalizer.py | 12 ++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/semantica/normalize/number_normalizer.py b/semantica/normalize/number_normalizer.py index 808e527d..29911cb9 100644 --- a/semantica/normalize/number_normalizer.py +++ b/semantica/normalize/number_normalizer.py @@ -611,13 +611,15 @@ def normalize_currency( # Check for currency code if not currency_code: for code in self.currency_codes: - if code in currency_input.upper(): + match = re.search( + rf"(?