Грамматики Prolog чрезвычайно хорошо приспособлены для трактовки смысла фраз, особенно на естественных языках. Для обработки смысла фраз могут использоваться параметры, которые закреплены за нетерминальными символами грамматики. Один из подходов к решению задачи извлечения смысла предусматривает использования двух этапов.
1. Формирование дерева синтаксического анализа заданной фразы.
2. Обработка дерева синтаксического анализа для определения смысла.
Часть II. Применение языка Prolog в области искусственного интеллекта
Безусловно, такой подход может применяться на практике, только если синтаксическая структура, представленная с помощью дерева синтаксического анализа, отражает также семантическую структуру; это означает, что и синтаксическая, и семантическая декомпозиции имеют аналогичные структуры. В таком случае смысл фразы можно составить из смыслов синтаксических конструкций, на которые раскладывается фраза в результате синтаксического анализа.
Проиллюстрируем этот двухэтапный метод на несложном примере. Для упрощения снова будем рассматривать движения робота. Грамматика с описанием движений робота, позволяющая вырабатывать дерево синтаксического анализа, приведена ниже.
move(move(Step)) -> step{ Step).
move(move(Step, Move)) -> step(Step), move I Move).
step(step(up)) -> [ up].
step(step(down)) -> [ down].
Теперь определим смысл движения как расстояние между положением робота перед выполнением движения и после него. Пусть каждый шаг имеет длину 1 мм в положительном или отрицательном направлении. Поэтому смысл движения "up up down up" составляет 1 + 1 - 1 + 1 = 2. Расстояние перемещения (distance) в результате выполнения движения можно вычислить на основании дерева синтаксического анализа движения, как показано на рис. 21.4. Ниже приведены соответствующие арифметические расчеты.
distance ('up up down up') =
distance('up') + distancet'u p down up') =1 + 1 = 2

Рис. 21.4. Извлечение смысла движения как расстояния перемещения в результате его выполнения
Ниже приведена процедура, которая определяет смысл движения (как соответствующего расстояния перемещения) на основании дерева синтаксического анализа движения.
Ч meaning{ Ра^эеТгее, Value) r.ieaning(move (Step, Move), Dist):-
meaning) Step, Dl),
meaning! Move D2)
Глава 21. Обработка лингвистической информации с помощью грамматических правил 519
Dist is Dl + D2.
meaning! move{ Step), Dist):-meaning! Step, Dist).
meaning! step! up), 1). meaning! step(down), -1).
Этой процедурой можно воспользоваться, например, для вычисления смысла движения "up up down up" следующим образом:
?• move[ Tree, (up, up, down, up], [)), meaning[ Tree, Dist), Dist = 2
Tree = move(step (up), move(step(up), move(stept down), move) step t up)))))
Упражнение
21.4. Эта грамматика и процедура meaning могут использоваться для решения противоположной задачи, т.е. для поиска движения, позволяющего переместить манипулятор робота на заданное расстояние, например, как показано ниже.?- move(Tree, Move, []), meaning(Tree, 5), Обсудите перспективы применения такого подхода.






