Нужна библиотека для поиска числительных в тексте и преобразования их в цифровой вид

"один" => 1 "двадцать" => 20 "двести сорок шесть" => 246


Ответы (1 шт):

Автор решения: n1tr0xs

Идея:

  1. Составляем таблицу "базовых" чисел.
  2. Делим введенное число на "базовые".
  3. Конкатенируем строки.

Пример "базовых чисел": 1, 2, 3, ..., 19, 20, 30, ..., 90, 100, 200, ..., 900, 1000.
Чтобы не писать каждую тысячу руками можно применить склонение чисел.


Общая реализация: (скорее всего, есть что оптимизировать)

def num2text(num:int)->str:
    dictionary = {
        1: 'один',
        2: 'два',
        3: 'три',
        4: 'четыре',
        5: 'пять',
        6: 'шесть',
        7: 'семь',
        8: 'восемь',
        9: 'девять',
        10: 'десять',
        11: 'одиннадцать',
        12: 'двенадцать',
        13: 'тринадцать',
        14: 'четырнадцать',
        15: 'пятнадцать',
        16: 'шестнадцать',
        17: 'семнадцать',
        18: 'восемнадцать',
        19: 'девятьнадцать',
        20: 'двадцать',
        30: 'тридцать',
        40: 'сорок',
        50: 'пятьдесят',
        60: 'шестьдесят',
        70: 'семьдесят',
        80: 'восемдесят',
        90: 'девяносто',
        100: 'сто',
        200: 'двести',
        300: 'триста',
        400: 'четыреста',
        500: 'пятьсот',
        600: 'шестьсот',
        700: 'семьсот',
        800: 'восемьсот',
        900: 'девятьсот',
        1000: 'тысяча',
    }
    try:
        return dictionary[num]
    except KeyError:
        k = 0
        result = ''
        while num:
            num, d = divmod(num, 10)
            result = dictionary[d * 10**k] + ' ' + result
            k += 1
        return result
        
i = 555
print(num2text(i))
→ Ссылка