Улучшенный будильник, таймер, перевод
This commit is contained in:
@@ -91,6 +91,9 @@ MONTHS_GENITIVE = [
|
||||
"декабря",
|
||||
]
|
||||
|
||||
# Леммы единиц времени (для корректного падежа числительных)
|
||||
TIME_UNIT_LEMMAS = {"час", "минута", "секунда"}
|
||||
|
||||
|
||||
def get_case_from_preposition(prep_token):
|
||||
"""Определяет падеж по предлогу."""
|
||||
@@ -127,7 +130,6 @@ def numbers_to_words(text: str) -> str:
|
||||
|
||||
# 1. Обработка годов: "в 1999 году", "2024 год"
|
||||
def replace_year_match(match):
|
||||
full_str = match.group(0)
|
||||
prep = match.group(1) # Предлог (в, с, к...)
|
||||
year_str = match.group(2) # Само число
|
||||
year_word = match.group(3) # Слово "год", "году" и т.д.
|
||||
@@ -207,9 +209,10 @@ def numbers_to_words(text: str) -> str:
|
||||
|
||||
case = "nominative"
|
||||
gender = "m"
|
||||
prep_clean = prep.strip().lower() if prep else None
|
||||
|
||||
if prep:
|
||||
morph_case = get_case_from_preposition(prep.strip())
|
||||
if prep_clean:
|
||||
morph_case = get_case_from_preposition(prep_clean)
|
||||
if morph_case:
|
||||
case = PYMORPHY_TO_NUM2WORDS.get(morph_case, "nominative")
|
||||
|
||||
@@ -221,6 +224,16 @@ def numbers_to_words(text: str) -> str:
|
||||
morph_gender = parsed.tag.gender
|
||||
gender = PYMORPHY_TO_GENDER.get(morph_gender, "m")
|
||||
|
||||
# Спец-случай: "на 1 час" -> "на один час" (не "одного")
|
||||
# Для неодушевленных муж./ср. рода в винительном падеже
|
||||
# числительные должны совпадать с именительным.
|
||||
if (
|
||||
prep_clean == "на"
|
||||
and parsed.normal_form in TIME_UNIT_LEMMAS
|
||||
and parsed.tag.gender in ("masc", "neut")
|
||||
):
|
||||
case = "nominative"
|
||||
|
||||
words = convert_number(
|
||||
num_str, context_type="cardinal", case=case, gender=gender
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user