Rules for generating syntactically and morphologically correct sentences in Russian
Правила для генерирования синтаксически и морфологически корректных предложений на русском языке. Написаны в контекстно-свободной грамматике, в формате JSGF (Java Speech Grammar Format или JSpeech Grammar Format).
-
rules_for_gen_simple_sent_without_kleene_import.gram
: правила грамматики; -
rules_for_gen_simple_sent_without_kleene_import_split.gram
: те же правила грамматики, но адаптированные для запуска в модуле для генерации JSGFTools__ .
Для генерации были необходимы слова часто с указанием их морфологической информации. Небольшая часть данных была взята из справочника русского языка Баранова М. Т. и др. [Баранов М. Т., Костяева Т. А., Прудникова А. В.; Под ред. Н. М. Шанского. Русский язык: Справ. материалы: Учеб. пособие для учащихся. 4-е изд. — М.: Просвещение, 1988. 288 с.], для получения прочих сведений использовались два набора данных: тезаурус RuWordNet и корпус «Тайга».
RuWordNet представляет собой вручную размеченные синсеты, однако только для трёх частей речи (существительных, прилагательных и глаголов), причём каждая представлена лишь начальной формой. Для получения всех грамматических форм с указанием морфологической информации слова использовался морфологический анализатор pymorphy2.
«Тайга» является большой подборкой данных, но они были размечены автоматически парсером UDPipe. Для получения большой точности в разметке этих корпусов сравнивалась морфологическая информация от UDPipe с той, которую даёт другой парсер – spaCy, и соответственно использовали только те слова, в которых разметка от обоих парсеров совпадает. Из «Тайги» были выбралы шесть под-корпусов (Lenta.ru, Интерфакс, N+1, Facebook, Vkontakte, Twitter). Из каждого корпуса брались слова, написанные только кириллицей. Под-корпуса социальных сетей также потребовали дополнительной чистки от опечаток и ругательств. Для этого использовался модуль PyEnchant со словарём от пакета LibreOffice и небольшой написанный мной с опорой на алгоритм с веб-ресурса Хабр фильтра мата.
Таким образом, после чистки корпуса социальных сетей, объединения всех корпусов «Тайги» с грамматическими парадигмами слов из тезауруса RuWordNet было получило 2 477 009 уникальных слов, которые и использовались далее в правилах.