Merge pull request #263 from venu1807/master

Adding Language Support for Telugu / Bug Fix in Kannada
This commit is contained in:
Pierre Duchemin
2019-12-31 15:31:02 -05:00
committed by GitHub
5 changed files with 253 additions and 7 deletions

View File

@@ -22,7 +22,7 @@ from . import (lang_AR, lang_CZ, lang_DE, lang_DK, lang_EN, lang_EN_IN,
lang_FR_BE, 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_SR, lang_TE, lang_TH, lang_TR, lang_UK, lang_VI)
CONVERTER_CLASSES = {
'ar': lang_AR.Num2Word_AR(),
@@ -60,7 +60,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()
}

View File

@@ -17,10 +17,10 @@
from __future__ import unicode_literals
from .base import Num2Word_Base
from .lang_EU import Num2Word_EU
class Num2Word_KN(Num2Word_Base):
class Num2Word_KN(Num2Word_EU):
def set_high_numwords(self, high):
for n, word in self.high_numwords:
self.cards[10**n] = word

169
num2words/lang_TE.py Normal file
View File

@@ -0,0 +1,169 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .lang_EU import Num2Word_EU
class Num2Word_TE(Num2Word_EU):
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:
if ltext[-1] in self.modifiers:
return ("%s %s" % (ltext[:-1], rtext), lnum + rnum)
else:
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)[-1:])
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

View File

@@ -58,10 +58,16 @@ class Num2WordsKNTest(TestCase):
num2words(1003, lang='kn', to='ordinal'),
u'ಒಂದು ಸಾವಿರದ ಮೂರನೇ'
)
def test_ordinal_num(self):
self.assertEqual(num2words(2, lang="kn", ordinal=True), u"ಎರಡನೇ")
self.assertEqual(num2words(5, lang="kn", ordinal=True), u"ಐದನೇ")
self.assertEqual(num2words(16, lang="kn", ordinal=True), u"ಹದಿನಾರನೇ")
self.assertEqual(num2words(113, lang="kn", ordinal=True),
u"ಒಂದು ನೂರ ಹದಿಮೂರನೇ")
def test_ordinal_num(self):
self.assertEqual(num2words(2, lang="kn", to='ordinal_num'), u"2ಎರಡನೇ")
self.assertEqual(num2words(5, lang="kn", to='ordinal_num'), u"5ಐದನೇ")
self.assertEqual(num2words(16, lang="kn", to='ordinal_num'),
u"16ಹದಿನಾರನೇ")
self.assertEqual(num2words(113, lang="kn", to='ordinal_num'),
u"113ಒದು ನೂರ ಹದಿಮೂರನೇ")

70
tests/test_te.py Normal file
View File

@@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2003, Taro Ogawa. All Rights Reserved.
# Copyright (c) 2013, Savoir-faire Linux inc. All Rights Reserved.
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA
from unittest import TestCase
from num2words import num2words
class Num2WordsTETest(TestCase):
def test_numbers(self):
self.assertEqual(num2words(66, lang="te"), u"అరవై ఆరు")
self.assertEqual(num2words(1734, lang="te"),
u"ఒకటి వేయి ఏడు వందల ముప్పై నాలుగు")
self.assertEqual(num2words(134, lang="te"),
u"ఒకటి వందల ముప్పై నాలుగు")
self.assertEqual(num2words(54411, lang="te"),
u"యాభై నాలుగు వేయి నాలుగు వందల పదకొండు")
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(1.61803, lang="te"),
u"ఒకటి బిందువు ఆరు ఒకటి ఎనిమిది సున్న మూడు")
self.assertEqual(num2words(34.876, lang="te"),
u"ముప్పై నాలుగు బిందువు ఎనిమిది ఏడు ఆరు")
self.assertEqual(num2words(3.14, 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(23, 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"ఒకటి వేయిల మూడువ")
self.assertEqual(num2words(4, lang='te', to='ordinal'),
u"నాలుగువ")
def test_ordinal_num(self):
self.assertEqual(num2words(2, lang="te", to='ordinal_num'), u"2వ")
self.assertEqual(num2words(3, lang="te", to='ordinal_num'), u"3వ")
self.assertEqual(num2words(5, lang="te", to='ordinal_num'), u"5వ")
self.assertEqual(num2words(16, lang="te", to='ordinal_num'), u"16వ")
self.assertEqual(num2words(113, lang="te", to='ordinal_num'),
u"113వ")