Построение полных парадигм слов русского языка на базе грамматического словаря

[2020] ХОРОШАЯ НОВОСТЬ: Все существующие файлы (программы и результаты) перенесены на github по адресу: https://github.com/jurta/nlp-rus-zaliz Главный результат в двух YAML-файлах с полной информацией и формами словоизменения: zaliz_1.yml и zaliz_2.yml.

Я очень извиняюсь, что в течение предыдущих лет не мог найти достаточно времени, чтобы продолжать проверять словарь и исправлять найденные неточности. Это работа без конца! Лучше было бы не развивать сложнейшую программу для генерирования словоформ по индексам, а наоборот: из известных и проверенных словоформ (составленных вручную, как в Викисловарe) при помощи кластерного анализа и других методов машинного обучения группировать похожие словоформы в отдельные классы и присваивать им соответствующий индекс. Это было бы намного проще! Поэтому всем советую помогать наполнять Викисловарь: уточнять существующие словоформы и добавлять новые слова. Это перспективное направление, чтобы получить наиболее полный, точный и всем доступный словарь.


Цель проекта

Целью проекта является построение полных парадигм слов русского языка, данных в словарной части книги "Зализняк А. А. Грамматический словарь русского языка: Словоизменение - 3-е изд. - М.: Рус.яз., 1987.", в соответствии с правилами словоизменения, описанными в части "Грамматические сведения" того же словаря.

Исходные данные

Исходный материал для программы взят с сайта С. А. Старостина. Словарь доступен для скачивания в двух форматах: в текстовом формате (файл dicts.EXE) и в формате DBF/VAR (файл ZALIZNIA.EXE). Исходные данные в обоих форматах соответствуют словарной части словаря А. А. Зализняка. Но так как данные в текстовом формате содержат меньше ошибок, то они и используются в данном проекте.

Исправление ошибок в исходных текстах словаря

Исходные тексты содержат следующие типы ошибок:

  • опечатки в бумажной версии словаря (печатном издании);
  • опечатки в электронной версии словаря;

Преобразование fuzzy исходных данных в набор атрибутов

convert zaliz database files from original fuzzy format to more parsable.

Условные знаки

c0019.gif c0020.gif
Наименование в бумажной версии в электронной версии имя поля в файле ADB
заглавное слово первое слово статьи первое слово статьи с
ударение заглавного слова прямые или обратные штрихи над ударной буквой числа за заглавным словом, разделённые запятыми или точками у
часть речи в основном буквенном символе (явно или неявно) первое слово за ударением (явно или неявно) т, т2
существительные группы pluralia tantum "мн." в основном буквенном символе "мн." в основном буквенном символе мн
род существительных "м", "ж" или "с" в основном буквенном символе существительных "м", "ж" или "с" в основном буквенном символе существительных р, рм
одушевленность существительных "о" в основном буквенном символе существительных "о" в основном буквенном символе существительных о
вид глаголов "св" или "нсв" в основном буквенном символе глаголов "св" или "нсв" в основном буквенном символе глаголов гв
переходность или непереходность глаголов "нп" в основном буквенном символе глаголов "нп" в основном буквенном символе глаголов гп
многократные глаголы "многокр." в основном буквенном символе глаголов "многокр." в основном буквенном символе глаголов гмн
безличные глаголы "безл." в основном буквенном символе глаголов "безл." в основном буквенном символе глаголов гбл
номер типа склонения или спряжения число от 0 до 16 число от 0 до 16 и
схема ударения латинская буква от a до f (без штрихов или со штрихами) или пара таких букв, записанных через косую черту латинская или русская буква (без штрихов или со штрихами) или пара таких букв, записанных через косую черту у1, у2
подтип склонения или спряжения, отличающийся от основного типа чередованием беглой гласной с нулем надстрочная звёздочка (*) при цифре звёздочка (*) при цифре ч
подтип склонения или спряжения, отличающийся от основного типа определенными чередованиями надстрочный кружочек (о) при цифре две звёздочки (**) при цифре ч2
указание, позволяющее правильно образовать основу настоящего времени глаголов русская буква или буквенная последовательность (между черточками, в скобках) русская буква или буквенная последовательность (между черточками, в скобках) ч3
слово имеет чередование ё/е ё Ё чё
слово имеет чередование о/е о о чо
страдательное причастие глаголов текст "_прич. страд._" и буквенная последовательность (между черточками, в скобках) текст "_прич. страд._" и буквенная последовательность (между черточками, в скобках) гпс
номер характерного отклонения от стандартного склонения/спряжения цифра в кружочке от 1 до 9 цифра в кавычках от "1" до "9" ос, осф
предположительны сведения об образовании мн. числа существительных или краткой формы мужского рода прилагательных - (минус) - (минус) фп
затруднительно образование кратких форм прилагательных или страдательного причастия прош. времени глаголов X ! фз
нет краткой формы мужского рода прилагательных и страдательного причастия прош. времени глаголов [X] ? фн, фз
нет сравнительной степени прилагательных ~ ~ фн
наличие у существительных 2-го родительного падежа Р2 Р2 р2
наличие у существительных 2-го предложного падежа П2, П2(в), П2(во), П2(на) П2, П2(в), П2(во), П2(на) п2, п2ф
отсылка к соответствующему параграфу раздела "Дополнительные особенности в склонении/спряжении" знак параграфа и число от 1 до 18 # и число от 1 до 18 до
указание значения в круглых скобках курсивом в круглых скобках со знаком подчёркования з, з2
факультативная часть индекса; сведения о вариантах слова [ ] [ ] фк, з3
морфологически нерегулярные формы треугольник @ искл
особые формы, выступающие во фразеологизмах ромб % фр
сведения о соответствующем глаголе противоположного вида заштрихованный круг $ гпр
тип образования соответствующего глагола несовершенного вида римская цифра I, II или III римская цифра I, II или III гпр
слово употребляется только в приводимых сочетаниях : : слсч
склоняются обе части существительного текст "_склоняются обе части_" текст "_склоняются обе части_" с2ч
варианты наряду с .... параллельно // // вар

Список свойств и значений

Поле Имя Возможные значения
заглавное слово с строка символов русского алфавита и дефиса
ударение заглавного слова у положение ударного гласного; после точки перечисляются положения дополнительных ударений; после запятой перечисляются положения букв ё, если вместо ё в заглавном слове используется е
часть речи т с - существительное
п - прилагательное
мс - местоимение-существительное
мс-п - местоименное-прилагательное
г - глагол
н - наречие
числ - числительное
числ-п - счётное прилагательное
вводн - вводное слово
межд - межометие
предик - предикатив
предл - предлог
союз - союз
сравн - сравнительная степень
част - частица
тип склонения т2 п - адъективный
мс - местоименный
мс-п - местоименный
ч - числительных
существительные группы pluralia tantum мн от - форма мн.числа от существительного, употребляющегося также и в ед.числе
род существительных р м - мужской
ж - женский
с - средний
мж - мужской и женский
мс - мужской и средний
жс - женский и средний
см - средний и мужской
сж - средний и женский
о - общий
род морфологический рм ж - женский
с - средний
одушевлённость существительных о н - неодушевленное
о - одушевленное
но - неодушевленное и одушевленное
номер типа склонения или спряжения и число от 0 до 16
основная схема ударения у1 a, a1, b, b1, c, c1, d, d1, e, f, f1, f2, где 1 обозначает один штрих, а 2 - два штриха
дополнительная схема ударения у2 b, b1, c, c1, c2, где 1 обозначает один штрих, а 2 - два штриха
2-й родительный падеж р2 -
2-й предложный падеж п2 в, во, на
2-й предложный падеж факультативный п2ф в, на
склоняются обе части существительного с2ч
чередование беглой гласной с нулем ч -
чередование ё/е чё -
чередование о/е чо -
определенные чередования ч2 -
основа настоящего времени глаголов ч3 б, с, т, д, г, ст, к, им, щ, м, н
вид глаголов гв нсв - несовершенный
св - совершенный
св-нсв - двувидовой
переходность или непереходность глаголов гп нп - непереходный
п - переходный
многократные глаголы гмн -
безличные глаголы гбл -
глагол противоположного вида гпр
суффикс страдательного причастие глаголов гпс жд
отклонения от стандартного склонения ос 1, 2, 3, 4, 6, 7, 8, 9, 12, 47, 56
факультативные отклонения от стандартного склонения осф 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 56
дополнительные особенности в склонении/спряжении до число от 1 до 18
исключения искл внутренняя структура данных для исключений (см.ниже)
форма затруднительна фз регулярное выражение для кода склонения/спряжения (см.ниже)
форма предположительна фп регулярное выражение для кода склонения/спряжения (см.ниже)
формы нет фн регулярное выражение для кода склонения/спряжения (см.ниже)
факультативная часть индекса фк
особые формы, выступающие во фразеологизмах фр
слово употребляется только в приводимых сочетаниях слсч
указание значения з
указание значения з2
сведения о вариантах слова з3
варианты вар число от 1 до 3

