|
import num2words |
|
from .number_names import NUMBER_NAMES |
|
import re |
|
|
|
|
|
def add_diacritics(words: str): |
|
new_words = [] |
|
for word in words.split(): |
|
if NUMBER_NAMES.get(word): |
|
new_words.append(NUMBER_NAMES[word]) |
|
elif NUMBER_NAMES.get(word[1:]): |
|
|
|
new_words.append(NUMBER_NAMES[word[0]] + NUMBER_NAMES[word[1:]]) |
|
else: |
|
new_words.append(word) |
|
return " ".join(new_words) |
|
|
|
|
|
def num_to_word(maybe_number: str) -> str: |
|
def replace_number(match): |
|
num: str = match.group() |
|
suffix, prefix = "", "" |
|
|
|
if not num.startswith("-") and not num[0].isdigit(): |
|
prefix = num[0] |
|
num = num[1:] |
|
if not num[-1].isdigit(): |
|
suffix = num[-1] |
|
num = num[:-1] |
|
words = num2words.num2words(num, lang="he", ordinal=False) |
|
words_with_diacritics = add_diacritics(words) |
|
return ( |
|
f"{prefix.strip()} {words_with_diacritics.strip()} {suffix.strip()}".strip() |
|
) |
|
|
|
|
|
result = re.sub(r"[^\d\-]?-?\d+(?:[\.,]\d+)?[^\d]?", replace_number, maybe_number) |
|
|
|
return result |
|
|