19 from math
import floor
21 months = [
'január',
'február',
'március',
'április',
'május',
'június',
22 'július',
'augusztus',
'szeptember',
'október',
'november',
63 '',
'ezer',
'millió',
'milliárd',
'billió',
'billiárd',
'trillió',
67 FRACTION_STRING_HU = {
102 vowels_high = len([char
for char
in word
if char
in 'eéiíöőüű'])
103 vowels_low = len([char
for char
in word
if char
in 'aáoóuú'])
104 if vowels_high != 0
and vowels_low != 0:
106 return 0
if vowels_high == 0
else 1
110 """ Hungarian helper for nice_number 112 This function formats a float to human understandable functions. Like 113 4.5 becomes "4 és fél" for speech and "4 1/2" for text 116 number (int or float): the float to format 117 speech (bool): format for speech (True) or display (False) 118 denominators (iter of ints): denominators to use, default [1 .. 20] 120 (str): The formatted string. 126 return str(round(number, 3)).replace(
".",
",")
128 whole, num, den = result
135 return '{} {}/{}'.format(whole, num, den)
139 den_str = FRACTION_STRING_HU[den]
142 one =
'egy ' if den != 2
else '' 143 return_string =
'{}{}'.format(one, den_str)
145 return_string =
'{} {}'.format(num, den_str)
147 pointOne =
'egész egy' if den != 2
else 'és' 148 return_string =
'{} {} {}'.format(whole, pointOne, den_str)
150 return_string =
'{} egész {} {}'.format(whole, num, den_str)
156 Convert a number to its spoken equivalent 158 For example, '5.2' would return 'öt egész két tized' 161 num(float or int): the number to pronounce (set limit below) 162 places(int): maximum decimal places to speak 164 (str): The pronounced number 167 def pronounce_triplet_hu(num):
171 hundreds = floor(num / 100)
173 hundredConst = EXTRA_SPACE +
'száz' + EXTRA_SPACE
175 result += hundredConst
177 result +=
'két' + hundredConst
179 result += NUM_STRING_HU[hundreds] + hundredConst
180 num -= hundreds * 100
184 result += NUM_STRING_HU[num]
190 result += NUM_STRING_HU[tens] + EXTRA_SPACE
192 result +=
"huszon" + EXTRA_SPACE
194 result += NUM_STRING_HU[ones] + EXTRA_SPACE
197 def pronounce_whole_number_hu(num, scale_level=0):
203 last_triplet = num % 1000
205 if last_triplet == 1:
211 elif scale_level == 1:
212 result += EXTRA_SPACE + NUM_POWERS_OF_TEN[1] + EXTRA_SPACE
214 result +=
"egy" + NUM_POWERS_OF_TEN[scale_level]
215 elif last_triplet > 1:
216 result += pronounce_triplet_hu(last_triplet)
218 result = result.replace(NUM_STRING_HU[2],
'két')
220 result += NUM_POWERS_OF_TEN[1] + EXTRA_SPACE
222 result += NUM_POWERS_OF_TEN[scale_level]
226 num = floor(num / 1000)
228 return pronounce_whole_number_hu(num,
229 scale_level) + result
232 if abs(num) >= 1000000000000000000000000:
235 return str(NUM_STRING_HU[0])
240 return pronounce_whole_number_hu(num).strip(
'-')
242 whole_number_part = floor(num)
243 fractional_part = num - whole_number_part
244 if whole_number_part == 0:
245 result += NUM_STRING_HU[0]
246 result += pronounce_whole_number_hu(whole_number_part)
249 fraction = pronounce_whole_number_hu(
250 round(fractional_part * 10 ** places))
251 result += fraction.replace(NUM_STRING_HU[2],
'két')
252 fraction_suffixes = [
253 'tized',
'század',
'ezred',
'tízezred',
'százezred']
254 if places <= len(fraction_suffixes):
255 result +=
' ' + fraction_suffixes[places - 1]
260 ordinals = [
"nulladik",
"első",
"második",
"harmadik",
"negyedik",
261 "ötödik",
"hatodik",
"hetedik",
"nyolcadik",
"kilencedik",
263 big_ordinals = [
"",
"ezredik",
"milliomodik"]
266 if num < 0
or num != int(num):
274 last_digit = num - floor(num/10) * 10
277 if num % 1000000 == 0:
278 return root.replace(NUM_POWERS_OF_TEN[2], big_ordinals[2])
280 return root.replace(NUM_POWERS_OF_TEN[1], big_ordinals[1])
283 elif root[-1] ==
'ő':
284 return root[:-1] +
'edik' 285 elif last_digit != 0:
286 return ordinals[last_digit].join(
287 root.rsplit(NUM_STRING_HU[last_digit], 1))
288 return root +
"edik" if vtype == 1
else root +
"adik" 293 Format a time to a comfortable human format 295 For example, generate 'five thirty' for speech or '5:30' for 299 dt (datetime): date to format (assumes already in local timezone) 300 speech (bool): format for speech (default/True) or display (False)=Fal 301 use_24hour (bool): output in 24-hour/military or 12-hour format 302 use_ampm (bool): include the am/pm for 12-hour format 304 (str): The formatted time string 308 string = dt.strftime(
"%H:%M")
312 string = dt.strftime(
"%I:%M %p")
315 string = dt.strftime(
"%I:%M")
326 speak = speak.replace(NUM_STRING_HU[2],
'két')
328 if not dt.minute == 0:
333 if dt.hour == 0
and dt.minute == 0:
335 if dt.hour == 12
and dt.minute == 0:
346 speak = speak.replace(NUM_STRING_HU[2],
'két')
349 if not dt.minute == 0:
355 speak =
"délután " + speak
357 speak =
"este " + speak
359 speak =
"éjjel " + speak
361 speak =
"éjjel " + speak
363 speak =
"reggel " + speak