Я продолжаю разбираться со словарём словоформ (морфологический словарь, spellcheck). Полтора года лежал и всё было замечательно, а тут столько всего и сразу.
Разбирательство началось с того, что в результирующем файле я не обнаружил слова «ниже», а закончилось перечитыванием документации по формату файлов hunspell и переписыванием ядра конвертера.
Словарь прирос на 4,5 Мб и ≈166000 словоформ. Можно скачивать, он определённо стал лучше, и теперь в нём есть слова «ниже» и «пониже».
- Скачать russian.diс.tar.bz2 (6 Мб)
- Скачать russian.dic.zip (6,7 Мб)
Ну и вкратце расскажу про сам формат hunspell. Рассказывать буду на примере того, как выглядит словарь, который мне пришлось разбирать, т. к. вообще-то могут быть некоторые девиации. У меня не было цели написать полный конвертер для всех языков и словарей.
Словарь hunspell состоит из двух файлов: словаря (.dic) и аффиксов, т. е. префиксов или суффиксов (.aff). В собственно словаре (.dic) содержатся слова в начальной форме и список правил для аффиксов, которые к этому слову применяются. Например:
низкий/CCCDCoТут у нас три двухбуквенных аффикса: CC, CD и Co. Дальше смотрим в файл аффиксов, чтобы понять, что все это значит. Тут я приведу только кусочек, связанный с нашим словом «низкий».
SFX CC ий ого [гкх]ий #низкий --> низкого (е.ч.м.р.р.п.)
SFX CC ий ому/Ss [гкх]ий #низкий --> низкому (е.ч.м.р.д.п.)
SFX CC ий им ий #низкий --> низким (е.ч.м.р.т.п. и мн.ч.о.р.д.п.)
SFX CC ий ом [гкх]ий #низкий --> низком (е.ч.м.р.п.п.)
SFX CC ий ая [гкхжчшщ]ий #низкий --> низкая (е.ч.ж.р.и.п.)
SFX CC ий ой [гкх]ий #низкий --> низкой (е.ч.ж.р.р.п.+д.п.+т1.п.+п.п.)
SFX CC ий ую [гкхжчшщ]ий #низкий --> низкую (е.ч.ж.р.в.п.)
SFX CC ий ою [гкх]ий #низкий --> низкою (е.ч.ж.р.т2.п.)
SFX CC ий ое [гкх]ий #низкий --> низкое (е.ч.с.р.и.п.)
SFX CC ий ие ий #низкий --> низкие (мн.ч.о.р.и.п.)
SFX CC ий их ий #низкий --> низких (мн.ч.о.р.р.п.+п.п.)
SFX CC ий ими ий #низкий --> низкми (мн.ч.о.р.т.п.)
SFX CD кий ок [^аеиоуыэюяжчшщйь]кий #низкий --> низок (кр.ф.е.ч.м.р.)
SFX CD ий а [^нраеиоуыэюя]ий #низкий --> низка (кр.ф.е.ч.ж.р.)
SFX CD ий о [^нржчшщаеиоуыэюя]ий #низкий --> низко (кр.ф.е.ч.с.р.)
SFX CD ий и ий #низкий --> низки (кр.ф.мн.ч.о.р.)
SFX Co зкий же/Sr низкий #низкий --> ниже (ср.ст)Итак, у нас есть много строчек с правилами, которые нужно применить. Блоки в правиле разделяются пробелами. Список блоков:
- SFX для суффикса и PFX для префикса.
- Имя аффикса.
- Что искать.
- На что заменять.
- Условие в виде регулярного выражения, когда можно применить это правило.
- (Опционально)
#+ комментарий
Т. е. мы просто проходимся по всем правилам, проверяем условия и заменяем одну подстроку на другую.
Иногда в четвёртом блоке может встречаться ещё названия аффиксов. Это означает, что эти аффиксы тоже можно применить. В нашем случае это:
PFX Ss 0 по- . #приставка "по-" для наречий
PFX Sr 0 по . #приставка "по"0 означает, что ничего удалять не надо, будем только добавлять.
Ликбез завершён. Возможно потом, если будет желание или потребность, добавлю поддержку других опций, которыми изобилуют файлы аффиксов для проверки других языков. Ну и буду продолжать поддерживать словарь русского языка, пока в этом есть необходимость.
UPD 22 декабря 2013: Словарь обновлён.
Прошло полтора года с момента публикации предыдущей версии словаря. Но я про него не забыл: попробуй забыть одну из самых популярных записей, если судить по Google Analytics. И периодически я поглядывал на страницу проекта hunspell-ru в надежде увидеть там обновления, а их всё не было.
Но недавно новая версия таки была выпущена. Плюс к этому я переписал старый код конвертера из Hunspell в plain text. Старый код был написан на PHP в незапамятные времена. Разве можно было пройти мимо и оставить его таким как есть, а не переписать на каком-нибудь новом модном языке, например на Dart?
Нажимаем на одну из ссылок ниже и скачиваем архив. В архиве лежит единственный текстовый файл russian.dic, в котором перечислено большое количество русских слов во всех возможных формах, по одному слову в каждой строчке. Общее количество слов — 173975, словоформ — 2376434.
- Скачать russian.diс.tar.bz2 (6 Мб)
- Скачать russian.dic.zip (6,7 Мб)
Дальше используете файл на своё усмотрение. Например, можно подключить его в качестве словаря в PhpStorm, IntelliJ IDEA или Eclipse.

Настройка PhpStorm
Знаю-знаю, писать комментарии к коду на русском языке не комильфо. Но ведь в IDE можно писать не только код. Я, например, пишу тексты для этого блога в PhpStorm (исходники блога на GitHub). Да и мало ли может быть применений! Но должен предупредить: файл словаря имеет размер 53 Мб, что не слишком благоприятно сказывается на объёме используемой IDE памяти.
Надеюсь, файл будет вам полезен. Если вы используете словарь в каких-то других целях, пожалуйста, напишите об этом в комментариях. Мне будет приятно знать, что мои усилия не пропали даром.
UPD 18 декабря 2013: Словарь обновлён.
UPD 22 декабря 2013: Словарь обновлён.
Этот пост устарел. Новая версия — тут
Обновил свой словарь для проверки русских слов в IntelliJ IDEA, PhpStorm, Eclipse и др. Должен подойти к любой программе, которая для проверки правописания использует файл со списком слов по одному в строке.
Скачать russian.diс.tar.bz2 (5,4 Мб)Скачать russian.dic.zip (6,1 Мб)
Всего в словаре 48 Мб и 2174526 словоформ, поэтому не удивляйтесь, когда IDE начнет есть больше памяти.
Исходный словарь в формате hunspell можно взять тут, скрипт для конвертирования на github.