Синонимизатор

Алгоритмы синонимизатора

В ходе синонимизации движок учитывает множество особенностей языка, среди которых:

1. падежная модальность предлогов (ДЛЯ КОШКИ, ПОД ДИВАНОМ), глаголов и отглагольных частей речи - причастий, инфинитивов, деепричастий (КОРМИТЬ КОШКУ, ДАВАТЬ КОШКЕ, ДУМАТЬ ГОЛОВОЙ),

2. глагольная модальность существительных (РАЗРЕШЕНИЕ КУПИТЬ КОШКУ), глаголов и отглагольных частей речи - причастий, деепричастий, инфинитивов (РЕШАЯ КУПИТЬ КОШКУ, РАЗРЕШИВШИЙ КУПИТЬ КОШКУ),

3. прагматика - сочетаемость конкретных слов (КОРМИТЬ КОШКУ, но ПОДКАРМЛИВАТЬ ФИКУС) - на основе базы N-грамм.

Но даже аккуратный учет всех грамматических нюансов ествественного языка не гарантирует отсутстве в результатах синонимизации некорректных подстановок. Причины их появления объясняются в следующих параграфах.

Морфологический анализ

Рассмотрим такой пример:

- Что ты видишь?

- Лошадь.

Так как синонимизатор выполняет синтаксический анализ изолированно для каждого предложения, то второе предложение '- Лошадь.' оставляет неопределенность определения падежа существительного - именительный или винительный. Это приводит к тому, что при подстановке синонима 'лошадь-конь' с вероятностью 50% будет допущена явная ошибка:

- Что ты видишь?

- Конь.

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

Вышеприведенный пример можно обратить, также используя особенности русской грамматики. Так как формы родительного и винительного падежа единственного числа для слова конь совпадают (два коня и вижу коня), то исходный фрагмент:

- Что тебе купить?

- Коня.

с вероятностью 50 % даст неверную синонимизацию из-за того, что для существительного лошадь формы родительного и винительного падежа единственного числа различны:

- Что тебе купить?

- Лошади.

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

Ситуация становится значительно лучше, когда в предложении есть другие слова, позволяющие отсеять варианты морфологического анализа. Кроме очевидных случаев с любым определением перед существительным (прилагательное, причастие, числительное, притяжательное местоимение), синтаксический анализатор позволяет определять нужную информацию например в такой ситуации:

- Что тебе купить?

- Лошадь или корову.

Союз или может связывать только существительные в одинаковом падеже, поэтому благодаря однозначно известному падежу для корову (вин.п. ед.ч), анализатор оставит единственный вариант для лошадь (вин.п. ед.ч).

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

Потом он взял крепость.

оставляет анализатор перед неразрешимой на его уровне дилеммой - какой частью речи является потом: наречием или существительным. Сравните с двумя аналогичными фразами:

Затем он взял крепость.

Силой воли он взял себя в руки.

Синонимизация слова потом с большой вероятностью даст ошибку типа Затем и кровью. Чтобы минимизировать вероятность таких ошибок, можно задать список стоп-слов, которые в любом случае не будут синонимизироваться. API движка позволяет задавать стоп-синонимы через вызов sol_StopSynonyms, а утилита Rewriter автоматически загружает их из файла stopsyn.txt в текущем каталоге.

Еще один источник проблем - недостаточно адекватное описание грамматики языка в словаре. К примеру, в русском языке есть некоторое количество существительных, которые могут быть и мужского, и женского рода: ябеда, биолог, егоза, Саша. Обратите внимание на примеры: Он стал ябедой. Она стала ябедой. Так как в текущей реализации русской грамматики род должен быть задан для словарной статьи однозначно, то в случае "недопустимого" употребления существительного попытка синонимизации даст некорректный результат, хотя обычно анализатор просто откажется обрабатывать такое "неправильное" предложение. Аналогичный пример для глаголов - неоднозначность совершенного/несовершенного вида в некоторых исключительных случаях. Например, инфинитив переформатировать может быть и совершенного, и несовершенного вида:

Что надо сделать? Надо немедленно переформатировать диск!

Что ты делаешь? Я переформатирую диск.

Эта неоднозначность приводит к тому, что движок иногда подставит синоним неправильного вида, исказив смысл:

Что ты делаешь? Я отформатирую диск.

В этом примере движок фактически поменял глагольное время - вместо настоящего поставил будущее.

Согласование частей речи

Перед подстановкой синонима нужно убедиться, что он подходит по правилам согласования. Для русского языка это означает, что подставляемый глагол (инфинитив, деепричастие, причастие) должен быть модальным, если заменяемый глагол модальный и управляет инфинитивом:

Я думаю прикупить семян.

допустимо синонимизировать в

Я планирую прикупить семян.

но нельзя выполнить такую синонимизацию

Я размышляю прикупить семян.

Так как глагол размышлять не может управлять инфинитивом.

Нужно учитывать падежную валентность глаголов - если глагол управляет существительным, то подставляемый глагол тоже должен допускать такое управление.

Таким образом пример

Он спекулирует зерном.

нельзя синонимизировать в:

Он перепродает зерном.

так как глагол перепродавать не допускает дополнение в творительном падеже.

Определение всех необходимых грамматических признаков выполняется с помощью информации в лексиконе.

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

На скриншоте показан пример пересогласования связанных слов при подстановке синонима-существительного:

пересогласование слов

N-граммы

База N-грамм используется синонимизатором для отбора вариантов подстановки синонимов, имеющих подтверждение в практике языка. К примеру, без использования базы текст

спутниковая тарелка

будет преобразован синонимизатором в

спутниковая миска.

С другой стороны, текст

тарелка супа

будет вполне допустимо преобразован в

миска супа.

Для подготовки базы используется отдельный сборщик - утилита Empirika.

Синонимизатор умеет использовать 2 вида собранных N-грамм - нормализованные и ненормализованные.

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

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

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

Сразу после того, как синонимизатор получает от тезауруса список синонимов для слова, он отбрасывает те из них, которые не подтверждаются записями нормализованных N-грамм.

Далее отобранные подстановки приводятся к грамматической форме заменяемых слов. Результат проверяется с помощью ненормализованных Nграмм. Этот этап гораздо лучше отбрасывает некорректные подстановки, так как в реальной языковой практике постоянно возникают ситуации, что в конкретном контексте используется какая-то определенная форма слова. В некоторой степени эти отражает семантику, которая в явном виде не учитывается синонимизатором.

Важный побочный эффект нормализации N-грамм - неявно выполняемое при этом обобщение. Если в учебных текстах, на которых собирается база, встретился фрагмент

миска супа

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

В состав SDK синонимизатора входит демонстрационный скрипт ngrams-test.cmd, который сначала собирает утилитой Empirika базу N-грамм для эталонного текста, а затем выполняет синонимизацию с учетом собранных N-грамм и для сравнения - без них. В результате для исходного текста

Большая злая собака любит гонять маленьких пушистых кошек.

при синонимизации с учетом n-грамм получаем

Большущая злобная псина обожает гонять малюсеньких пушистых кошечек.

в то время как без учета

Немалая свирепая псина уважает гонять малолетних пушистых кошаков.

Словарь синонимов

В качестве базы синонимов используется информация в тезаурусе. Содержимое этой базы можно удобно просматривать с помощью программы Грамматический Словарь Русского Языка.

Можно добавлять собственные синонимы в словарь, соответствующая процедура описана здесь.

SDK синонимизатора

Подробности - на странице API синонимизатора.

Программы

В составе SDK есть две утилиты, выполняющие синонимизацию и перефразировку текста.

Во-первых, консольная утилита Rewriter для платформы .NET. Она написана на C#, использует DLL-версию движка. Она работает на 32- и 64-битных версиях MS Windows с установленным .NET Framework. Ее исходные тексты включены в SDK как пример.

Во-вторых, консольная утилита Synonymizer. В отличие от Rewriter, в этой программе код грамматического движка скомпилирован как часть программы. Она работает на 32- и 64-битных версиях MS Windows и Linux.

синонимизация и перефразировка русского текста    синонимизация и перефразировка русского текста

В составе демо-программы Joker, доступной для свободного скачивания, так же есть модуль синонимизации и перефразировки:

русский синонимизатор

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

Алгоритмы русской морфологии

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

Сборка N-грамм

Тезаурус

Морфологический анализатор

Синтаксический анализатор

  © 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 Мб


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



изменено 05-Feb-12