Интерфейс на естественном языке. Семантический анализ, страница 5

relation("birthday","Stud19","1978").

relation("person in brigade","Stud1","brigade 3").

relation("person in brigade","Stud2","brigade 5").

relation("person in brigade","Stud3","brigade 2").

relation("person in brigade","Stud4","brigade 6").

relation("person in brigade","Stud5","brigade 5").

relation("person in brigade","Stud6","brigade 3").

relation("person in brigade","Stud7","brigade 2").

relation("person in brigade","Stud8","brigade 1").

relation("person in brigade","Stud9","brigade 3").

relation("person in brigade","Stud10","brigade 6").

relation("person in brigade","Stud11","brigade 1").

relation("person in brigade","Stud12","brigade 1").

relation("person in brigade","Stud13","brigade 4").

relation("person in brigade","Stud14","brigade 6").

relation("person in brigade","Stud15","brigade 4").

relation("person in brigade","Stud16","brigade 2").

relation("person in brigade","Stud17","brigade 5").

relation("person in brigade","Stud18","brigade 5").

relation("person in brigade","Stud19","brigade 4").

relation("defence","brigade 1","laboratory work 1").

relation("defence","brigade 1","laboratory work 2").

relation("defence","brigade 2","laboratory work 1").

relation("defence","brigade 3","laboratory work 1").

relation("defence","brigade 4","laboratory work 1").

relation("defence","brigade 6","laboratory work 1").

% Working tools

% Conversion of string to the list of words

str_to_str_list("",[]).

str_to_str_list(S,X) :get_word(S,W,S1),

str_to_str_list(S1,X1),

X=[W|X1].

% Extract of the first word from string

get_word(S,"",S1) :frontchar(S,' ',S1),!.

get_word(S,"",S1) :frontchar(S,'?',S1),!.

get_word(S,W,S1) :frontchar(S,A,S2),

get_word(S2,B,S1),

frontchar(W,A,B).

% Has not found necessary to explain sense of following procedures

con_lab(L,W,N,LWN) :concat(L," ",T1),

concat(T1,W,T2),

concat(T2," ",T3),

concat(T3,N,LWN).

con_brigade(C,N,Name) :concat(C," ",T1),

concat(T1,N,Name).

def_sex("man","man").

def_sex("woman","woman").

def_when(Year1,Year2,"in") :Year1=Year2.

def_when(Year1,Year2,"after") :Year1<Year2.

def_when(Year1,Year2,"before") :Year1>Year2.

GOAL

makewindow(1,24,15,"",0,0,25,80),

makewindow(1,7,15,"",1,14,9,52),

write("        S E M A N T I C    A N A L Y S I S       "),nl,

write("        **********************************       "),nl,

field_attr(0,3,44,80),

write("     You can ask questions to a knowledge base on"),nl,

write("sublanguage of the English language.             "),nl,

write("Examples of questions:                           "),nl,

write("Who is a man and was born before 1979?           "),nl,

write("Stud12 is a man and consist in brigade 1?         "),

%  write("What brigade has defended laboratory work 1?       "),nl,

%  write("Stud8 consist in brigade 1 , that has defended lw 1?"),nl,

makewindow(3,7,7,"",10,3,14,73),

clearwindow,

readln(S),

str_to_str_list(S,SL),

sentence(SL,Who,Brigade,Sex,When,Year,Lab),

composite_query(Who,Brigade,Sex,When,Year,Lab).