From e88753046274cdef54ab86012313ba20a217036f Mon Sep 17 00:00:00 2001 From: VENUGOPAL ACHHE Date: Tue, 21 May 2019 18:15:38 +0200 Subject: [PATCH] Telugu Language num2words file --- num2words/__init__.py | 5 ++-- num2words/lang_TE.py | 56 +++++++++++++++++++++++++++++++++++++++++++ tests/test_te.py | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 num2words/lang_TE.py create mode 100644 tests/test_te.py diff --git a/num2words/__init__.py b/num2words/__init__.py index b1a266b..002b7bf 100644 --- a/num2words/__init__.py +++ b/num2words/__init__.py @@ -22,7 +22,7 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN, lang_FR_CH, lang_FR_DZ, lang_HE, lang_ID, lang_IT, lang_JA, lang_KN, lang_KO, lang_LT, lang_LV, lang_NL, lang_NO, lang_PL, lang_PT, lang_PT_BR, lang_RO, lang_RU, lang_SL, lang_SR, - lang_TH, lang_TR, lang_UK, lang_VI) + lang_TH, lang_TR, lang_UK, lang_VI, lang_TE) CONVERTER_CLASSES = { 'ar': lang_AR.Num2Word_AR(), @@ -59,7 +59,8 @@ CONVERTER_CLASSES = { 'th': lang_TH.Num2Word_TH(), 'tr': lang_TR.Num2Word_TR(), 'nl': lang_NL.Num2Word_NL(), - 'uk': lang_UK.Num2Word_UK() + 'uk': lang_UK.Num2Word_UK(), + 'te': lang_TE.Num2Word_TE() } diff --git a/num2words/lang_TE.py b/num2words/lang_TE.py new file mode 100644 index 0000000..1bdbe48 --- /dev/null +++ b/num2words/lang_TE.py @@ -0,0 +1,56 @@ +from __future__ import unicode_literals + +from .base import Num2Word_Base + + +class Num2Word_TE(Num2Word_Base): + def set_high_numwords(self, high): + for n, word in self.high_numwords: + self.cards[10 ** n] = word + + def setup(self): + self.low_numwords = [ + + "తొంభై తొమ్మిది", "తొంభై ఎనిమిది", "తొంభై ఏడు", "తొంభై ఆరు", "తొంభై అయిదు", "తొంభై నాలుగు ", "తొంభై మూడు", "తొంభై రెండు", "తొంభై ఒకటి", "తొంభై ", "ఎనభై తొమ్మిది", "ఎనభై ఎనిమిది", "ఎనభై ఏడు", "ఎనభై ఆరు", "ఎనభై అయిదు", + "ఎనభై నాలుగు", "ఎనభై మూడు", "ఎనభై రెండు" , "ఎనభై ఒకటి", "ఎనభై" ,"డెబ్బై తొమ్మిది" , "డెబ్బై ఎనిమిది" , "డెబ్బై ఏడు" , "డెబ్బై ఆరు" , "డెబ్బై అయిదు" , "డెబ్బై నాలుగు" ,"డెబ్బై మూడు", "డెబ్బై రెండు", "డెబ్బై ఒకటి" ,"డెబ్బై" , + "అరవై తొమ్మిది ", "అరవై ఎనిమిది" , "అరవై ఏడు " , "అరవై ఆరు ","అరవై అయిదు ", "అరవై నాలుగు ", "అరవై మూడు ", "అరవై రెండు ", "అరవై ఒకటి" , "అరవై " , "యాభై తొమ్మిది", "యాభై ఎనిమిది" , "యాభై ఏడు", "యాభై ఆరు", + "యాభై అయిదు", "యాభై నాలుగు", "యాభై మూడు" , "యాభై రెండు", "యాభై ఒకటి", "యాభై " , "నలభై తొమ్మిది" ,"నలభై ఎనిమిది", "నలభై ఏడు", "నలభై ఆరు", "నలభై అయిదు" , "నలభై నాలుగు", "నలభై మూడు", "నలభై రెండు" , + "నలభై ఒకటి" , "నలభై" , "ముప్పై తొమ్మిది", "ముప్పై ఎనిమిది", "ముప్పై ఏడు", "ముప్పై ఆరు", "ముప్పై ఐదు", "ముప్పై నాలుగు", "ముప్పై మూడు", "ముప్పై రెండు", "ముప్పై ఒకటి", "ముప్పై", "ఇరవై తొమ్మిది", "ఇరవై ఎనిమిది", "ఇరవై ఏడు", + "ఇరవై ఆరు", "ఇరవై అయిదు", "ఇరవై నాలుగు", "ఇరవై మూడు", "ఇరవై రెండు", "ఇరవై ఒకటి", "ఇరవై", "పందొమ్మిది", "పధ్ధెనిమిది", "పదిహేడు", "పదహారు", "పదునయిదు", "పధ్నాలుగు", "పదమూడు", "పన్నెండు", "పదకొండు", "పది", "తొమ్మిది", + "ఎనిమిది", "ఏడు", "ఆరు", "అయిదు","నాలుగు", "మూడు", "రెండు", "ఒకటి", "సున్న" + ] + + self.mid_numwords = [(100, "వందల")] + + self.high_numwords = [(7, "కోటి" ), (5, "లక్షల"), (3, "వేల" )] + + self.pointword = "బిందువు " + + self.modifiers = [ + " ్ ","ా", " ి ", " ీ "," ు "," ూ " ," ృ "," ౄ " ," ె " ," ే " ," ై " ," ొ" ," ో " ," ౌ " ," ఁ " ," ం " ," ః " + ] + + def merge(self, lpair, rpair): + ltext, lnum = lpair + rtext, rnum = rpair + if lnum == 1 and rnum < 100: + return (rtext, rnum) + elif 100 > lnum > rnum: + return ("%s-%s" % (ltext, rtext), lnum + rnum) + elif lnum >= 100 > rnum: + return ("%s %s" % (ltext, rtext), lnum + rnum) + elif rnum > lnum: + return ("%s %s" % (ltext, rtext), lnum * rnum) + return ("%s %s" % (ltext, rtext), lnum + rnum) + + def to_ordinal_num(self, value): + self.verify_ordinal(value) + return "%s%s" % (value, self.to_ordinal(value)) + + def to_ordinal(self, value): + self.verify_ordinal(value) + outwords = self.to_cardinal(value) + if outwords[-1] in self.modifiers: + outwords = outwords[:-1] + ordinal_num = outwords + "వ " + return ordinal_num diff --git a/tests/test_te.py b/tests/test_te.py new file mode 100644 index 0000000..d74c827 --- /dev/null +++ b/tests/test_te.py @@ -0,0 +1,48 @@ +from unittest import TestCase + +from num2words import num2words + + +class Num2WordsTETest(TestCase): + def test_numbers(self): + self.assertEqual(num2words(42, lang="te"), u"నలభై రెండు ") + self.assertEqual(num2words(893, lang="te"), u"ఎనిమిది వందల తొంబై మూడు") + self.assertEqual( + num2words(1729, lang="te"), u"ఒక వేయి ఏడు వందల ఇరవై తొమ్మిది ") + self.assertEqual(num2words(123, lang="te"), u"ఒక వంద ఇరవై మూడు") + self.assertEqual(num2words(32211, lang="te"), + u"ముప్పై రెండు వేల రెండు వందల పదకొండు") + + def test_cardinal_for_float_number(self): + self.assertEqual(num2words(3.14, lang="te"), u"మూడు బిందువు ఒకటి నాలుగు ") + self.assertEqual(num2words(1.61803, lang="te"), + u"ఒకటి బిందువు ఆరు ఒకటి ఎనిమిది సున్నా మూడు ") + + def test_ordinal(self): + self.assertEqual( + num2words(1, lang='te', to='ordinal'), + u'ఒకటవ ' + ) + self.assertEqual( + num2words(22, lang='te', to='ordinal'), + u'ఇరవై రెండవ ' + ) + self.assertEqual( + num2words(12, lang='te', to='ordinal'), + u'పన్నెండవ' + ) + self.assertEqual( + num2words(130, lang='te', to='ordinal'), + u'ఒక వంద ముప్పయ్యవ ' + ) + self.assertEqual( + num2words(1003, lang='te', to='ordinal'), + u'ఒక వెయ్యి మూడవ' + ) + + def test_ordinal_num(self): + self.assertEqual(num2words(2, lang="te", ordinal=True), u"రెండవ") + self.assertEqual(num2words(5, lang="te", ordinal=True), u"అయిదవ ") + self.assertEqual(num2words(16, lang="te", ordinal=True), u"పదహారవ ") + self.assertEqual(num2words(113, lang="te", ordinal=True), + u"ఒక వంద పదమూడవ")