Скачиваний:
142
Добавлен:
17.06.2016
Размер:
3.31 Mб
Скачать

Трансляция запросов на естественном языке

Большинство естественных языков (и английский в частности) не явля-

ются простыми, прямыми и последовательными.

Существительные могут быть в единственном и множественном числе,

глаголы спрягаются, существуют синонимы.

Трансляция предложений с естественного языка является сложной зада-

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

цию предложений.

Внутренние имена объектов

Geobase должен получить внутренние имена объектов из терминов поль-

зователей. При этом возникают три проблемы:

1. Множественное число объектов. Пользователь может

использовать слово "states", которое является именем объекта

"state" с добавлением "s"; или "cities", получаемое из имени

объекта "city". Предикат "entn" предназначен для преобразования

множественного числа имен объектов в единственное.

2. Синонимы имен объектов. Пользователь может набрать

"town" вместо "city" или "place" вместо "point". Синонимы имен

объектов хранятся в предикате "synonym".

3. Составные значения объектов. Значения объектов могут

состоять более чем из одного слова, например "new york" или "salt

lake city". Geobase распознает также ситуации при грамматическом

разборе с помощью предиката "get_cmpent". Некоторые из

используемых предложений приведены ниже:

predicates

ent_name(ent,string) /*Преобразуем из имени во

внутреннее имя объекта*/

entn(string,string) /*Преобразуем в единст-

венное число*/

entity(string) /*Получаем все объекты*/

ent_synonym(string,string) /*Синонимы объектов*/

clauses

ent_name(Ent,Navn) :-

entn(E,Name),

ent_synonym(E,Ent),

entity(Ent).

ent_synonym(E,Ent) :-

synonym(E,Ent).

ent_synonym(E,E).

entn(E,N) :-

concat(E,"s",N).

entn(E,N) :-

free(E),

bound(N),

concat(X,"ies",N),

concat(X,"y",E).

entn(E,E).

entity("name") :-!.

entity("continent") :-!.

entity(X) :-

schema(X,_,_).

Внутренние имена связей

Связи также, как и имена объектов, могут иметь синонимы и состоять

из нескольких слов.

Альтернативные формы имен связей хранятся в предикате "assoc".

"assoc" содержит список слов, которые могут быть использованы во внутрен-

них именах связей, например:

assoc("in",["in"])

assoc("in",["running","through"])

assoc("in",["runs","through"])

assoc("in",["run","through"])

assoc("with",["with"])

assoc("with",["traversed"])

assoc("with",["traversed","by"])

Предикат "get_assoc" используется для распознавания связи в начале

списка слов. Это производится с помощью использования предиката "append"

для разделения списка на две части. Если первая часть списка соответству-

ет альтернативе для связи в предикате "assoc", то возвращается соответст-

вующее имя внутренней связи.

get_assoc(IL,OL,A) :-

append(ASL,OL,IL),

assoc(A,ASL).

Соседние файлы в папке Документация