thewh1teagle
latest
1866014
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:]):
# With Vav or Bet
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 = "", ""
# 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()
)
# Replace all whole numbers in the string
result = re.sub(r"[^\d\-]?-?\d+(?:[\.,]\d+)?[^\d]?", replace_number, maybe_number)
return result