Коды склонений/спряжений


Часть речи 1-й символ 2-й символ 3-й символ 4-й символ
с Падеж:
и - именительный
р - родительный
д - дательный
в - винительный
т - творительный
п - предложный
Число:
е - единственное
м - множественное
п п - полная форма
к - краткая форма
с - сравнительная степень
Падеж:
и - именительный
р - родительный
д - дательный
в - винительный
т - творительный
п - предложный
Число:
е - единственное
м - множественное
Род (только в единственном числе):
м - мужской
ж - женский
с - средний
мс Падеж:
и - именительный
р - родительный
д - дательный
в - винительный
т - творительный
п - предложный
мс-п Падеж:
и - именительный
р - родительный
д - дательный
в - винительный
т - творительный
п - предложный
Число:
е - единственное
м - множественное
Род (только в единственном числе):
м - мужской
ж - женский
с - средний
Одушевлённость (только в винительном падеже):
н - неодушевленное
о - одушевленное
числ Падеж:
и - именительный
р - родительный
д - дательный
в - винительный
т - творительный
п - предложный
Одушевлённость (только в винительном падеже):
н - неодушевленное
о - одушевленное
г и - инфинитив
п - прошедшее время
н - настоящее время
б - будущее время
! - повелительное наклонение
д - деепричастие
ч - причастие
Число (в прошедшем времени):
е - единственное
м - множественное

Лицо (в настоящем и будущем времени и повелительном наклонении):
1 - первое
2 - второе
3 - третье

Время (в деепричастии и причастии):
п - прошедшее время
н - настоящее время
Род (в прошедшем времени):
м - мужской
ж - женский
с - средний

Число (в настоящем и будущем времени и повелительном наклонении):
е - единственное
м - множественное

Залог (в деепричастии и причастии):
д - действительный
с - страдательный
В деепричастии и причастии после минуса все формы прилагателного

Коды в таблице стандартных окончаний

1-й символ 2-й символ 3-й символ 4-й символ 5-й символ
Склонение:
а - адъективное
к - краткие формы адъективного
м - местоименное
с - субстантивное
Род:
м - мужской
ж - женский
с - средний
Тип окончания:
1 - первый
2 - второй
8 - восьмой
Одушевлённость:
н - неодушевленное
о - одушевленное
Ударность:
б - безударное
у - ударное

Поля хеша полной информации

Имя Значение
тс тип спряжения
уо ударение основное
уд ударения дополнительные

Построение полных парадигм

Реализация правил словоизменения русского языка, описанных в книге: Образы страниц "Грамматические сведения" словаря А. А. Зализняка (стр. 3-142) построение всех парадигм и кодирование (представление) их в компактном виде RU::Morfo::Zaliz::Inflect - Russian inflection from dictionary of A.A.Zaliznyak

Результаты (статистика)

Из 96000 лемм получено 5300000 уникальных словоформ.

Формат файлов с полными парадигмами

zaliz2.adb - все слова и ссылки на парадигмы

Пример:
с:автомобиль б:9 ио:29 иу:23 р:м т:с у:8

