Нужна библиотека для поиска числительных в тексте и преобразования их в цифровой вид
"один" => 1 "двадцать" => 20 "двести сорок шесть" => 246
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Идея:
- Составляем таблицу "базовых" чисел.
- Делим введенное число на "базовые".
- Конкатенируем строки.
Пример "базовых чисел": 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))