Русская проверка орфографии в браузере — вещь почти невидимая. Пока она работает нормально, о ней не думаешь. Но стоит словарю начать подчёркивать обычные современные слова — и он сразу превращается из полезного инструмента в раздражитель.
Так случилось и с русским словарём для Firefox и Thunderbird. Текущий словарь много лет выполнял свою работу, но постепенно начал отставать от живого языка: технической лексики, интерфейсных слов, современной терминологии, слов из документации, ИБ, веба, разработки и повседневной цифровой среды.

История проекта началась с бага 2040224 в Bugzilla: Evaluate new Russian dictionary. В нём обсуждался вопрос, можно ли заменить старый русский словарь Mozilla на более новый словарь Александра Клюквина.
На первый взгляд задача звучала просто: взять словарь поновее, положить его в Firefox/Thunderbird, закрыть баг. На практике быстро стало понятно, что так делать нельзя.
Орфографический словарь — это не просто список слов.
Что было взято за основу
За основу был взят текущий Mozilla-совместимый русский Hunspell-словарь, происходящий из линии словаря Александра Лебедева.
Это важный момент: я не стал делать словарь «с нуля» и не стал механически склеивать все найденные русские словари. Базовый словарь уже имеет понятную историю использования в Mozilla-продуктах, совместимый лицензионный контур и Hunspell-структуру:
.dic— словарные записи;.aff— правила словоизменения.
На момент начала работы базовый словарь содержал 146 433 записи. Итоговый словарь в текущем пакете содержит 179 956 записей.
Но большая часть работы была не в том, чтобы «добавить 33 тысячи строк». Основная работа была в том, чтобы понять:
какие слова действительно нужны;
какие слова уже покрываются существующей морфологией;
какие слова надо добавлять как базовые леммы с Hunspell-флагами;
какие слова лучше добавлять только как exact-only (точные) формы;
какие слова лучше не добавлять вообще;
какие кандидаты являются опечатками, мусором корпуса, OCR-ошибками, фрагментами кода, никами или слишком рискованными формами.
Кроме Hunspell-версии для Firefox и Thunderbird, был также собран CSpell-пакет. Для CSpell пришлось отдельно развернуть Hunspell-словарь в список слов в кодировке UTF-8: итоговый CSpell-словарь содержит около 1,79 млн словоформ.
Публичный репозиторий проекта: https://github.com/Goudron/ru-spelling-dictionary
Почему нельзя было просто взять другой словарь
В Bugzilla в качестве одного из кандидатов обсуждался словарь Александра Клюквина. Он действительно интересен как источник для сравнения: он больше старого словаря и исторически тоже связан с русскими Hunspell-словарями.
Но его нельзя было просто взять и положить в Mozilla-словарь.
Причины две:
Лицензирование и происхождение данных.
Качество и управляемость изменений.
Для словаря, который потенциально должен попасть в Firefox и Thunderbird, недостаточно сказать: «этот файл больше, значит он лучше». Нужно понимать, откуда взяты записи, какие лицензии применяются, можно ли использовать данные в Mozilla-продуктах, что именно добавляется и не появляется ли из-за новых правил слишком широкое принятие неправильных форм.
Поэтому вместо простой замены был сделан воспроизводимый проект с инвентаризацией источников, проверкой лицензий, построением очередей кандидатов, корпусной проверкой и отдельной валидацией.
Категории источников
Источники были разделены на несколько категорий.
Категория |
Как использовалась |
|---|---|
Direct-use allowed |
можно использовать как источник кандидатов при сохранении уведомлений и после проверки |
Evidence-only |
можно использовать как сигнал, но нельзя копировать напрямую |
Coverage-only |
можно использовать для поиска пропущенных слов в реальных текстах |
Unknown / blocked |
нельзя использовать до выяснения лицензии и происхождения |
В прямой контур попали источники из Mozilla/Lebedev/LibreOffice/Debian/Ubuntu/Arch/Fedora-линии, где лицензии и происхождение позволяли работать с кандидатами.
Но и здесь была важная тонкость: LibreOffice, Debian, Ubuntu и Arch в нашем наборе оказались фактически одной словарной семьёй, а не четырьмя независимыми источниками. Поэтому нельзя было считать их четырьмя независимыми голосами «за» слово.
Другие источники использовались осторожно:
словарь Александра Клюквина;
AOT-словари;
LanguageTool;
OpenCorpora;
Wiktionary/Kaikki;
реальные текстовые корпуса.
Они были полезны для сравнения, поиска кандидатов, проверки покрытия и приоритизации, но не использовались как источник механического копирования.
Лицензия: почему MPL 2.0 и почему есть дополнительные уведомления
Итоговый словарь распространяется под Mozilla Public License 2.0.
Это естественный выбор для словаря, который должен быть пригоден для Mozilla-продуктов.
При этом в LICENSE сохранены дополнительные уведомления из предыдущей словарной линии: BSD-style notice для словаря Лебедева и уведомления из LibreOffice-family.
Это не «смешение лицензий для красоты», а нормальная юридическая гигиена. Если проект основан на предыдущем словаре или использует совместимую линию с обязательным сохранением уведомлений, эти уведомления надо сохранять.
MPL 2.0 применяется к поддерживаемому выпуску проекта, а исторические уведомления нужны для корректной атрибуции и соблюдения условий исходных материалов.
Как строился пайплайн
Главный принцип был такой: никаких механических мегасклеек.
Пайплайн выглядел примерно так:
Инвентаризация источников.
Проверка лицензий и происхождения.
Нормализация Hunspell-файлов.
Сравнение
.dicи.aff.Разделение источников на словарные семьи.
Построение universe-кандидатов.
Разметка кандидатов по политикам.
Морфологическая проверка.
Проверка
е/ё.Проверка на корпусах.
Hunspell-валидация.
Проверка на регрессии и переобобщение.
Сборка Hunspell-пакета.
Сборка Firefox/Thunderbird-дополнения.
Сборка CSpell-пакета.
Внутри проекта были отдельные очереди для разных типов кандидатов:
слова, которые можно добавить сразу;
слова, которым нужна морфология;
exact-only формы;
продуктивные словоформы, которые лучше не добавлять напрямую;
кандидаты с недостаточными доказательствами;
слова для ручной проверки;
отложенные и отклонённые кандидаты.
Отдельная большая часть работы — не добавить лишнего. Для русского языка это особенно важно: если неверно подобрать Hunspell-флаг, можно случайно разрешить не только нужное слово, но и множество странных или неправильных форм.
Что делали с морфологией
Hunspell-словарь — это не просто список слов.
Запись в .dic может содержать флаги, которые говорят Hunspell, какие формы можно строить от этой основы: падежи, числа, род, степени сравнения, глагольные формы и так далее.
Поэтому для каждого кандидата надо было решить: это самостоятельная точная форма или базовая форма с морфологической моделью?
Например, современное техническое слово может встретиться в корпусе не в именительном падеже, а в родительном или множественном числе. Но в словарь правильно добавить не эту конкретную словоформу, а базовую лемму с подходящим флагом.
И наоборот: некоторые слова лучше добавлять только exact-only, без продуктивного расширения, если модель даёт слишком много риска.
Для этого были реализованы проверки:
какие флаги уже используются у похожих слов;
какие формы Hunspell начинает принимать после добавления;
не появляются ли нежелательные регрессии;
покрывается ли слово уже существующей морфологией;
не является ли кандидат просто продуктивной словоформой от уже существующей основы;
не создаёт ли добавление слишком широкое принятие сомнительных форм.
В результате часть слов добавлялась с морфологией, часть — как точные формы, часть — отклонялась или откладывалась.
Что делали с буквой ё
Отдельная боль русского spell-checking — буква ё.
С одной стороны, правильная орфография требует различать е и ё. С другой — в реальных текстах ё часто заменяют на е, и словарь не должен массово подчёркивать обычные тексты как ошибочные только потому, что пользователь пишет «е» вместо «ё».
Поэтому в проекте была отдельная политика е/ё.
Мы проверяли случаи, когда слово с ё уже принимается словарём, но соответствующий вариант с е не принимается. Для таких случаев добавлялись недостающие пары, если форма не была уже покрыта другой записью.
В версии 1.0.1 дополнения была отдельно исправлена проблема отсутствующих пар ё/е: слова, принимаемые с ё, теперь также принимаются с е там, где такая форма раньше не покрывалась словарём.
Какие корпуса использовались
Чтобы не работать «на глаз», словарь проверялся на реальных текстах.
Использовались четыре основных корпуса:
Корпус |
Зачем был нужен |
|---|---|
Mozilla L10N |
браузерная, почтовая и интерфейсная терминология |
Habr |
современная техническая лексика |
массовый новостной русский язык |
|
OpenCorpora |
морфологическая и общеязыковая проверка |
В полном корпусном прогоне использовались:
Mozilla L10N: 585 документов, около 3 млн символов;
Lenta.Ru: около 801 тыс. документов, около 2 млрд символов;
Habr: около 299 тыс. документов, около 3,9 млрд символов;
OpenCorpora: около 110 тыс. документов, около 11,6 млн символов.
Важно: корпуса не использовались по принципу «возьмём все слова и добавим». Они использовались для обнаружения проблем, приоритизации кандидатов и проверки покрытия.
Например, если слово часто встречается на Хабре, это ещё не значит, что его автоматически надо добавить. Оно могло быть:
частью кода;
ником;
английским словом;
обрезком URL;
опечаткой;
мусором парсинга;
редкой фамилией;
формой, которую лучше покрыть через другую лемму.
Корпус помогает увидеть, где словарь реально мешает пользователю, но решение о добавлении всё равно должно быть словарным, морфологическим и лицензионно безопасным.
На промежуточной проверке по real-text samples новый словарь уменьшил число неизвестных токенов примерно на 10,37% в сумме по корпусам, а на Mozilla L10N — примерно на 43,49%. При этом в этом прогоне не было регрессий: новый словарь не перестал принимать слова, которые принимал базовый Mozilla-словарь.
Что добавлялось
Основной фокус был на современной и практически полезной лексике:
технические термины;
браузерная терминология;
слова из интерфейсов;
термины безопасности и приватности;
слова из документации;
современные заимствования;
общеупотребительные слова, отсутствовавшие в старом словаре;
корректные производные формы, если они подтверждались морфологией и корпусами.
Примеры слов, важных для современного технического текста:
антифишинговый браузерный двухфакторный каршеринг кибербезопасность коворкинг маркетплейс мессенджер подкаст репозиторий скриншот стрим токен трекер фрейм хеш
Это не значит, что словарь стал «айтишным». Скорее, он перестал игнорировать тот русский язык, которым сегодня пишут пользователи, документация, интерфейсы и технические СМИ.
Дополнение для Firefox/Thunderbird
Словарь уже опубликован как дополнение для Firefox:
Это современный русский словарь проверки орфографии для Firefox и Thunderbird. На AMO сейчас опубликована версия 1.0.1. Дополнение содержит только Hunspell-словарь и manifest: без скриптов, разрешений, host permissions, телеметрии и сетевого доступа.
Основные свойства текущего пакета:
версия: 1.0.1;
лицензия: Mozilla Public License 2.0;
формат: Hunspell
.aff/.dic;целевые продукты: Firefox и Thunderbird;
назначение: проверка русской орфографии.
CSpell-версия
Кроме Hunspell-пакета, подготовлена версия для CSpell.
Это полезно для разработчиков, документации, CI и репозиториев, где проверка орфографии запускается не через Firefox/Thunderbird, а через cspell.
В репозитории есть готовая папка:
cspell/ README.md cspell.config.yaml cspell-ext.json dictionaries/ manifest.json ru_RU.txt.gz smoke/ positive.txt negative.txt
Подключение в проекте выглядит примерно так:
import: - ./path/to/ru-spelling-dictionary/cspell/cspell.config.yaml
После этого можно запускать:
cspell "**/*"
CSpell-словарь собран из того же Hunspell-источника, но представлен как список слов в кодировке UTF-8, потому что CSpell работает не с Hunspell .aff/.dic напрямую, а с собственным форматом словарей.
Как быстро протестировать словарь
Я очень прошу поставить словарь и проверить его на своих текстах.
Самый простой способ:
Установить дополнение Russian Spelling Dictionary из AMO.
Открыть любое многострочное текстовое поле.
Щёлкнуть внутри поля правой кнопкой мыши.
Включить проверку орфографии, если она выключена.
В меню Languages / Языки выбрать русский словарь.
Вставить свой текст и посмотреть, что подчёркивается.
Чтобы быстро открыть тестовое поле, можно вставить в адресную строку Firefox вот это:
data:text/html;charset=utf-8,%3Ctextarea%20autofocus%20spellcheck%3D%22true%22%20style%3D%22width%3A95vw%3Bheight%3A90vh%3Bfont%3A20px%20sans-serif%3B%22%3E%3C%2Ftextarea%3E
Откроется пустая страница с большим текстовым полем. Вставьте туда свой текст, включите русский словарь и посмотрите, что подчёркивается.