Типы полей: с - слово
б - база слова, т.е. количество первых неизменных букв слова; например, длина неизменной основы "автомобил" - 9
ио - парадигма склонения/спряжения слова, номер надо искать в файле суффиксов парадигм zaliz2.suf
ио - парадигма ударений форм слова, номер надо искать в файле ударений парадигм zaliz2.acc
р - род
т - тип (существительное, прилагательное, глагол)
у - порядковый номер ударной буквы

zaliz2.suf - файл суффиксов парадигм

Пример:
29 479 ь;я;ю;ь;ем;е;и;ей;ям;и;ями;ях

Поля:
1. Номер парадигмы (ссылка из поля "ио" файла zaliz2.adb)
2. Количество слов с такой парадигмой
3. Окончания данной парадигмы, разделенные точкой с запятой (по 6 падежей для ед.ч. и мн.ч.)

zaliz2.acc - файл ударений парадигм

Пример:
23 2129 8;8;8;8;8;8;8;8;8;8;8;8

Поля:
1. Номер парадигмы ударений (ссылка из поля "иу" файла zaliz2.adb)
2. Количество слов с такими ударениями парадигмы
3. Места ударения в каждой парадигме, разделенные точкой с запятой (по 6 падежей для ед.ч. и мн.ч.)

Скачать

Исходный файл с исправлениями zaliz.txt
Распарсенный файл с атрибутами zaliz.adb
Исходный код программы Lingua-RU-Zaliz-Inflect.pm Lingua-RU-Accent.pm adb2suf.pl ADB_File.pm txt2adb.pl
Файл с раскрытыми формами словоизменения zaliz.full.all_1 zaliz.full.all_2
Главный результат: YAML-файлы с полной информацией и формами словоизменения zaliz_1.yml zaliz_2.yml

Инструкции по установке и использованию программы находятся в файле README внутри архива программ.

Комментарии

Да, чудесно, все разложено по

Да, чудесно, все разложено по своим колонкам в базе данных словаря. Но существует одна досадная недоработка - в файле суффиксов нет названий морфологических форм образуемых слов. И ещё досадно, что файлы не упакованы. А ещё неплохо бы узнать, какой программой открыть базу типа adb? Гораздо полезнее было бы скачать базы в формате csv - более употребительный формат. Тогда мне не пришлось бы тратить время на конвертацию и проставлять заголовки колонок самостоятельно.

Спасибо за замечания. Сейчас

Спасибо за замечания. Сейчас займусь улучшениями. adb - это почти csv, но лучше действительно сделать в csv.

Инструкции по установке и

Инструкции по установке и использованию программы находятся в файле README внутри архива программ.
---------

А где скачать саму программу???

Программу скоро выложу на эту

Программу скоро выложу на эту страницу.

Когда скоро? Уже 1014 год.

Когда скоро? Уже 1014 год.

Через 1000 лет :) А на самом

Через 1000 лет :) А на самом деле, программу я уже выложил, но, может быть, это не то, что вам нужно.

Вы выложили

Вы выложили Lingua-RU-Zaliz-Inflect.pm. Но нельзя пользоваться потому что Lingua-RU-Accent.pm отсутствует.

Спасибо, что заметили

Спасибо, что заметили отсутствие Lingua-RU-Zaliz-Inflect.pm. Сейчас я выложил и этот модуль тоже.

Работа - чумовая! Спасибо!

Работа - чумовая! Спасибо! Вот только README я так и ненашел. может просто плохо глядел?

Не могла попасть на линк,

Не могла попасть на линк, описанный здесь:
Построение полных парадигм
Реализация правил словоизменения русского языка, описанных в книге: Образы страниц "Грамматические сведения" словаря А. А. Зализняка (стр. 3-142) построение всех парадигм и кодирование (представление) их в компактном виде RU::Morfo::Zaliz::Inflect - Russian inflection from dictionary of A.A.Zaliznyak

Большое спасибо за

Большое спасибо за комментарий. Этот линк изменился, но теперь я поправил на правильный.

Привет, Юрий! Для слов

Привет, Юрий!
Для слов (борода, голова) подправил шаблон ударения № 491, заменив в нем 6;6;6;4;6,6;6;4;4;6;4;6;6 на 6;6;6;2;6,6;6;2;4;6;2;6;6.

