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

simple_query(Name,Brigade,"","","","") :person_brigade(Name,Brigade),

write(Name," consist in ",Brigade,";"),nl.

simple_query(Name,Brigade,"","","","") :not(person_brigade(Name,Brigade)),

write(Name," not consist in ",Brigade,";"),nl.

% Definition of birthday.

simple_query(Name,"","",Year1,When,"") :person_birthday(Name,Year2),

def_when(Year1,Year2,When),

write(Name," was born ",When," ",Year1,";"),nl.

simple_query(Name,"","",Year1,When,"") :person_birthday(Name,Year2),

not(def_when(Year1,Year2,When)),

write(Name," was not born ",When," ",Year1,";"),nl.

% Definition of defence of laboratory work by a brigade.

simple_query("",Name,"","","",Lab) :brigade_lab(Name,Lab),

write(Name," has defended ",Lab,";"),nl.

simple_query("",Name,"","","",Lab) :not(brigade_lab(Name,Lab)),

write(Name," has not defended ",Lab,";"),nl.

sentence(["Who"|S],"Who",Brigade,Sex,Year,When,Lab) :- !,

sentence(S,Brigade,Sex,Year,When,Lab).

sentence(["What","brigade"|S],"","Brigade","","","",Lab) :- !,

sentence(S,Lab).

sentence([C,N,"has"|S],"",Name,"","","",Lab) :- !,

con_brigade(C,N,Name),

sentence(["has"|S],Lab).

sentence([Name|S],Name,Brigade,Sex,Year,When,Lab) :sentence(S,Brigade,Sex,Year,When,Lab).

sentence(["is","a",Sex],"",Sex,"","","").

sentence(["is","a",Sex,"and"|S],Brigade,Sex,Year,When,Lab) :sentence(S,Brigade,_,Year,When,Lab).

sentence(["consist","in",C,N],Brigade,"","","","") :con_brigade(C,N,Brigade).

sentence(["consist","in",C,N,"and"|S],Brigade,Sex,Year,When,Lab) :con_brigade(C,N,Brigade),

sentence(S,_,Sex,Year,When,Lab).

sentence(["consist","in",C,N1,",","that","has","defended",L,W,N2],Brigade,"","","",Lab) :con_brigade(C,N1,Brigade),

con_lab(L,W,N2,Lab).

sentence(["consist","in",C,N1,",","that","has","defended",L,W,N2,"and"|S],Brigade,"","","",Lab) :con_brigade(C,N1,Brigade),

con_lab(L,W,N2,Lab).

sentence(["was","born",When,Year],"","",Year,When,"").

sentence(["was","born",When,Year,"and"|S],Brigade,Sex,Year,When,Lab) :sentence(S,Brigade,Sex,_,_,Lab).

sentence(["has","defended",L,W,N],Lab) :con_lab(L,W,N,Lab).

% Definition of an accessory the person to a brigade

person_brigade(Person,Brigade) :relation("is",Brigade,"brigade"),

relation("is",Person,X),

relation("type","person",X),

relation("person in brigade",Person,Brigade).

% Definition of a sex the person

person_sex(Person,Sex) :relation("is",Person,Sex),

relation("type","person",Sex).

% Definition of birthday the person

person_birthday(Person,Birthday) :relation("is",Person,X),

relation("type","person",X),

relation("is",Birthday,"year"),

relation("birthday",Person,Birthday).

% Definition of execution by a brigade of laboratory work

brigade_lab(Brigade,Lab) :relation("is",Brigade,"brigade"),

relation("is",Lab,"laboratory work"),

relation("defence",Brigade,Lab).

% Semantic network

relation("type","person","man").