Русская проверка орфографии в браузере — вещь почти невидимая. Пока она работает нормально, о ней не думаешь. Но стоит словарю начать подчёркивать обычные современные слова — и он сразу превращается из полезного инструмента в раздражитель.
Так случилось и с русским словарём для 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 для всех пользователей.
K0Jlya9
днсы
нейросетей
флешку
гигабит (и наверное мегабит итп)
бэкап
патчей
майнеры
Беларуси ??
апдейты
фич
сисадмина
В хроме часть из этих слов в словаре есть, так что наверное стоит его взять и распотрошить. Некоторые слова есть в другой словоформе, флешка например.
Goudron Автор
Спасибо. Добавляю в список слов на проработку.
K0Jlya9
Словарь хрома можно скачать с гитхаба
git clone https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries
там есть отдельный файл с новыми словами
ru_RU.dic_delta