diff --git a/pythainlp/util/numtoword.py b/pythainlp/util/numtoword.py index 95d098c3e..1982b09e7 100644 --- a/pythainlp/util/numtoword.py +++ b/pythainlp/util/numtoword.py @@ -121,6 +121,10 @@ def num_to_thaiword(number: Optional[int]) -> str: for search, replac in _EXCEPTIONS.items(): output = output.replace(search, replac) + # เอ็ด rule: trailing หนึ่ง in ones place (after any place marker) + if number != 1 and number != -1 and output.endswith("หนึ่ง"): + output = output[: -len("หนึ่ง")] + "เอ็ด" + if number_temp < 0: output = "ลบ" + output diff --git a/tests/core/test_util.py b/tests/core/test_util.py index bbba08521..6aaa4c98a 100644 --- a/tests/core/test_util.py +++ b/tests/core/test_util.py @@ -141,6 +141,12 @@ def test_number(self): self.assertEqual(num_to_thaiword(0), "ศูนย์") self.assertEqual(num_to_thaiword(112), "หนึ่งร้อยสิบสอง") self.assertEqual(num_to_thaiword(-273), "ลบสองร้อยเจ็ดสิบสาม") + # เอ็ด rule: ones=1 must use เอ็ด when number > 1 + self.assertEqual(num_to_thaiword(1), "หนึ่ง") + self.assertEqual(num_to_thaiword(-1), "ลบหนึ่ง") + self.assertEqual(num_to_thaiword(101), "หนึ่งร้อยเอ็ด") + self.assertEqual(num_to_thaiword(1001), "หนึ่งพันเอ็ด") + self.assertEqual(num_to_thaiword(1000001), "หนึ่งล้านเอ็ด") self.assertEqual(thaiword_to_num("ศูนย์"), 0) self.assertEqual(thaiword_to_num("แปด"), 8)