Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«Комсомольский – на - Амуре государственный технический университет»
Кафедра математического обеспечения и применения ЭВМ
ЛАБОРАТОРНАЯ РАБОТА № 3
По курсу: «Теория вычислительных процессов и структур»
Студент группы 4ВС-1: Киселевский М.Е.
Алексеенко Н.С.
Преподаватель: Жбанов С.А.
2007 г.
Тема: Семантические сети.
Цель: Познакомиться с разработкой семантический сетей.
Задание: Реализовать семантическую сеть в среде Visual Prolog.
Семантические сети.
Семантика – значение или смысл художественного произведения, слова, действия, обстоятельства и т.д. переданное с помощью каких-либо представлений и выражений.
С точки зрения инженерии и знаний семанитка – определенные общие отношения между символами и объектами представленными этими символами.
Сетевая структура – способ представления семантических отношений концептами.
Первоначально психологией изучались объекты, определяющие семантичность с точки зрения известных ассоциативных свойств накопленных в системе поведения и обучения человека. А затем были изучены принципы действия человеческой памяти в частности гипотетические модели долговременной памяти. После этого перешли к вопросу формализации долговременной памяти. В качестве модели долговременной памяти была предложены TLC- модель. TLC- модель имитирует естественное понимание языка человека.
Основная идея TLC- модели – описание любого объекта состоит из:
1) описание класса, которому принадлежит объект;
2) описание прототипа объекта;
3) установление связи со словами, отображающими свойства объекта.
В TLC- модели концептуальные объекты представляются ассоциативными сетями, состоящими из величин, показывающих концепты и отношения между этими концептами. Такая структура называется плоскостью. Концепты и объекты которые описываются называются вершинами типа, ассоциативные слова- вершинами лексем.
Для четкого разграничения вершин концептов и вершин экземпляров в семантических сетях используется связь типа Instanse_of. Введение этих связей позволяет избежать проблем с наследованием.
Получение вывода с помощью семантической сети.
Особенность семантической сети – целостность системы. Свойство целостности заключается в неотделимости объектов и свойств процедур. Интерпретация семантической сети как правило использует способ сопоставления частей сетевой структуры.
Основная идея.
1. Строится небольшая подсеть соответствующая вопросу.
2. В этой подсети все неизвестные переменные или значения помечаются «?».
3. После чего начинается процесс сопоставления любой существующей сети с подсетью вопросов.
Основные предикаты, используемые в программе.
nondeterm sintax(STRING) – предикат для выделения всех членов предложения и сохранения в базе данных
nondeterm analiz(STRING,STRING) – предикат осуществляет анализ заданного вопроса и выдает ответ
nondeterm clear_db – очищает базу данных.
Факты базы данных.
definition(STRING) – сохранение определений
subject(STRING) – сохранение подлежащих
verb(STRING) – сохранение сказуемых
addition(STRING) – сохранение дополнений
adv_place(STRING) – сохранение обстоятельств места
adverb(STRING) – сохранение обстоятельств образа действия
.
Текст программы.
include "tvps_3.inc"
include "tvps_3.con"
include "hlptopic.con"
%BEGIN_WIN Task Window
/***************************************************************************
Event handling for Task Window
***************************************************************************/
Database - db
definition(STRING) %определние
subject(STRING) %подлежащее
verb(STRING) %сказуемое
addition(STRING) %дополнение
adv_place(STRING) %обстоятельство места
adverb(STRING) %обстоятельство
predicates
task_win_eh : EHANDLER
nondeterm sintax(STRING)
nondeterm analiz(STRING,STRING)
nondeterm clear_db
constants
%BEGIN Task Window, CreateParms, 08:57:50-16.11.2007, Code automatically updated!
task_win_Flags = [wsf_SizeBorder,wsf_TitleBar,wsf_Close,wsf_Maximize,wsf_Minimize,wsf_ClipSiblings]
task_win_Menu = res_menu(idr_task_menu)
task_win_Title = "TVPS_3"
task_win_Help = idh_contents
%END Task Window, CreateParms
clauses
clear_db:-
retractall(definition(_)),
retractall(subject(_)),
retractall(verb(_)),
retractall(adverb(_)),
retractall(addition(_)),
retractall(adv_place(_)),
retractall(adv_time(_)).
% В предложении нет предлогов
sintax(Sent):-
clear_db,
fronttoken(Sent,Def,End1),
asserta(definition(Def)), %записали определение в БД
fronttoken(End1,Subj,End2),
asserta(subject(Subj)), %записали подлежащее в БД
fronttoken(End2,Adv,End3),
asserta(adverb(Adv)), %записали обстоятельство в БД
fronttoken(End3,Verb,End4),
asserta(verb(Verb)), %записали сказуемое в БД
fronttoken(End4,Add1,End5),
str_len(Add1,L1),
L1>2,
asserta(addition(Add1)), %записали дополнение в БД
fronttoken(End5,AdvP1,End6),
str_len(AdvP1,L2),
L2>2,
asserta(adv_place(AdvP1)). %записали обстоятельство места в БД
% В предложении два предлога
sintax(Sent):-
clear_db,
fronttoken(Sent,Def,End1),
asserta(definition(Def)), %записали определение в БД
fronttoken(End1,Subj,End2),
asserta(subject(Subj)), %записали подлежащее в БД
fronttoken(End2,Adv,End3),
asserta(adverb(Adv)), %записали обстоятельство в БД
fronttoken(End3,Verb,End4),
asserta(verb(Verb)), %записали сказуемое в БД
fronttoken(End4,Add1,End5),
str_len(Add1,L1),
L1<3,
fronttoken(End5,Add2,End6),
concat(Add1," ",T1),
concat(T1,Add2,Add),
asserta(addition(Add)), %записали дополнение в БД
fronttoken(End6,AdvP1,End7),
str_len(AdvP1,L2),
L2<3,
fronttoken(End7,AdvP2,End8),
concat(AdvP1," ",T2),
concat(T2,AdvP2,AdvP),
asserta(adv_place(AdvP)). %записали обстоятельство места в БД
% В предложении предлог перед дополнением
sintax(Sent):-
clear_db,
fronttoken(Sent,Def,End1),
asserta(definition(Def)), %записали определение в БД
fronttoken(End1,Subj,End2),
asserta(subject(Subj)), %записали подлежащее в БД
fronttoken(End2,Adv,End3),
asserta(adverb(Adv)), %записали обстоятельство в БД
fronttoken(End3,Verb,End4),
asserta(verb(Verb)), %записали сказуемое в БД
fronttoken(End4,Add1,End5),
str_len(Add1,L1),
L1<3,
fronttoken(End5,Add2,End6),
concat(Add1," ",T1),
concat(T1,Add2,Add),
asserta(addition(Add)), %записали дополнение в БД
fronttoken(End6,AdvP1,End7),
str_len(AdvP1,L2),
L2>2,
asserta(adv_place(AdvP1)). %записали обстоятельство места в БД
% В предложении предлог перед обстоятельством места
sintax(Sent):-
clear_db,
fronttoken(Sent,Def,End1),
asserta(definition(Def)), %записали определение в БД
fronttoken(End1,Subj,End2),
asserta(subject(Subj)), %записали подлежащее в БД
fronttoken(End2,Adv,End3),
asserta(adverb(Adv)), %записали обстоятельство в БД
fronttoken(End3,Verb,End4),
asserta(verb(Verb)), %записали сказуемое в БД
fronttoken(End4,Add1,End5),
str_len(Add1,L1),
L1>2,
asserta(addition(Add1)), %записали дополнение в БД
fronttoken(End5,AdvP1,End6),
str_len(AdvP1,L2),
L2<3,
fronttoken(End6,AdvP2,End7),
concat(AdvP1," ",T2),
concat(T2,AdvP2,AdvP),
asserta(adv_place(AdvP)). %записали обстоятельство места в БД
analiz(KW1,_):-
KW1="Какой",
retract(definition(Ans)),
asserta(definition(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Какая",
retract(definition(Ans)),
asserta(definition(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Какое",
retract(definition(Ans)),
asserta(definition(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Какие",
retract(definition(Ans)),
asserta(definition(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Как",
retract(adverb(Ans)),
asserta(adverb(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Куда",
retract(adv_place(Ans)),
asserta(adv_place(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Кто",
retract(subject(Ans)),
asserta(subject(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
KW2="делает",
retract(verb(Ans)),
asserta(verb(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
KW2="делала",
retract(verb(Ans)),
asserta(verb(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
KW2="делал",
retract(verb(Ans)),
asserta(verb(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
KW2="делали",
retract(verb(Ans)),
asserta(verb(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
KW2="делало",
retract(verb(Ans)),
asserta(verb(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="Что",
retract(subject(Ans)),
asserta(subject(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="По",
KW2="чему",
retract(addition(Ans)),
asserta(addition(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="На",
KW2="чем",
retract(addition(Ans)),
asserta(addition(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="По",
KW2="чем",
retract(addition(Ans)),
asserta(addition(Ans)),
dlg_note(Ans).
analiz(KW1,KW2):-
KW1="О",
KW2="чем",
retract(addition(Ans)),
asserta(addition(Ans)),
dlg_note(Ans).
analiz(KW1,_):-
KW1="Где",
retract(adv_place(Ans)),
asserta(adv_place(Ans)),
dlg_note(Ans).
%BEGIN Task Window, e_Create
task_win_eh(_Win,e_Create(_),0):-!,
%BEGIN Task Window, InitControls, 08:57:50-16.11.2007, Code automatically updated!
win_CreateControl(wc_Edit,rct(5,35,435,60),"",_Win,[wsf_Group,wsf_TabStop,wsf_AutoHScroll,wsf_AlignLeft],enterphrase),
win_CreateControl(wc_PushButton,rct(445,35,530,60),"сохранить",_Win,[wsf_Group,wsf_TabStop],savephrase),
win_CreateControl(wc_Text,rct(5,70,435,95),"",_Win,[wsf_AlignLeft],curentphrase),
win_CreateControl(wc_Edit,rct(5,155,435,180),"",_Win,[wsf_Group,wsf_TabStop,wsf_AutoHScroll,wsf_AlignLeft],question),
win_CreateControl(wc_PushButton,rct(445,155,530,180),"Спросить",_Win,[wsf_Group,wsf_TabStop],ask),
win_CreateControl(wc_Text,rct(10,10,141,25),"Ввод предложения",_Win,[wsf_AlignLeft],idct_111),
win_CreateControl(wc_Text,rct(10,130,120,145),"Задать вопрос",_Win,[wsf_AlignLeft],idct_222),
%END Task Window, InitControls
%BEGIN Task Window, ToolbarCreate, 08:57:50-16.11.2007, Code automatically updated!
%END Task Window, ToolbarCreate
consult("Data.dba",db),
ifdef use_message
msg_Create(100),
enddef
!.
%END Task Window, e_Create
%MARK Task Window, new events
%BEGIN Task Window, id_help
task_win_eh(_Win,e_Menu(id_help,_ShiftCtlAlt),0):-!,
dlg_hlp_Create(_Win),
!.
%END Task Window, id_help
%BEGIN Task Window, ask _CtlInfo
task_win_eh(_Win,e_Control(ask,_CtrlType,_CtrlWin,_CtlInfo),0):-
HQT=win_GetCtlHandle(_Win,question),
Ques=win_GetText(HQT),
fronttoken(Ques,KWord,End),
End<>"",
fronttoken(End,KWord2,_),
analiz(KWord,KWord2),
!.
task_win_eh(_Win,e_Control(ask,_CtrlType,_CtrlWin,_CtlInfo),0):-
HQT=win_GetCtlHandle(_Win,question),
Ques=win_GetText(HQT),
fronttoken(Ques,KWord,End),
analiz(KWord,"E"),
!.
%END Task Window, ask _CtlInfo
%BEGIN Task Window, e_Destroy
task_win_eh(_Win,e_Destroy,0):-!,
save("DATA.dba",db),
!.
%END Task Window, e_Destroy
%BEGIN Task Window, savephrase _CtlInfo
task_win_eh(_Win,e_Control(savephrase,_CtrlType,_CtrlWin,_CtlInfo),0):-!,
HET=win_GetCtlHandle(_Win,enterphrase),
HST=win_GetCtlHandle(_Win,curentphrase),
Text=win_GetText(HET),
win_SetText(HST,Text),
sintax(Text),
dlg_note("Предложение записано"),
!.
%END Task Window, savephrase _CtlInfo
%BEGIN Task Window, id_file_exit
task_win_eh(Win,e_Menu(id_file_exit,_ShiftCtlAlt),0):-!,
win_Destroy(Win),
!.
%END Task Window, id_file_exit
%BEGIN Task Window, e_Size
task_win_eh(_Win,e_Size(_Width,_Height),0):-!,
ifdef use_tbar
toolbar_Resize(_Win),
enddef
ifdef use_message
msg_Resize(_Win),
enddef
!.
%END Task Window, e_Size
%END_WIN Task Window
/***************************************************************************
Invoking on-line Help
***************************************************************************/
project_ShowHelpContext(HelpTopic):vpi_ShowHelpContext("tvps_3.hlp",HelpTopic).
/***************************************************************************
Main Goal
***************************************************************************/
goal
ifdef use_mdi
vpi_SetAttrVal(attr_win_mdi,b_true),
enddef
ifdef ws_win
ifdef use_3dctrl
vpi_SetAttrVal(attr_win_3dcontrols,b_true),
enddef
enddef
vpi_Init(task_win_Flags,task_win_eh,task_win_Menu,"tvps_3",task_win_Title).
%BEGIN_DLG hlp
/**************************************************************************
Creation and event handling for dialog: hlp
**************************************************************************/
constants
%BEGIN hlp, CreateParms, 23:17:40-15.11.2007, Code automatically updated!
dlg_hlp_ResID = idd_hlp
dlg_hlp_DlgType = wd_Modal
dlg_hlp_Help = idh_contents
%END hlp, CreateParms
predicates
dlg_hlp_eh : EHANDLER
dlg_hlp_handle_answer(INTEGER EndButton,DIALOG_VAL_LIST)
dlg_hlp_update(DIALOG_VAL_LIST)
clauses
dlg_hlp_Create(Parent):%MARK hlp, new variables
dialog_CreateModal(Parent,dlg_hlp_ResID,"",
[
%BEGIN hlp, ControlList, 23:17:40-15.11.2007, Code automatically updated!
%END hlp, ControlList
],
dlg_hlp_eh,0,VALLIST,ANSWER),
dlg_hlp_handle_answer(ANSWER,VALLIST).
dlg_hlp_handle_answer(idc_ok,VALLIST):-!,
dlg_hlp_update(VALLIST).
dlg_hlp_handle_answer(idc_cancel,_):-!. % Handle Esc and Cancel here
dlg_hlp_handle_answer(_,_):errorexit().
dlg_hlp_update(_VALLIST):%BEGIN hlp, Update controls, 23:17:40-15.11.2007, Code automatically updated!
%END hlp, Update controls
true.
%MARK hlp, new events
dlg_hlp_eh(_,_,_):-!,fail.
%END_DLG hlp
Программа и методика испытаний
Объект испытаний
Наименование системы
Полное название системы: Лабораторная №3. Семантические сети.
Назначение системы
Программа предназначена для демонстрации работы с семантическими сетями.
Цель испытаний
Целью испытаний является выявление ошибок и недочетов, допущенных
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.