Министерство Образования РФ
НГТУ
Кафедра программных систем и баз данных
Лабораторная работа №5
По дисциплине "Искусственный интеллект"
Факультет ПМИ
Группа ПМ-16
Студенты Мамаева А.Ю.
Чусовкова А.В.
Преподаватели Пономаренко В.М.
Ванюкевич О.Н.
Новосибирск 2005
Задание:
1) Сформулировать задачу семантического анализа в контексте естественно-языкового интерфейса для интеллектуальных компьютерных программ;
2) реализовать на Прологе падежную грамматику;
3) выбрать некоторую предметную область, дать ее описание предложением или набором предложений. Расширить универсальную падежную грамматику с учетом семантики предметной области;
4) убедиться, что компьютер правильно понимает высказывания из данной предметной области;
5) построить семантическую сеть выбранной предметной области в терминах падежных отношений;
6) реализовать несколько запросов к базе знаний, представленной семантической сетью.
Анализ решения:
Опишем предметную область следующим предложением: “Студентка первого курса на зимних каникулах в недорогом магазине купила красивое платье со стипендии для студенческой вечеринки”.
Семантическая сеть предметной области в терминах падежных отношений имеет вид:
Контекстно-свободная грамматика для предложения-действия в модифицированной форме Бэкуса-Наура (распознающая):
<предложение> := <агент> < действие> <объект> [<инструмент>] [<место>] [<время>] [<цель>];
<агент> := <местоимение> | <именное словосочетание> | <собственное существительное>;
<действие>:= <глагол> | <глагольная группа>;
<объект> := <местоимение> | <именное словосочетание> | <собственное существительное>;
<инструмент> := [<инструментальный предлог>] <именное словосочетание>;
<время> := [<временной предлог>] <именное словосочетание>;
<место> := [<локутивный предлог>] <именное словосочетание>;
<цель> := [<целевой предлог>] <именное словосочетание>;
<именное словосочетание> := <существительное> | <прилагательное> <существительное>;
местоимение := он, она, оно;
инструментальный предлог:=cо| c помощью| посредством;
временной предлог:=перед | после | за тем | на;
локутивный предлог:=в|на|под|над|внутри|снаружи;
целевой предлог:=с целью | для;
<глагол>:=купила;
<существительное>:=студентка | платье | курс | каникулы | магазин | стипендия | вечеринка;
<прилагательное>:=первый | зимний | недорогой | красивый | студенческий;
Текст программы:
domains
list=string*
% *************************************************************************
predicates
sentence(list,list)
agent(list,list)
effect(list,list)
object(list,list)
instrument(list,list)
position(list,list)
purpose(list,list)
whentime(list,list)
named_combination(list,list)
local_named_combination(list,list)
time_named_combination(list,list)
verb_named_combination(list,list)
instrument_named_combination(list,list)
verb(string).
instrumental_preposition(string)
purpose_preposition(string)
local_preposition(string)
time_preposition(string)
noun(string)
local_noun(string)
time_noun(string)
instrument_noun(string)
pronoun(string)
adjective(string)
qagent(string)
qeffect(string)
qpurpose(string)
qposition(string)
qtime(string)
qobject(string)
qinstrument(string)
qunification(string,list,list)
sublist(list,list)
prefix(list,list)
suffix(list,list)
otvet(string,list)
append (list,list,list)
fact(list)
print_list(list)
% *************************************************************************
goal
write ("\n Cтудент решил краевую задачу с использованием Maple для \n"),
write ("бакалаврской работы в весеннем семестре в терминальном классе. \n\n"),
Q=("Кто"), S=["решил","краевую","задачу","с использованием","Maple"],
write (Q," "), print_list (S), write(" ?\n"), otvet(Q,S), nl, readchar(_), nl,
Q2=("Что сделал"), S2=["студент","краевую","задачу"],
write (Q2," "), print_list (S2), write(" ?\n"), otvet(Q2,S2), nl, readchar(_), nl,
Q3=("Когда"), S3=["студент","решил","краевую","задачу"], write (Q3," "), print_list (S3), write(" ?\n"),
otvet(Q3,S3), nl, readchar(_), nl,
Q4=("Где"), S4=["студент","решил","краевую","задачу"],
write (Q4," "), print_list (S4), write(" ?\n"), otvet(Q4,S4), nl, readchar(_), nl,
Q5="Для чего", S5=["студент","решил","краевую","задачу"], write (Q5," "), print_list (S5), write(" ?\n"),
otvet(Q5,S5), nl, readchar(_), nl,
Q6=("Что"), S6=["студент","решил","с использованием", "Maple"],
write (Q6," "), print_list (S6), write(" ?\n"),
otvet(Q6,S6), nl, readchar(_), nl,
Q7=("С помощью чего"), S7=["студент","решил","краевую", "задачу"],
write (Q7," "), print_list (S7), write(" ?\n"), otvet(Q7,S7).
% *************************************************************************
clauses
% определение подсписка в списке
sublist(Sub,List):- prefix(Pre,List), suffix(Sub,Pre).
sublist(Sub,List):- suffix(Suf,List), prefix(Sub,Suf).
% определение префикса списка
prefix([],X).
prefix([X|List],[X|List1]):-prefix(List,List1).
% определение суффикса списка
suffix(List,List).
suffix(X,[Y|List]):-suffix(X,List).
% конкатенация списков
append([],L,L).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.