Изучение приемов семантического анализа предложений естественного языка посредством падежной грамматики. Задача семантического анализа, страница 2

pronoun("он").

pronoun("она").

pronoun("оно").

instrument_pretext("c").

instrument_pretext("c помощью").

instrument_pretext("посредством").

instrument_pretext("на").

time_pretext("перед").

time_pretext("после").

time_pretext("за тем").

time_pretext("в").

position_pretext("в").

position_pretext("на").

position_pretext("под").

position_pretext("над").

position_pretext("внутри").

position_pretext("снаружи").

purpose_pretext("с целью").

purpose_pretext("для").

verb("реализовал").

verb("сделал").

verb("написал").

noun("студент").

noun("программа").

noun("программу").

noun("курс").

noun("курса").

noun("семестр").

noun("семестре").

noun("класс").

noun("классе").

noun("си").

noun("пролог").

noun("прологе").

noun("проект").

noun("проекта").

adjective("второй").

adjective("второго").

adjective("третий").

adjective("третьего").

adjective("осенний").

adjective("осеннем").

adjective("терминальный").

adjective("терминальном").

adjective("эффективная").

adjective("эффективную").

adjective("курсовой").

adjective("курсового").

name("Виктор").

question("что","что").

question("кто","кто").

question("чём","на чём").

question("чего","для чего").

question("где","где").

question("когда","когда").

question_verb("сделал","что сделал").


answer(QST,[X|SENT],ANSW):-   answer1(QST,SENT,[X],ANSW).

answer1(QST,[X1|SENT],X,ANSW):-   relation(QST,X,ANSW),   answer1(_,SENT,[X1],ANSW).

answer1(QST,[X|SENT],L,ANSW):-   ins(X,L,RES),   answer1(QST,SENT,RES,ANSW).

answer1(_,[],X,ANSW):-   relation(_,X,ANSW).

ins(X,[X1|L],[X1|RES]):-   ins(X,L,RES).

ins(X,[],[X]).

relation(QST,X1,X2):-   relation1(QST,X1,X2).

relation(QST,X1,X2):-   relation1(_,X1,X3),  relation1(QST,X3,X2).

relation1(QST,X1,X2):-  relation2(QST,X1,X2).

relation1(QST,X1,X2):-  relation2(QST,X2,X1).

relation2("что",["реализовал"],["эффективную","программу"]).

relation2("кто",["реализовал"],["студент","третьего","курса"]).

relation2("кто",["реализовал"],["студент","второго","курса"]).

relation2("что",["студент","третьего","курса"],["эффективную","программу"]).

relation2("что",["студент","второго","курса"],["эффективную","программу"]).

relation2("на чём",["студент","третьего","курса"],["на","прологе"]).

relation2("на чём",["студент","второго","курса"],["на","си"]).

relation2("для чего",["реализовал"],["для","курсового","проекта"]).

relation2("где",["реализовал"],["в","терминальном","классе"]).

relation2("когда",["реализовал"],["в","осеннем","семестре"]).

relation2("что сделал",A,E):-relation2("кто",E,A).

delqst(SENT,RES,QSTSTR):-    scan(QSTSTR,QST),     delqst1(SENT,RES,QST).

delqst1([X|SENT],RES,[X|QST]):-         delqst1(SENT,RES,QST).

delqst1([X|SENT],[X|RES],QST):-         delqst1(SENT,RES,QST).

delqst1([X|SENT],[X|RES],[]):-              delqst1(SENT,RES,[]).

delqst1([],[],[]).

scan(STR,[FRS|FRSL]):-   word(STR,FRS,STR1),!, scan(STR1,FRSL).

scan(_,[]).

word(STR,FRS,STR1):-  searchchar(STR,' ',NUM),  str_len(STR,LN),

NUM1=NUM-1,   NUM2=NUM+1,     LN1=LN-NUM,

substring(STR,1,NUM1,FRS),    substring(STR,NUM2,LN1,STR1).

word(STR,STR,""):-STR<>"".

lst_to_str(STR,[TOK|TOKL]):-lst_to_str(STR1,TOKL), concat(TOK," ",STR2), concat(STR2,STR1,STR).

lst_to_str(STR,[TOK|[]]):-  STR=TOK.

run:-

scan("кто реализовал эффективную программу на си в терминальном классе в осеннем семестре для курсового проекта",FRS),

scan("что реализовал студент третьего курса",FRS),

scan("студент третьего курса что сделал в осеннем семестре",FRS),

scan("студент третьего курса реализовал эффективную программу на чём",FRS),

sentence(FRS,X,QST),

delqst(FRS,RES,QST),

answer(QST,RES,ANSW),nl,

lst_to_str(STR,ANSW),

write(STR).

run:- write("Не знаю.").

GOAL

run.