Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 104 additions & 1 deletion num2words/lang_CS.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,69 @@
}


ORDINAL_ONES = {
0: 'nultý',
1: 'první',
2: 'druhý',
3: 'třetí',
4: 'čtvrtý',
5: 'pátý',
6: 'šestý',
7: 'sedmý',
8: 'osmý',
9: 'devátý',
}

ORDINAL_TENS = {
0: 'desátý',
1: 'jedenáctý',
2: 'dvanáctý',
3: 'třináctý',
4: 'čtrnáctý',
5: 'patnáctý',
6: 'šestnáctý',
7: 'sedmnáctý',
8: 'osmnáctý',
9: 'devatenáctý',
}

ORDINAL_TWENTIES = {
2: 'dvacátý',
3: 'třicátý',
4: 'čtyřicátý',
5: 'padesátý',
6: 'šedesátý',
7: 'sedmdesátý',
8: 'osmdesátý',
9: 'devadesátý',
}

ORDINAL_HUNDREDS = {
1: 'stý',
2: 'dvoustý',
3: 'třístý',
4: 'čtyřstý',
5: 'pětistý',
6: 'šestistý',
7: 'sedmistý',
8: 'osmistý',
9: 'devítistý',
}

ORDINAL_THOUSANDS = {
1: 'tisící',
2: 'miliontý',
3: 'miliardtý',
4: 'biliontý',
5: 'biliardtý',
6: 'triliontý',
7: 'triliardtý',
8: 'kvadriliontý',
9: 'kvadriliardtý',
10: 'quintilliontý',
}


class Num2Word_CS(Num2Word_Base):
CURRENCY_FORMS = {
'CZK': (
Expand All @@ -98,6 +161,20 @@ def setup(self):
self.negword = "mínus"
self.pointword = "celá"

self.word_to_ordinal = {}
self.word_to_ordinal[ZERO[0]] = ORDINAL_ONES[0]
for key, value in ONES.items():
self.word_to_ordinal[value[0]] = ORDINAL_ONES[key]
for key, value in TENS.items():
self.word_to_ordinal[value[0]] = ORDINAL_TENS[key]
for key, value in TWENTIES.items():
self.word_to_ordinal[value[0]] = ORDINAL_TWENTIES[key]
for key, value in HUNDREDS.items():
self.word_to_ordinal[value[0]] = ORDINAL_HUNDREDS[key]
for key, value in THOUSANDS.items():
for form in value:
self.word_to_ordinal[form] = ORDINAL_THOUSANDS[key]

def to_cardinal(self, number):
n = str(number).replace(',', '.')
if '.' in n:
Expand All @@ -123,7 +200,33 @@ def pluralize(self, n, forms):
return forms[form]

def to_ordinal(self, number):
raise NotImplementedError()
self.verify_ordinal(number)

if number < 10:
return ORDINAL_ONES[number]
if number < 20:
return ORDINAL_TENS[number - 10]
if number < 100:
tens, ones = divmod(number, 10)
if ones == 0:
return ORDINAL_TWENTIES[tens]
return TWENTIES[tens][0] + ' ' + ORDINAL_ONES[ones]

# exact hundreds
if number < 1000 and number % 100 == 0:
return ORDINAL_HUNDREDS[number // 100]

# other numbers
cardinal = self._int2word(number)
words = cardinal.split()

# replace the last number word with ordinal
for i in range(len(words) - 1, -1, -1):
if words[i] in self.word_to_ordinal:
words[i] = self.word_to_ordinal[words[i]]
break

return ' '.join(words)

def _int2word(self, n):
if n == 0:
Expand Down
19 changes: 9 additions & 10 deletions num2words/lang_KO.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,17 @@ def to_ordinal(self, value):
return "첫 번째"
outwords = self.to_cardinal(value).split(" ")
lastwords = outwords[-1].split("백")
if "십" in lastwords[-1]:
ten_one = lastwords[-1].split("십")
ten_one[0] = self.ords[ten_one[0] + "십"]
try:
ten_one[1] = self.ords[ten_one[1]]
idx = -1 if len(lastwords) == 1 else 1
if "십" in lastwords[idx]:
ten_one = lastwords[idx].split("십")
ten_one[0] = self.ords.get((ten_one[0] or "일") + "십", ten_one[0] + "십")
if len(ten_one) > 1 and ten_one[1]:
ten_one[1] = self.ords.get(ten_one[1], ten_one[1])
ten_one[0] = ten_one[0].replace("스무", "스물")
except KeyError:
pass
lastwords[-1] = ''.join(ten_one)
lastwords[idx] = ''.join(ten_one)
else:
lastwords[-1] = self.ords[lastwords[-1]]
outwords[-1] = "백 ".join(lastwords)
lastwords[idx] = self.ords.get(lastwords[idx], lastwords[idx])
outwords[-1] = "백".join(lastwords)
return " ".join(outwords) + " 번째"

def to_ordinal_num(self, value):
Expand Down
Loading