Перефразировщик и синонимизатор

Правила перефразировки

Рассматриваемый способ уникализации текста основан на той же технологической базе, что и полнотекстовый переводчик, а именно - на правилах трансформации.

Пример перефразировки для прилагательных

Прилагательные в русском языке отличаются с одной стороны крайней регулярностью формообразования и большим количеством словоформ, с другой стороны - вариативностью некоторых форм. Это позволяет реализовывать правила перефразировки, которые будут работать на очень большом количестве прилагательных, обеспечивая сохранение семантики текста.

Рассмотрим сначала пример перехода от полной формы к краткой. Следующие перефразировки демонстрируют это правило:

Кошка такая хитрая, что спит с открытыми глазами.  -->  Кошка столь хитра, что спит с открытыми глазами.
     Коты такие ленивые, что спят целый день.  -->  Коты столь ленивы, что спят целый день.
     Кот был такой умный, что сам открывал дверцу.  -->  Кот был столь умен, что сам открывал дверцу.

Как видно, мы должны обнаружить полную форму прилагательного в контексте такой .... , что и перевести прилагательное в краткую форму.

В исходном тексте перефразировщика rus_paraphraser.sol это правило имеет такой вид:

 transformation(ПерефразСтруктуры) ТакойЧто
{
declare Прил;
if context { ПРИЛАГАТЕЛЬНОЕ:ТАКОЙ{} @mark(ПРИЛАГАТЕЛЬНОЕ:*{},Прил) ',' 'что' }
then
context
{
@lambda
{
// попробуем получить краткую форму прилагательного.
tree short = copy(Прил);
wordform_set_coord( short, КРАТКИЙ, 1 );
wordform_clear_coord( short, ПАДЕЖ );
wordform_refresh(short);

// если нашли...
if( eq( wordform_get_coord(short,КРАТКИЙ), 1 ) )
then
{
// ... то возвращаем СТОЛЬ ХИТРА, ЧТО
return tuple_create( НАРЕЧИЕ:СТОЛЬ{}, short, ctx_root(2), ctx_root(3) );
}
else
{
// у прилагательного нет краткой формы, возвращаем исходный набор словоформ контекста.
return tuple_create( ctx_root(0), ctx_root(1), ctx_root(2), ctx_root(3) );
}
}
}
}

Левая часть правила, то есть собственно описание паттерна, на котором правило срабатывает, достаточно прозрачно:

  declare Прил;
if context { ПРИЛАГАТЕЛЬНОЕ:ТАКОЙ{} @mark(ПРИЛАГАТЕЛЬНОЕ:*{},Прил) ',' 'что' }

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

Конструкция @mark(...) позволяет запомнить в объявленной ранее оператором declare переменной с именем Прил ту словоформу, которая подошла под условия. Это будет как раз то имя прилагательное, форму которого мы будем менять.

Когда движок трансформаций успешно унифицирует фрагмент текста с паттерном правила, он запускает на выполнение группу операторов в блоке then context { ... }. Результат работы этих операторов - несколько новых словоформ, которые подставляются на место унифицированного фрагмента.

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

При изменении формы прилагательного с полной на краткую надо учесть такой нюанс - не все прилагательные имеют краткую форму. Поэтому мы пытаемся получить краткую форму - это встроенная функция wordform_refresh. Она ищем в словарной статье грамматическую форму, наилучшим образом удовлетворяющую набору грамматических признаков словоформы. Строкой ранее мы задаем необходимость краткой формы:

wordform_set_coord( short, КРАТКИЙ, 1 );

Если в результаты выполнения функции wordform_refresh получится словоформа, у которой значение бистабильной координаты КРАТКИЙ действительно станет 1, то значит краткая форма найдена и можно подставлять ее в выходной текст. Род и число прилагательного мы не меняли, поэтому согласование с существительным не будет нарушено.

Последние 2 слова - запятая и что - мы скопируем в результаты без изменений, для этого используется встроенная функция ctx_root.

Если же краткая форма прилагательного не найдена, то мы копируем в выходной текст исходные 4 словоформы без изменений - этим занимается строка

return tuple_create( ctx_root(0), ctx_root(1), ctx_root(2), ctx_root(3) );

В ней функцией tuple_create создается кортеж из 4 элементов, которые просто копируются из исходного контекста функциями ctx_root.

С помощью консольного синонимизатора можно убедиться в работе этого правила:

перефразировка текста


Дополнительные материалы

Грамматический словарь

Синонимизация

Утилита Rewriter

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 16-Aug-11