ThesaurusNotes - обработчик фразовых статей в тезаурусе

Назначение

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

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

Реализация и программный доступ

В составе процедурного API есть функция sol_ProcessPhraseEntry, которая выполняет аналогичную работу. В действительности и утилита ThesaurusNotes, и функция sol_ProcessPhraseEntry, используют один и тот же код, реализованный как C++ класс ThesaurusNotesProcessor в файле ...\ai\some\ThesaurusNotesProcessor.cpp.

Скачать исходные тексты этого класса - ThesaurusNotesProcess.cpp и ThesaurusNotesProcessor.h.

Платформы

Программа написана на C++ и компилируется на следующих платформах:

Она работает в командной строке и обычно запускается из скриптов сборки словаря в нужными опциями - см. к примеру файл ...\scripts\dictionary\ru-en.cmd.

Опции

-left

обрабатывать только левые части связей

-right

обрабатывать только правые части связей

Если не указана ни опция -left, ни -right, то обрабатываться будут все фразовые статьи.

-language XXX

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

-scenario X,Y

Тип обработки. В зависимости от аргументов сценария X,Y выполняется следующая модификация:

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

синтаксический граф

segmentation - выполняется токенизация текста фразы, результаты запоминаются. Особое значение данная процедура имеет для фразовых статей на японском и китайском языках - так как пользователь вносит соответствующие статьи сплошным текстом, а многие алгоритмы (например переводчик) требуют данных о количестве слов для сопоставления образцов. К примеру, японская фразовая статья ニャーニャーと鳴く будет разбита на 3 слова [ニャー ニャー] [] [鳴く].

segmentation,lemmatization - выполняется токенизация (см. предыдущий абзац) и дополнительно - лемматизация выделенных слов, то есть приведение их к базовым формам. Это позволяет получить для переводчика паттерн, которым сопоставим с различными грамматическими формами входящих в статью слов, например dirt road и dirt roads.

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

cleanup - удаляется вся созданная сценариями информация, кроме грамматического класса (см. сценарий class).

cleanup,syntax - удалять только результаты синтаксического анализа (результат сценария syntax)

cleanup,segmentation - удалять только результаты сегментации (результаты сценариев segmentation и segmentation,lemmatization)

class - для фразовых статей, у которых не объявлен грамматический класс, попытаться отпределить его автоматически на основе набора эвристик и по результатам синтаксического анализа. Для работы переводчика важно определить, какой части речи синтаксически подобна правая фраза. Для японско-русского и англо-русского переводчиков соответствующие скрипты в подкаталоге ...\scripts\translation\jap_rus_notes.cmd и ...\eng_rus_notes.cmd выполняют определение части речи для русских фраз. В большинстве случаев часть речи для фразы совпадает с частью речи ведущего слова - см. сценарий pivot. Но есть случаи, когда ведущее слово неопределено - это всевозможные обстоятельства времени, места и так далее, то есть фразы, ведущие себя в предложении подобно наречию.

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

от дома к дому  -  НАРЕЧИЕ
     красное вино  -  СУЩЕСТВИТЕЛЬНОЕ
     свободное время  -  СУЩЕСТВИТЕЛЬНОЕ
     звонить по телефону  -  ИНФИНИТИВ
     смотреть фильм  -  ИНФИНИТИВ
     играть в футбол  -  ИНФИНИТИВ
     объектив с постоянным фокусным расстоянием  -  СУЩЕСТВИТЕЛЬНОЕ
     изящное и вульгарное  -  ПРИЛАГАТЕЛЬНОЕ
     зайти и засидеться  -  ИНФИНИТИВ

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

Примеры определения ведущего слова в словосочетании

Рассмотрим пример автоматического определения ведущего слова для англо-русского переводчика.

Имеем фразовый перевод:

dirt road = грунтовая дорога

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

alternating current = переменный ток

direct current = постоянный ток

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

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

В нем корень однозначно указывает на ведущее слово - road.

Как используется эта информация при переводе? Пусть, к примеру,  мы переводим словосочетание

The dirt roads.

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

англо-русский перевод

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

Компилятор словаря

Тезаурус

Фразовые статьи

  © Козиев Илья 2019
18-Sep-10 изменено