Семантические сети. Реализация семантической сети в среде Visual Prolog.

Страницы работы

Фрагмент текста работы

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«Комсомольский – на - Амуре государственный технический университет»

Кафедра математического обеспечения и применения ЭВМ

ЛАБОРАТОРНАЯ РАБОТА № 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. Семантические сети.

Назначение системы

Программа предназначена для демонстрации работы с семантическими сетями.

Цель испытаний

Целью испытаний является выявление ошибок и недочетов, допущенных

Похожие материалы

Информация о работе