Какая обратная связь нужна
Очень нужны реальные примеры.
Пожалуйста, пишите, если:
словарь подчёркивает корректное современное слово;
словарь принимает явно неправильную форму;
не хватает ходового слова;
плохо работают формы с
е/ё;не хватает технических, браузерных, ИБ, веб- или интерфейсных терминов;
слово принимается только в одной форме, но не принимается в другой нормальной форме;
подсказки Hunspell выглядят странно.
Лучше всего присылать не просто одно слово, а короткий контекст:
Слово: антиспамовый Контекст: антиспамовый фильтр Что сейчас: подчёркивается Что ожидается: должно приниматься Почему слово стоит добавить: распространённый термин в почтовых клиентах и ИБ
Особенно интересны современные и ходовые слова: то, что реально встречается в текстах, документации, интерфейсах, технических статьях и обычной переписке.
Что дальше
Сейчас словарь вынесен в отдельное дополнение, чтобы его можно было быстро установить и протестировать без ожидания релизного цикла Firefox и Thunderbird.
Следующий шаг — собрать обратную связь, исправить найденные проблемы и подготовить обновлённый словарь для включения в основной код Mozilla-продуктов. Цель — чтобы новый русский словарь в итоге использовался в Firefox и Thunderbird по умолчанию.
Также я хочу посмотреть возможность передать улучшения в LibreOffice, потому что у русской проверки орфографии в разных open source-продуктах общие исторические корни и схожие проблемы.
Если вы пишете по-русски в Firefox, Thunderbird, CSpell, документации, GitHub/GitLab, Markdown, почте или просто в браузерных текстовых полях — пожалуйста, установите словарь и попробуйте его на своих текстах.
Чем больше реальных примеров мы соберём сейчас, тем лучше будет следующая версия русского spell-checking для всех пользователей.
Комментарии (14)

dartraiden
05.06.2026 10:08Ещё бы они пересмотрели свою позицию по багу 1073840...
Когда Firefox видит в заголовке страницы код языка, например,
<html lang="en", то он напрочь игнорирует пользовательскую настройку "использовать несколько установленных словарей одновременно" и по умолчанию использует на этой странице лишь один словарь. Да, можно вручную включить для этой страницы дополнительные словари, но делать это на каждом сайте напрягает. Белых людей, у которых в системе одна раскладка (английская) это не колышет, а вот индейцам жизнь портит, ведь существуют сайты, имеющие интерфейс на английском, но при этом писать там приходится по-русски (допустим, Гитхаб).
Goudron Автор
05.06.2026 10:08Интересная тема, спасибо за коммент. Попробую провентилировать, как будет время. Тоже вопрос, касающийся локализации в смысле i18n, а не l10n :)

K0Jlya9
05.06.2026 10:08Написал скрипт который читает хабр и проверяет по словарю тексты статей. Пишет в логи что нашел. И потом можно просто запустить opencode и он будет идти по логам и предлагать варианты.
Оказалось что слов отсутствует очень много, например для чудный не прописана превосходная степень. Еще много опечаток и сомнительных жаргонизмов но опенкод может их сам пропускать.



Всегда было интересно кто работает над словарями и почему в них нет даже таких популярных слов как юзер или недоработаны старые слова типа чудный.