Спасибо за найденную

Спасибо за найденную ошибку! Эта ошибка возникла из-за опечатки в программе склонения. Сейчас я исправил, и программа выдаёт бОроды вместо борОды и гОловы вместо голОвы, но в результате также изменились формы склонения других слов: бОрозды вместо борОзды, жЕлезы вместо желЁзы, пОлосы вместо полОсы, прОстыни вместо простЫни, скОвороды вместо сковорОды, слОбоды вместо слобОды, стОроны вместо сторОны. Кажется, все эти формы склонения правильнее, чем раньше. Сейчас я это выясняю, и если правильность подтвердится, то залью новые исправленные версии файлов.

Юрий, привет! Еще нашел пару

Юрий, привет!
Еще нашел пару слов (рога, щи, колдуны, пимы, стихи, глаза, кирза).

Всем привет! В слове шкипер

Всем привет!
В слове шкипер ошибки в ударении.

Павел, спасибо за найденные

Павел, спасибо за найденные ошибки! В слове шкипер ударение поменяю на первый слог, а потом выложу исправленные файлы. А вот в словах рога, щи, колдуны, пимы, стихи, глаза, кирза - непонятно, где ошибка. Вроде бы всё правильно.

Привет, Юрий! Колдун - одуш.

Привет, Юрий!
Колдун - одуш. сущ., поэтому в р.п. ед. и мн.ч. будет колдуна и колдунов.
У слова щи нет ед.ч., при этом даже при искусственном склонении его форма в им. и в.п. ед.ч. не может совпадать с названием звука "щ".

Что касается слов - пимы, стихи, глаза, кирза, то прошу принять мои извинения. Ошибка в том, что при написании php-скрипта, который провел с базой ряд тестов и "отловил" эти слова, я исходил из того, что в начальной позиции позиции шаблона склонения (и.п ед.ч.) не могут находиться варианты слова, разделенные делиметором. Как оказалось, это не так.

Привет, Павел! Колдуны -

Привет, Павел!
Колдуны - неодушевленные, потому что в комментарии к этому слову в поле "замечения (з)" указано его значение "пирожки". Колдуны - это такие пельмени, драники или пирожки. Здесь написано подробнее - https://ru.wikipedia.org/wiki/Колдуны

Есть отдельная строка для одушевленного существительного в ед.ч. "колдун". Там тоже всё правильно.

В слове "щи" стоит минус в конце слов, которые не имеют форм склонения. Их нужно просто игнорировать. Они существуют только для теоретического интереса, чтобы узнать, как выглядели бы эти формы склонения, если бы существовали по правилам русского языка. Например, у слова "щи" в ед.ч. им.п. должна была быть буква "щ", поэтому этой формы и не существует.

Сердечное спасибо

Сердечное спасибо самоотверженным создателям - синтезаторам совершенных словарей!

А что значат ? и * после слов

А что значат ? и * после слов в файле результатов?

Звездочка означает

Звездочка означает "затруднительно образование форм прилагательных", вопросительный знак означает "предположительны сведения об образовании формы прилагательных", a дефис после слова означает "нет сравнительной степени прилагательных".

Здравствуйте. Работа

Здравствуйте.
Работа впечатляет!!!.
Подскажите пож. какая структура подается на вход wi2paradigm()? Как я понял это основная процедура для получения парадигм. (я к сожалению в Perl "не очень...").

Спасибо за комментарий!

Спасибо за комментарий! Потерялась ссылка на недостающие программы, но сейчас я восстановил: теперь можете скачать дополнительно ADB_File.pm и adb2suf.pl, которые вызывают wi2paradigm().

Здравствуйте. Скажите

Здравствуйте.
Скажите пожалуйста чем отличаются zaliz.adb и zaliz2.adb?
zaliz2.adb это "исходный Зализняк"?

Исходный Зализняк - это

Исходный Зализняк - это скорее zaliz.adb (хотя я назвал бы его промежуточным), а конечный результат в zaliz2.adb.

Что означают точка, запятая,

Что означают точка, запятая, и дефис в файле zaliz2.acc?

Точка с запятой разделяет

