@eshran

Как заменять слова-цифры на цифры?

Нужно заменить в тексте слова "один", "два" и т.д. на цифры "1", "2".
То есть, если я дам строку "один миллион двадцать тысяч семьсот пять", чтобы результат был "1025705", как это сделать?
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Предлагаю выделить опорные слова:
а) миллион (миллиона, миллионов)
б) тысяча (тысяч, тусячи, и если другие падежи нужно, то "тысячу" и пр.)
в) миллиард во всех склонениях
г) триллион во всех склонениях
и т.д.

Далее перед этими опорными словами смотреть уже на как бы множитель. Сам множитель - как бы сумма входящих в него слов.

Таким образом, один миллион двадцать тысяч семьсот пять раскладывается так:
(один) * миллион + (двадцать) * тысяч + (семьсот + пять) * 1
В скобках - множители. Как видно, сами множители являются суммой. И после перемножения с опорной основой, все части складываются воедино. Если основы нет (в конце), то за основу считаем 1, очевидно.

Другой пример:
(сто + двадцать + три) * миллиона + (двести + тринадцать) * тысяч + (сто + десять) * 1

Самих слов не так много. Около десяти опорных (плюс склонения), далее числа от 0 до 19, далее десятки от 20 до 90, далее сотни от 100 до 900, - вот и всё.

Правда, есть экзотические примеры, типа "пара сотен" или "дюжина". В принципе, они тоже попадают под эту схему, в нее нужно лишь добавить больше опорных слов, а также больше обычных слов. Но вообще это уже выходит за рамки задачи, иначе всякие жаргонизмы тоже нужно забить в схему, что геморно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@V0vash
Первое что надумалось взять таблицу или массив соответствия, проверять по ней и заменять при необходимости.
Ответ написан
@Karpion
Нехилые у Вас запросы... Даже обратная задача типа "преобразовать циферное число в словесное" - уже весьма нетривиальна; и это при том, что любая последовательность цифр является корректным числом.

А с Вашей задачей - надо предусмотреть некорректные варианты типа "одна миллион" или "пятьдесят триста" (при том, что "триста пятьдесят" - совершенно нормально). Ну и надо бы определиться с диапазоном возможных чисел.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы