19 from math
import floor
21 months = [
'januar',
'februar',
'märz',
'april',
'mai',
'juni',
22 'juli',
'august',
'september',
'oktober',
'november',
68 FRACTION_STRING_DA = {
102 """ Danish helper for nice_number 103 This function formats a float to human understandable functions. Like 104 4.5 becomes "4 einhalb" for speech and "4 1/2" for text 106 number (int or float): the float to format 107 speech (bool): format for speech (True) or display (False) 108 denominators (iter of ints): denominators to use, default [1 .. 20] 110 (str): The formatted string. 115 return str(round(number, 3)).replace(
".",
",")
116 whole, num, den = result
122 return '{} {}/{}'.format(whole, num, den)
125 den_str = FRACTION_STRING_DA[den]
128 return_string =
'{} {}'.format(num, den_str)
130 return_string =
'{} {}e'.format(num, den_str)
133 return_string =
'{} og {} {}'.format(whole, num, den_str)
135 return_string =
'{} og {} {}e'.format(whole, num, den_str)
142 Convert a number to its spoken equivalent 143 For example, '5.2' would return 'five point two' 145 num(float or int): the number to pronounce (set limit below) 146 places(int): maximum decimal places to speak 148 (str): The pronounced number 152 def pronounce_triplet_da(num):
156 hundreds = floor(num / 100)
159 result +=
'et' +
'hundrede' + EXTRA_SPACE
161 result += NUM_STRING_DA[hundreds] + \
162 'hundrede' + EXTRA_SPACE
163 num -= hundreds * 100
169 result += NUM_STRING_DA[num] + EXTRA_SPACE
174 result += NUM_STRING_DA[ones] + EXTRA_SPACE
176 result +=
'og' + EXTRA_SPACE
178 result += NUM_STRING_DA[tens] + EXTRA_SPACE
182 def pronounce_fractional_da(num, places):
189 result +=
" " + NUM_STRING_DA[int(num * place) % 10]
194 def pronounce_whole_number_da(num, scale_level=0):
200 last_triplet = num % 1000
202 if last_triplet == 1:
208 elif scale_level == 1:
209 result +=
'et' + EXTRA_SPACE +
'tusinde' + EXTRA_SPACE
211 result +=
"en " + NUM_POWERS_OF_TEN[scale_level] +
' ' 212 elif last_triplet > 1:
213 result += pronounce_triplet_da(last_triplet)
215 result +=
'tusinde' + EXTRA_SPACE
217 result +=
"og" + NUM_POWERS_OF_TEN[scale_level]
219 if scale_level % 2 == 0:
223 num = floor(num / 1000)
225 return pronounce_whole_number_da(num,
226 scale_level) + result + EXTRA_SPACE
229 if abs(num) >= 1000000000000000000000000:
232 return str(NUM_STRING_DA[0])
237 return pronounce_whole_number_da(num)
239 whole_number_part = floor(num)
240 fractional_part = num - whole_number_part
241 result += pronounce_whole_number_da(whole_number_part)
244 result += pronounce_fractional_da(fractional_part, places)
253 ordinals = [
"nulte",
"første",
"anden",
"tredie",
"fjerde",
"femte",
254 "sjette",
"syvende",
"ottende",
"niende",
"tiende"]
257 if num < 0
or num != int(num):
277 Format a time to a comfortable human format 279 For example, generate 'five thirty' for speech or '5:30' for 283 dt (datetime): date to format (assumes already in local timezone) 284 speech (bool): format for speech (default/True) or display (False)=Fal 285 use_24hour (bool): output in 24-hour/military or 12-hour format 286 use_ampm (bool): include the am/pm for 12-hour format 288 (str): The formatted time string 292 string = dt.strftime(
"%H:%M")
296 string = dt.strftime(
"%I:%M %p")
299 string = dt.strftime(
"%I:%M")
311 if not dt.minute == 0:
318 if dt.hour == 0
and dt.minute == 0:
320 if dt.hour == 12
and dt.minute == 0:
327 if dt.hour == 1
or dt.hour == 13:
334 if not dt.minute == 0:
343 speak +=
" om eftermiddagen" 346 speak +=
" om aftenen" 349 speak +=
" om natten" 352 speak +=
" om natten" 355 speak +=
" om morgenen" 365 for idx, word
in enumerate(words):
366 if word.lower()
in months:
370 wordNext = words[idx + 1]
if idx + 1 < len(words)
else "" 371 if wordNext.isnumeric():
372 words[idx] =
"opløftet i" 373 text =
" ".join(words)
380 normalized_text = text
383 for idx, word
in enumerate(words):
384 wordNext = words[idx + 1]
if idx + 1 < len(words)
else "" 385 wordPrev = words[idx - 1]
if idx > 0
else "" 387 if word[:-1].isdecimal():
388 if wordNext.lower()
in months:
390 if wordPrev.lower()
in [
"om",
"den",
"fra",
"til",
391 "(fra",
"(om",
"til"]:
393 elif wordPrev.lower()
not in [
"den"]:
396 normalized_text = " ".join(words)
397 return normalized_text