Переводчик на основе грамматического движка

Буквальный перевод

Перевод текста на русский язык можно делать на нескольких уровнях.

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

Кошка спит на диване.

На диване спит кошка.

можно рассчитывать на определенный успех для, допустим, английского языка с его достаточно строгим порядком "субъект-глагол-объект":

The cat sleeps.

Кошка спать.

Неплохо еще исключать из буквального перевода вспомогательные английские слова - формы глагола to be, to have, так как они очень интенсивно используются для формирования глагольных времен либо в качестве глагола-связки, не присутствующей в изъяснительных предложениях настоящего времени русского языка. Тут нас подстерегает неразрешимая на этом уровне дилема - что делать со словом it. С одной стороны, оно является местоимением:

I see it.

С другой, используется в некоторых безличных конструкциях:

It's a rainy day.

Казалось бы, можно ввести правило - если it является первым словом предложения, то оно является служебным и не переводится. Это однако тоже не срабатывает на предложении

It is mine.

Аналогичная проблема возникает с глаголами to do и to get.

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

I am asked.

Я спросить.

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

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

Согласование русского текста

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

black cat

черная кошка

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

Вижу большой камень. (вин.п.)

На дороге лежит большой камень. (им.п.)

Вижу черную кошку. Вижу черных кошек. (вин.п.)

На диване лежит черная кошка. На диване лежат черные кошки. (им.п.)

Во множественном числе род игнорируется.

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

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

Одна большая (им.п. ед.ч.) кошка (им.п. ед.ч.).

Две большие (им.п. мн.ч.) кошки (род.п. ед.ч.).

Пять больших (род.п. мн.ч.) кошек (род.п. мн.ч.).

Двадцать одна большая (им.п. ед.ч.) кошка (им.п. ед.ч.).

Во-первых, числительное становится ведущим словом в триаде, существительное склоняется в зависимости от арифметического значения числительного.

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

В-третьих, арифметическое значение числительного не совпадает с грамматическим числом. В английском языке все проще - единственное число и множественное четко отражают арифметическое значение one cat, two cats, 101 cats. Сравните с русским одна кошка, две кошки, 101 кошка. Очень хорошо демонстрирует эту особенность русского языка существительное дно - достаточно попробовать выписать ряд одно дно, два дна, ..., пять ???. То есть для числительных от 2 до 4 существительное ставится в единственном числе родительного падежа, и если формы множественного числа малоупотребимы (как вариант донья), то согласование ставит нас в тупик.

В-четверных, правило склонения существительного и прилагательного в зависимости от арифметического числа имеет период. Начиная с 20, в качестве управляющего параметра вступает модуль от деления арифметического числа на 10.

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

Двух больших кошек (род.п. мн.ч).

Двумя большими кошками (твор.п. мн.ч).

Двум большим кошкам (дат.п. мн.ч).

Двух больших кошек (вин.п. мн.ч).

О двух больших кошках (предл.п. мн.ч).

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

Помимо сложного, но в общем-то формального правила согласования с числительным, работу переводчика осложняют разнообразные исключения для отдельных существительных. Например, существительное год при значении числа от 4 до 19, либо при остатке от деления на 10 от 4, должно менятся на форму лет:

1 год

4 года

5 лет

11 лет

21 год

35 лет

При этом существительное год имеет вполне корректную форму множественного числа годы.

Надо заметить, что роль числительного в словосочетании важно не только в плане правильного согласования других членов словосочетания. Как показано, пара прилагательное+существительное ведет себя в присутствии числительного совершенно иначе.

Использование фразовых статей

Рассмотрим, как используется алгоритм подстановки фраз движком трансформации для перевода английского текста на русский:

It is supposed that she speaks English fluently.

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

Вводим в словарь следующие фразовые переводы.

It is supposed that начале предложения - буквальная подстановка через вводную конструкцию Предполагается, что. Важно, что мы должны выполнять подстановку только если английское словосочетание находится в начале предложения. Для такого ограничения есть специальный флаг, полное объявление подстановки выглядит так:

complex @  "It is supposed that" <to_russian> { @ "Предполагается, что" } flag { SubstitutionTechnique=Literally SubstitutionPosition=OnlyAtBeginning }

После ключевого слова flag в фигурных скобках перечислены две подсказки для алгоритма подстановки. Во-первых, это буквальный перевод SubstitutionTechnique=Literally. Во-вторых, он должен выполняться только в начале предложения SubstitutionPosition=OnlyAtBeginning.

Английское словосочетание speak English fluently - будем переводить русским текстом бегло говорить по-английски. Следует обратить внимание на два момента. Во-первых, мы введем в словарь английскую фразу, в которой будет базовая форма глагола to speak, тогда как в тестовом предложении глагол стоит в s-форме. Алгоритм грамматического движка при сопоставлении фраз сам умеет устанавливать соответствие между разными грамматическими формами одного слова. Во-вторых, в алгоритме подстановки словосочетаний с учетом морфологии и синтаксиса (в отличии от буквальной подстановки),  часто необходимо указывать то английское слово, которое несет грамматические характеристики всего словосочетания - в программах типа SQLex это называется ведущее слово. В нашем случае глагол speak является грамматическим центром английского словосочетания, которое переводчик будет считать "обобщенным глаголом".

На внутреннем языке описания словаря соответствующее объявление будет выглядеть так:

complex @  "speak English fluently" <to_russian> { @ "бегло говорить по-английски" }

Исходное английское предложение проходит стадии токенизации, морфологического разбора и наконец доходит до этапа выполнения подстановки, на котором его состав меняется таким образом:

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

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

Сложнее дела обстоят с не-буквальной подстановкой. В этом случае результат подстановки выглядит как набор деревьев, в которых корневой узел - это словоформа специального вида. Английское словосочетание speaks English fluently заменяется на узел E_VERB, к которому специальным образом прикрепляется русский перевод. На картинке не показаны некоторые важные детали, но на самом деле E_VERB это обычный английский глагол, который используется в служебных целях, поэтому для него выбрано такое необычное имя. При замене ведущего слова, в нашем случае глагола, движок копирует из заменяемого слова морфологические признаки. Поэтому после подстановки глагол E_VERB сохраняет информацию о числе, лице и времени английского глагола.

Далее вступают в работу правила перевода для грамматических паттернов. В частности, есть правило местоимение+глагол, которое одинаково реагирует на контексты типа

she asks

he runs

и т.п.

Это правило одновременно выполняет 3 операции. Во-первых, оно переводит на русский язык подлежащее и сказуемое, если они еще не переведены. Во-вторых, оно объединяет подлежащее и сказуемое в синтаксическое дерево. В-третьих, оно спрягает русский глагол в соответствии с правилами согласования для русского языка.

В нашем примере у узла E_VERB уже есть перевод - глагол говорить с двумя наречиями. Сделав перевод she как она, правило спрягает говорить и получает форму говорит. После построения дерева получается такая ситуация:

построение синтаксического дерева с переводом

Имеем на корневом уровне 4 узла. Дальше переводить нечего - не осталось английских слов без переводов.

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

В результате мы получаем на выходе

Предполагается, что она бегло говорит по-английски.

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

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

Модуль трансформации текста

Тезаурус

Утилита Syntax

Утилита Lexicon

  © 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-Oct-10