mirror of
https://github.com/bblaz/num2words.git
synced 2025-12-06 06:42:25 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -36,6 +36,28 @@ ONES = {
|
||||
9: ('dziewięć',),
|
||||
}
|
||||
|
||||
ONES_ORDINALS = {
|
||||
1: ('pierwszy', "pierwszo"),
|
||||
2: ('drugi', "dwu"),
|
||||
3: ('trzeci', "trzy"),
|
||||
4: ('czwarty', "cztero"),
|
||||
5: ('piąty', "pięcio"),
|
||||
6: ('szósty', "sześcio"),
|
||||
7: ('siódmy', "siedmio"),
|
||||
8: ('ósmy', "ośmio"),
|
||||
9: ('dziewiąty', "dziewięcio"),
|
||||
10: ('dziesiąty', "dziesięcio"),
|
||||
11: ('jedenasty', "jedenasto"),
|
||||
12: ('dwunasty', "dwunasto"),
|
||||
13: ('trzynasty', "trzynasto"),
|
||||
14: ('czternasty', "czternasto"),
|
||||
15: ('piętnasty', "piętnasto"),
|
||||
16: ('szesnasty', "szesnasto"),
|
||||
17: ('siedemnasty', "siedemnasto"),
|
||||
18: ('osiemnasty', "osiemnasto"),
|
||||
19: ('dziewiętnasty', "dziewiętnasto"),
|
||||
}
|
||||
|
||||
TENS = {
|
||||
0: ('dziesięć',),
|
||||
1: ('jedenaście',),
|
||||
@@ -49,6 +71,7 @@ TENS = {
|
||||
9: ('dziewiętnaście',),
|
||||
}
|
||||
|
||||
|
||||
TWENTIES = {
|
||||
2: ('dwadzieścia',),
|
||||
3: ('trzydzieści',),
|
||||
@@ -60,6 +83,17 @@ TWENTIES = {
|
||||
9: ('dziewięćdzisiąt',),
|
||||
}
|
||||
|
||||
TWENTIES_ORDINALS = {
|
||||
2: ('dwudziesty', "dwudziesto"),
|
||||
3: ('trzydziesty', "trzydiesto"),
|
||||
4: ('czterdziesty', "czterdziesto"),
|
||||
5: ('pięćdziesiąty', "pięćdziesięcio"),
|
||||
6: ('sześćdziesiąty', "sześćdziesięcio"),
|
||||
7: ('siedemdziesiąty', "siedemdziesięcio"),
|
||||
8: ('osiemdziesiąty', "osiemdziesięcio"),
|
||||
9: ('dziewięćdzisiąty', "dziewięćdziesięcio"),
|
||||
}
|
||||
|
||||
HUNDREDS = {
|
||||
1: ('sto',),
|
||||
2: ('dwieście',),
|
||||
@@ -72,10 +106,28 @@ HUNDREDS = {
|
||||
9: ('dziewięćset',),
|
||||
}
|
||||
|
||||
HUNDREDS_ORDINALS = {
|
||||
1: ('setny', "stu"),
|
||||
2: ('dwusetny', "dwustu"),
|
||||
3: ('trzysetny', "trzystu"),
|
||||
4: ('czterysetny', "czterystu"),
|
||||
5: ('pięćsetny', "pięcset"),
|
||||
6: ('sześćsetny', "sześćset"),
|
||||
7: ('siedemsetny', "siedemset"),
|
||||
8: ('osiemsetny', "ośiemset"),
|
||||
9: ('dziewięćsetny', "dziewięćset"),
|
||||
}
|
||||
|
||||
THOUSANDS = {
|
||||
1: ('tysiąc', 'tysiące', 'tysięcy'), # 10^3
|
||||
}
|
||||
|
||||
prefixes_ordinal = {
|
||||
1: "tysięczny",
|
||||
2: "milionowy",
|
||||
3: "milairdowy"
|
||||
}
|
||||
|
||||
prefixes = ( # 10^(6*x)
|
||||
"mi", # 10^6
|
||||
"bi", # 10^12
|
||||
@@ -130,8 +182,48 @@ class Num2Word_PL(Num2Word_Base):
|
||||
form = 2
|
||||
return forms[form]
|
||||
|
||||
def last_fragment_to_ordinal(self, last, words, level):
|
||||
n1, n2, n3 = get_digits(last)
|
||||
last_two = n2*10+n1
|
||||
if last_two == 0:
|
||||
words.append(HUNDREDS_ORDINALS[n3][level])
|
||||
elif level == 1 and last == 1:
|
||||
return
|
||||
elif last_two < 20:
|
||||
if n3 > 0:
|
||||
words.append(HUNDREDS[n3][level])
|
||||
words.append(ONES_ORDINALS[last_two][level])
|
||||
elif last_two % 10 == 0:
|
||||
if n3 > 0:
|
||||
words.append(HUNDREDS[n3][level])
|
||||
words.append(TWENTIES_ORDINALS[n2][level])
|
||||
else:
|
||||
if n3 > 0:
|
||||
words.append(HUNDREDS[n3][0])
|
||||
words.append(TWENTIES_ORDINALS[n2][0])
|
||||
words.append(ONES_ORDINALS[n1][0])
|
||||
|
||||
def to_ordinal(self, number):
|
||||
raise NotImplementedError()
|
||||
if number % 1 != 0:
|
||||
raise NotImplementedError()
|
||||
words = []
|
||||
fragments = list(splitbyx(str(number), 3))
|
||||
level = 0
|
||||
last = fragments[-1]
|
||||
while last == 0:
|
||||
level = level+1
|
||||
fragments.pop()
|
||||
last = fragments[-1]
|
||||
if len(fragments) > 1:
|
||||
pre_part = self._int2word(number-(last*1000**level))
|
||||
words.append(pre_part)
|
||||
self.last_fragment_to_ordinal(last, words, 0 if level == 0 else 1)
|
||||
output = " ".join(words)
|
||||
if last == 1 and level > 0 and output != "":
|
||||
output = output + " "
|
||||
if level > 0:
|
||||
output = output + prefixes_ordinal[level]
|
||||
return output
|
||||
|
||||
def _int2word(self, n):
|
||||
if n == 0:
|
||||
|
||||
@@ -83,9 +83,32 @@ class Num2WordsPLTest(TestCase):
|
||||
)
|
||||
|
||||
def test_to_ordinal(self):
|
||||
# @TODO: implement to_ordinal
|
||||
with self.assertRaises(NotImplementedError):
|
||||
num2words(1, lang='pl', to='ordinal')
|
||||
self.assertEqual(num2words(100, lang='pl', to='ordinal'), "setny")
|
||||
self.assertEqual(
|
||||
num2words(101, lang='pl', to='ordinal'), "sto pierwszy")
|
||||
self.assertEqual(num2words(121, lang='pl', to='ordinal'),
|
||||
"sto dwudziesty pierwszy")
|
||||
self.assertEqual(
|
||||
num2words(115, lang='pl', to='ordinal'), "sto piętnasty")
|
||||
self.assertEqual(
|
||||
num2words(25, lang='pl', to='ordinal'), "dwudziesty piąty")
|
||||
self.assertEqual(num2words(1021, lang='pl', to='ordinal'),
|
||||
"tysiąc dwudziesty pierwszy")
|
||||
self.assertEqual(
|
||||
num2words(120, lang='pl', to='ordinal'), "sto dwudziesty")
|
||||
self.assertEqual(num2words(1000021, lang='pl',
|
||||
to='ordinal'), "milion dwudziesty pierwszy")
|
||||
self.assertEqual(num2words(1000, lang='pl', to='ordinal'), "tysięczny")
|
||||
self.assertEqual(num2words(10000, lang='pl',
|
||||
to='ordinal'), "dziesięciotysięczny")
|
||||
self.assertEqual(num2words(100000000, lang='pl',
|
||||
to='ordinal'), "stumilionowy")
|
||||
self.assertEqual(num2words(1002000, lang='pl',
|
||||
to='ordinal'), "milion dwutysięczny")
|
||||
self.assertEqual(num2words(1001000, lang='pl',
|
||||
to='ordinal'), "milion tysięczny")
|
||||
self.assertEqual(num2words(1000000, lang='pl',
|
||||
to='ordinal'), "milionowy")
|
||||
|
||||
def test_currency(self):
|
||||
self.assertEqual(
|
||||
|
||||
Reference in New Issue
Block a user