Точка с запятой разделяет словоформы, запятая разделяет разные варианты внутри одной словоформы, точка показывает дополнительное ударение, дефис означает затруднительность образования формы.

Здравствуйте. У вас,

Здравствуйте.
У вас, наверное, единственная открытая реализация алгоритмов построения парадигмы. Причём результат довольно качественный — намного лучше, чем, к примеру, вот это: http://www.speakrus.ru/dict/index.htm#paradigma
Однако, есть и ошибки, например, «быть», «паремия», «почесать». На мой взгляд, большинство ошибок можно исправить, если перейти на другие исходные данные, а именно на словарь с сайта http://odict.ru Он также открытый, и обозначения почти такие же, как у вас. Ещё лучше было бы, если бы вы выложили файл txt2adb.pl (как я понял, именно этот файл переводит данные в формат adb), чтобы можно было самому обновить файл adb при обновлении словаря.

Верно, это самая качественная

Верно, это самая качественная открытая реализация. Единственная проблема в том, что катастрофически не хватает времени привести в порядок и выложить все недавние обновления, в которых исправлены ошибки и добавлено много новых слов. Сейчас я выложил txt2adb.pl. И хорошие новости в том, что скоро будет время выложить полностью все материалы.

Вы не могли бы пока выложить

Вы не могли бы пока выложить ещё zaliz.txt и z.x.subpatch? Без них будет трудно понимать как txt2adb.pl работает.

Юрий, огромное вам спасибо за

Юрий, огромное вам спасибо за проделанную работу! Присоединюсь к просьбе опубликовать обновления, если у вас будет время и возможность.

Парадигма слова "заяц"

Парадигма слова "заяц" неправильная (по крайней мере в файле zaliz.full.all). Там заяц -> заяца, заяцу и т.д.; а надо заяц -> зайца, зайцу и т.д.

Большое спасибо за найденную

Большое спасибо за найденную ошибку, в следующей версии будет исправлено. Проблема в том, что исходная форма этого слова нерегулярна (в словаре всего 20 таких нерегулярных слов). PS: кстати, в несостоявшейся реформе 60-х годов слово "заяц" заменялось на "заец" :)

Такие ошибки есть ещё (напр.,

Такие ошибки есть ещё (напр., зельц;зльца;зльцу;зльца;зльцем;зльце;зльцы;зльцев;зльцам;зльцев;зльцами;зльцах - во всех словоформах исчезла вторая буква - "е"). Но это ещё полбеды, довольно много смысловых ошибок. Как-то, относительные и притяжательные прилагательные не имеют (и не должны иметь, если это словарь) сокращённых форм и сравнительной степени (есть несколько слов-исключений, но их по пальцам перечесть).
У глаголов, причастия прошедшего и настоящего времени действительного залога не имеют кратких форм; а глаголы на конце с частицей -ся/-сь вообще не имеют причастий страдательного залога т.к. получаются абсурдные словоформы.
В общем, я когда закончу свой проект, выложу здесь все ошибки и замечания.

По поводу odict.ru, открытость добавления каждым и при отсутствии грамотной проверки человеком, может играть злую шутку (напр., там добавлен глагол "клеять", хотя правильно "клеить", буква "я" появляется уже в словоформах). Да, в odict добавлено много новых слов (~5000 инфинитивов), но это большей частью американизмы и разговорные сленги.
Словарь Зализняка как-никак, но составлялся людьми "немного понимающими" в этом деле. Каждое слово и словоформа выверялись. В общем, когда будете выбирать словарь, сначала определитесь какой вам нужен, который меньше подчёркивает или более грамотно составленный.

ps Да, "заец" помню, любил в детстве смотреть "Ну, погоди!"

Очень хороший и полезный

Очень хороший и полезный проект, вы его надеюсь не забросили?

Нет, проект не заброшен!

Нет, проект не заброшен! Сейчас проект переезжает на GitLab. Скоро будет обновление.

Очень хорошая новость, можно

Очень хорошая новость, можно будет вносить пулл реквесты. И если возможно, вынесите все с вашей страницы в отдельную документашку, особенно отличия в знаках печатной и электронной версии.