Эта программа запускается после завершения сборки словаря
компилятором. Она выполняет обработку фразовых статей
и сохраняет полученную информацию в базе данных тезауруса.
Сохраненная информация необходима алгоритму полнотекстового перевода
для определения возможности подстановки фразы и для приведения
подставляемой фразы к нужной грамматической форме.
В большинстве случаев задействованные в программе алгоритмы предназначены для автоматического определения некоторых грамматических свойств фраз, упрощая таким образом составление словаря. Например, для подстановки словосочетаний с учетом морфологии и синтаксиса надо знать, как склонять и спрягать части подставляемого словосочетания в зависимости от контекста подстановки. Для этого необходимо построить синтаксический граф подставляемой фразы, а также знать корневое слово этого графа. Рассматриваемые ниже сценарии 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 изменено |