Как создавался NUMBERTEXT: История разработки дополнения для Google Таблиц от создателя

От идеи до реализации: как NUMBERTEXT преобразил работу с числами в Google Таблицах
Я создал NUMBERTEXT в 2019 году, чтобы решить одну из частых проблем пользователей Google Таблиц – необходимость перевода чисел в их текстовое представление прописью.
Введение
Это дополнение стало для меня проектом, который объединил мои навыки программирования и понимание потребностей пользователей. В тот момент я хотел не просто создать полезный инструмент, а продвинуть проект с открытым исходным кодом в Google Workspace Marketplace. Мне было важно показать, что эта платформа подходит не только для коммерческих продуктов, но и для обмена опытом и совместной работы над открытыми решениями.
NUMBERTEXT полностью основывается на библиотеке libnumbertext , которая распространяется под лицензией BSD 3-Clause License. Эта программа распространяется совершенно бесплатно, что делает её доступной для широкого круга пользователей, а лицензия позволяет реализовывать проекты, подобные дополнению NUMBERTEXT .
Необходимость в NUMBERTEXT
Когда я работал с Гугл Таблицами, часто сталкивался с ситуацией, когда нужно было писать числа прописью (словами), например, при составлении финансовых документов или юридических договоров. Я заметил, что многие люди выполняют эту задачу вручную, что занимает много времени и может привести к ошибкам. Именно это побудило меня разработать инструмент, который автоматизирует этот процесс.
Хотя на рынке существовали другие инструменты для перевода чисел в текст, у них были свои недостатки: одни предлагали громоздкие формулы, другие имели ограничения по размеру чисел или не вызывали доверия. Моей целью было создать универсальное, надежное и доступное решение, которому пользователи могли бы доверять.
Процесс Разработки
Идея проекта
Идея NUMBERTEXT возникла у меня во время работы над одним из своих проектов, где требовалось постоянно переводить числа в текстовое представление. Я подумал, почему бы не создать решение, которое сделает этот процесс проще и быстрее для всех, кто пользуется Google Таблицами?
Технические аспекты
Для реализации NUMBERTEXT я выбрал Google Apps Script, так как это позволило мне легко интегрировать дополнение в экосистему Google Workspace. Благодаря этому выбору, пользователи могли устанавливать NUMBERTEXT без сложных настроек, буквально в два клика.
Основным вызовом для меня стало создание алгоритма, способного корректно переводить числа в текстовое представление на русском языке. Русский язык имеет свои особенности, такие как изменение окончаний числительных в зависимости от контекста, поэтому мне пришлось учитывать эти лингвистические особенности.
В поисках решения я вспомнил, что LibreOffice имеет в своем распоряжении подобный инструмент, который поставляется измагазина дополнений. Он основан на библиотеке libnumbertext, которая является открытым исходным кодом и доступна для использования в своих проектах. Я решил использовать его в качестве основы для моей реализации.
Модуль интерпретатора Soros
в библиотеке libnumbertext обрабатывает входные данные, применяя заданные правила преобразования на основе регулярных выражений и рекурсивно обрабатывая вложенные конструкции. Он поддерживает локализацию через параметр языка lang
и использует специальные методы для трансляции символов, обеспечивая точное преобразование чисел в текстовое представление прописью.
Архитектура приложения
При проектировании NUMBERTEXT
я использовал принципы чистой архитектуры, чтобы сделать код максимально гибким и расширяемым. Это позволяет легко добавлять новые функции и поддерживать существующие. Если говорить детально, то все функции NUMBERTEXT
- это обертки над модулем интерпретатора Soros
для JavaScript из библиотеки libnumbertext
.
Особенности NUMBERTEXT
NUMBERTEXT – это программа, изначально созданная для LibreOffice, которая поддерживает более 50 языков и предоставляет широкие возможности для перевода чисел в текстовое представление прописью. Я разработал версию NUMBERTEXT специально для Google Таблиц, сохранив основные функции оригинальной программы, но адаптировав её под экосистему Google Workspace.
Особое внимание было уделено сохранению возможностей преобразования чисел: помимо традиционного текстового представления, программа поддерживает перевод чисел в римские цифры и даже числа Сучжоу (китайскую систему счета). Кроме того, NUMBERTEXT предоставляет уникальную возможность вывода порядковых числительных текстом, что особенно полезно при составлении документов, где требуется точное склонение чисел. Например, “1” может быть преобразовано в “первый”, “первая” или “первое” в зависимости от контекста.
Программа также реализует автоматическое склонение по родам (мужской, женский и средний), что делает её ещё более гибкой для работы с русским языком и другими языками, где важно учитывать грамматические категории.
Разбор файла-инструкции для интерпретатора
Для тех, кто хочет погрузиться в технические детали, я подробно разберу, как устроен “мозг” библиотеки — файл с правилами для русского языка. Это покажет, насколько гибкой и мощной является система libnumbertext
.
Рассмотрим файл-инструкцию для русского языка, доступный по адресу: ru.sor
. Этот файл является основой для работы модуля интерпретатора Soros
, который обрабатывает числа и преобразует их в текстовое представление прописью. Для правильного понимания его работы важно ознакомиться с ключевыми принципами организации и правилами:
- Чтение файла: Интерпретатор читает весь файл целиком, анализируя каждую строку как отдельную инструкцию.
- Структура инструкций: Каждая строка файла представляет собой одну инструкцию, которая определяет правила преобразования чисел в текст.
- Метки для группировки: Инструкции могут быть помечены метками в начале строки, например,
EUR:
. Эти метки помогают интерпретатору находить нужные правила для конкретных случаев использования (например, для валют или других контекстов). - Группы производных форм: Для создания производных форм, таких как порядковые числительные в женском роде, используются специальные группы, помеченные, например,
== ordinal-feminine ==
. Это позволяет задать уникальные правила для каждой категории.
Пример разбора инструкции
Давайте рассмотрим пример формирования текста для числительного “тысяча”:
(1|\d?[02-9]1)(\d{3}) $(f:$1) тысяча[ $2]
- Разбиение на группы: Число делится на две группы:
$1
и$2
.$1
: Первая группа определяет часть числа, которая должна быть преобразована в женский род.$2
: Вторая группа представляет суффикс, который требует дополнительной обработки.
- Преобразование в женский род: Тысяча всегда имеет женский род, поэтому первая группа (
$1
) преобразуется с помощью функцииf:
, которая меняет окончание числительного. - Обработка суффикса:
[ $2]
указывает, что вторая группа должна быть обработана рекурсивно, чтобы учесть возможные дополнительные правила.
Поэтому, если интерпретатор определит, что число соответствует этой инструкции, он вернет текстовое представление числа “тысяча”.
Преобразование в женский род
Для реализации преобразования числительных в женский род используется следующий набор инструкций:
# female conversion
f:(.*)один \1одна
f:(.*)два \1две
f:(.*) \1
- Правило для “один” → “одна”: Если число содержит “один”, оно заменяется на “одна”.
- Правило для “два” → “две”: Аналогично, “два” преобразуется в “две”.
- Общее правило: Все остальные случаи остаются без изменений.
Эти правила обеспечивают корректное склонение числительных по родам, что особенно важно для русского языка, где грамматические категории играют ключевую роль.
Инструкции для валют
Файл-инструкция также содержит специальные правила для преобразования сумм в текстовое представление для основных валют. Вот несколько примеров:
EUR:(\D+) $(\1: евро, евро, евро, цент, цента, центов)
GBP:(\D+) $(\1: фунт стерлингов, фунта стерлингов, фунтов стерлингов, пенни, пенса, пенсов)
RUB:(\D+) $(\1: рубль, рубля, рублей, копейка, копейки, копеек)
UAH:(\D+) $(\1: гривна, гривны, гривен, копейка, копейки, копеек)
USD:(\D+) $(\1: доллар США, доллара США, долларов США, цент, цента, центов)
Каждая метка (например, EUR:
, RUB:
) определяет правила для соответствующей валюты, включая формы склонения для основной единицы и её дробной части. Эти метки созданы, чтобы можно было быстро вывести сумму текстом для нужной валюты. В NUMBERTEXT даже предусмотрена специальная реализация в виде функции MONEYTEXT
, которая позволяет автоматически преобразовывать числовые значения валют в их текстовое представление с учетом всех грамматических правил.
Установка и использование
Для того чтобы начать использовать NUMBERTEXT
, пользователю нужно всего лишь установить его через Google Workspace Marketplace. После установки дополнение становится доступным во всех таблицах, и можно сразу начинать использовать формулу =NUMBERTEXT(число)
для преобразования чисел в текстовое представление прописью.
Как пользоваться дополнением, можете прочитать тут Дополнение NUMBERTEXT. Сумма прописью
Отзывы и развитие
С момента выпуска NUMBERTEXT я получил множество положительных отзывов от пользователей, которые отметили удобство и точность работы дополнения. Это мотивирует меня продолжать развивать NUMBERTEXT , внедряя обновления для улучшения его стабильности и производительности.
В планах на будущее – обновление основной билиотеки согласно запросам пользователей и актуализация кодовой базы дополнения.
Одним из свидетельств полезности дополнения является то, что число установок приближается к 500 000.
Заключение
Разработка NUMBERTEXT стала для меня важным опытом, который показал, как простые идеи могут значительно упростить жизнь пользователям. Благодаря NUMBERTEXT , теперь каждый может быстро и точно переводить числа в текстовое представление прописью прямо в Google Таблицах. Я горжусь тем, что мой проект помогает людям экономить время и избегать ошибок, и буду рад видеть, как NUMBERTEXT продолжает расти и развиваться вместе с его пользователями.