Goudron Автор
05.06.2026 10:08Над такими открытыми словарями обычно работают ИТ-энтузиасты. Например, я до бага, упоминаемого в статье, этим не занимался, но вот занялся, ибо есть потребность и мои руки. У меня тоже есть такие скрипты, которые отбирают кандидатов. Корпус Хабра использовался. Вопрос в том, стоит ли добавлять всё, что можно добавить. Я над этим буду ещё думать. Словарь не должен быть огромным. Из-за частотности что-то может отсекаться. Если это обычные слова, часто применяемые, добавлять можно. Спасибо за коммент, буду думать, что можно будет из ваших наблюдений вытянуть :)

runaway
05.06.2026 10:08в реальных текстах
ёчасто заменяют нае, и словарь не должен массово подчёркивать обычные тексты как ошибочные только потому, что пользователь пишет «е» вместо «ё».Ну и зря. Тот случай, когда можно попинать ленивые жопы пользоваться всем тем богатством, который даёт язык.А то так и получится, что "согласно списка" пьём "горячее кофе".

Goudron Автор
05.06.2026 10:08Я сам ёфикатор. Но часто это связано с комплайенсом. Например, если вы пишете техническую документацию, новости или книгу, которая будет издана, корректоры/редакторы будут у вас ё убирать, если её отсутствие не может привести к неоднозначности.
K0Jlya9
днсы
нейросетей
флешку
гигабит (и наверное мегабит итп)
бэкап
патчей
майнеры
Беларуси ??
апдейты
фич
сисадмина
В хроме часть из этих слов в словаре есть, так что наверное стоит его взять и распотрошить. Некоторые слова есть в другой словоформе, флешка например.
Goudron Автор
Спасибо. Добавляю в список слов на проработку.
K0Jlya9
Словарь хрома можно скачать с гитхаба
git clone https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries
там есть отдельный файл с новыми словами
ru_RU.dic_delta
Rakard
Может не стоит добавлять все подряд? Если с флешкой, нейросетью и т.п. все понятно, то например с бэкапом (резервная копия), патчем (изменение) и апдейтом (обновление) мне кажется не все так однозначно.
Goudron Автор
Всё подряд, может быть, и не стоит, но устоявшийся технический жаргон считать за ошибку в современном словаре орфографии всё же не стоит, потому что он используется. В таком орфографическом словаре должно быть побольше распространённого узуса, который используется намеренно. Это не словарь нормированного языка. Скорее, словарь разговорной (прямой) письменной речи (в т.ч.). Кстати, вот выявил, что слово "узус" этот мой словарь считает ошибкой. Есть нормированный (официальный) русский язык. Но этот мой словарь не про это. Это про орфографию в ежедневном реальном использовании языка. Другая несколько функциональность (кстати, специалисты РАН на Грамоте.Ру считают, что "функционал" вместо "функциональность" в ИТ уже тоже можно не считать ошибкой) :)
Busla
А почему для "бэкапа" в русском языке есть буква "э", а для остальных заимствований – нет?
Как-то в статье этот вопрос не раскрыт: кто всё же решает, что новое слово, ещё не попавшее в академические словари, должно писаться именно так?
Goudron Автор
В статье не всё, что попало в словарь. Конкретные слова лучше проверять по факту, подчёркиваются или нет. По возможности в таких случаях включаю оба таких варианта. Но спасибо за коммент. Проведу отдельную проверку по этой теме.