Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42

num2words числа в текст. Поиск - замена чисел на текст

15.08.2022, 23:58. Показов 4725. Ответов 12

Студворк — интернет-сервис помощи студентам
Салют фурамчанам!
Наверное многие из вас сталкивались num2words?
Цель: Поиск в тексте числа и замена на текстовый вариант.
Тестовый кусок успешно переводит только числа:
Python
1
2
3
4
5
from num2words import num2words
p=r"42"
num2words(p)
g =str(num2words(p,lang='ru'))
print (g)
Но если входящую строку поменять на:
Python
1
p=r"42 дерева"
Выскочит ошибка.

Как правильно заставить его обработать текст?
Например текст "в 1819 году армия из 1500 солдат прошла 32 километра"
Итогом должно быть " В тысячу восемьсот девятнадцатом году армия из тысяча пятьсот солдат прошла тридцать два километра"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2022, 23:58
Ответы с готовыми решениями:

Поиск и замена тега со строкой формата "текст.текст"
Доброго времени суток! Подскажите пожалуйста как найти и заменить строку следующего вида: <p>текст...текст</p> на <p...

Поиск по числу и замена на текст
Здравствуйте! Прошу помочь, нужно подставить текст из ячейки 1 которой отвечает число в ячейке 2, в ячейку 3 при совпадении с числом. . ...

Поиск в WORD и замена на свой текст
Добрый день, подскажите пожалуйста как реализовать. В Edit будет вводиться текст,и необходимо в шаблоне Word найти "теги" и...

12
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
16.08.2022, 04:42
Лучший ответ Сообщение было отмечено Pin240 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
from num2words import num2words
import re
 
p = "42 дерева"
 
for i in re.findall(r'\d+', p):
    p = p.replace(i,  num2words(i, lang='ru'))
 
print(p)
2
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42
16.08.2022, 05:27  [ТС]
Спасибо большое! Не подскажите:
Цитата Сообщение от Vigi Посмотреть сообщение
re.findall(r'\d+', p):
Обрабатывает за 1 проход, весь текст, или ищет каждое число отдельно (этот вопрос для саморазвития)?
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
16.08.2022, 05:58
del

Добавлено через 7 минут
ищет каждое число отдельно за один проход Почитайте о re и шаблонах для них... '\d+'
1
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
16.08.2022, 10:22
Цитата Сообщение от Pin240 Посмотреть сообщение
Итогом должно быть " В тысячу восемьсот девятнадцатом году армия из тысяча пятьсот солдат прошла тридцать два километра"
Да где ж вас русскому языку учили!!!
Год - порядковое числительное, первая часть не склоняется. Правильно в тысячА восемьсот девятнадцатом году
А в солдатах количественное числительное и склоняются все слова. Родительный падеж, армия из тысячИ пятИсот солдат
0
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42
16.08.2022, 21:48  [ТС]
Цитата Сообщение от Red white socks Посмотреть сообщение
тысячИ пятИсот солдат
Тогда предлагаю вам саму библиотеку заставить у читывать падеж числительных, чего она не может. И вообще это не по теме могли и мимо пройти
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2022, 21:54
Лучший ответ Сообщение было отмечено Pin240 как решение

Решение

Vigi, чуть подрихтую )))
Python
1
print(re.sub(r'\d+', lambda x: num2words(x[0], lang='ru'), p))
4
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
16.08.2022, 23:42
Цитата Сообщение от Pin240 Посмотреть сообщение
И вообще это не по теме могли и мимо пройти
Воспитывать уважение к родному языку в тему всегда и везде.

Добавлено через 7 минут
Тем более, ладно в тексте ошиблись, к повальному невежеству привык, но вы же говорите
Цитата Сообщение от Pin240 Посмотреть сообщение
должно быть
2
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42
19.08.2022, 23:46  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
чуть подрихтую ))
А какой из них быстрей работает?
Цитата Сообщение от Vigi Посмотреть сообщение
re.findall(r'\d+', p):
или
Цитата Сообщение от iSmokeJC Посмотреть сообщение
re.sub(r'\d+', lambda x: num2words(x[0], lang='ru')
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.08.2022, 23:56
Pin240, а ты вот чисто логически поразмысли

Добавлено через 2 минуты
Код ув.Vigi, сначала ищет все числа, перебирает их, и в цикле меняет на требуемое.
Мой же вариант меняет сразу при нахождении, "на лету"
1
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42
20.08.2022, 09:09  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Мой же вариант меняет сразу при нахождении, "на лету"
Этот вариант мне подходит больше
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
20.08.2022, 09:25
Почему?
0
2 / 2 / 0
Регистрация: 16.07.2022
Сообщений: 42
20.08.2022, 19:54  [ТС]
Есть вероятность попадания большого кол-ва цифр в тексте а оперативы маловато + тексты бывают оочень большие. Хотя их можно разбить на картежи, но зачем сильно мудрить) Краткость - сестра таланта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2022, 19:54
Помогаю со студенческими работами здесь

Поиск текста по документу и замена его на свой текст
Пытаюсь сделать поиск с заменой текста в документе. Все работает но дело в том что он меняет лишь 1ну часть. Делаю след образом ищу текст ...

Поиск текста по документу и замена его на свой текст
Вот есть маркер в Вворде типа $FIO$-2е штуки. В одну надо записывать Фамилию Имя Отчество полностью а в другую только Фамилию И. О. Как это...

Бинарный поиск: преобразовать текст T в текст S, путем замены каждого вхождения слова A[i] на соответствующее слово B[i]
Помогите пожалуйста, уже довольно долго пытаюсь решить и найти решение для данной задачи, но безуспешно. Пусть задан в виде...

Замена знаков препинания, для выделения текста елочки: «текст» и лапки: "текст" между собой
здравствуйте елочки менять на лапки естественно просто, а как менять наоборот, они ведь разные « и », то есть открывающиеся и...

Дан текст. Выяснить, является ли этот текст десятичной записью целого числа
Дан текст. Выяснить, является ли этот текст десятичной записью целого числа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru