
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PARTE GENERALE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%soglia
threshold(5).

%word
word(Id,Token,Stem,P):-noun(Id,Token,Stem,P).
word(Id,Token,Stem,P):-propernoun(Id,Token,Stem,P).
word(Id,Token,Stem,P):-verb(Id,Token,Stem,P).
word(Id,Token,Stem,P):-adverb(Id,Token,Stem,P).
word(Id,Token,Stem,P):-adjective(Id,Token,Stem,P).

%Sinonyms
synonym(X,Y) :- signpost(X,Y).
synonym(X,X) :- concept(X).
synonym(X,Y) :- synonym(Y,X).

%success rules
succ(C) :- concept(C), in_title(C).
succ(C) :- concept(C), not in_title(C),in_sect(C).
%succ(C) :- concept(C), not in_sect(C),
%           #count{I:in_body(I,C)} >= T, concept(C), threshold(T).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%PARTE SPECIFICA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept KD
in_title("kd") :- word_in_title("knowledge"), word_in_title("discovery").
in_sect("kd") :-  word_in_sect(I,"knowledge"), word_in_sect(I,"discovery").
body(I,"kd") :- word_in_body(I,"knowledge",P), word_in_body(J,"discovery",P).

%il termine "data mining" deve apparire almeno una volta 
KnowDisc :- body(I,"kd"). 

in_body(I,"kd") :- KnowDisc,word(I,"kd",_,_).
in_body(I,"kd") :- body(I,"kd").

word_in_title("knowledge") :- title(_,X,"knowledg",_). 
word_in_title("discovery") :- title(_,X, "discoveri",_). 
word_in_title("discovery") :- title(_,X, "discov",_).
word_in_sect(I,"knowledge") :- section(I,X,"knowledg"). 
word_in_sect(I,"discovery") :- section(I,X,"discoveri").
word_in_sect(I,"discovery") :- section(I,X,"discov").
word_in_body(I,"knowledge",P) :- word(I,_,"knowledg",P).
word_in_body(I,"discovery",P) :- word(I,X,"discoveri",P). 
word_in_body(I,"discovery",P) :- word(I,X,"discov",P).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept DM (Data Mining)
in_title("dm") :- word_in_title("data"), word_in_title("mining").
in_sect("dm") :-  word_in_sect(I,"data"), word_in_sect(I,"mining").
body(I,"dm") :- word_in_body(I,"data",P), word_in_body(J,"mining",P).

%il termine "data mining" deve apparire almeno una volta 
dataMining :- body(I,"dm"). 

in_body(I,"dm") :- dataMining,word(I,"dm",_,_).
in_body(I,"dm") :- body(I,"dm").

%istanze
in_title("dm") :- dataMining,title(I,_,"classif",_).
in_title("dm") :- dataMining,title(I,_,"cluster",_).

in_sect("dm") :- dataMining,section(I,_,"classif").
in_sect("dm") :- dataMining,section(I,_,"cluster").

in_body(I,"dm") :- dataMining,word(I,_,"classif",_).
in_body(I,"dm") :- dataMining,word(I,_,"cluster",_).



word_in_title("data") :- title(_,X,"data",_).
word_in_title("mining") :- title(_,X,"mine",_).
word_in_sect(I,"data") :- section(I,X,"data").
word_in_sect(I,"mining") :- section(I,X,"mine").
word_in_body(I,"data",P) :- word(I,X,"data",P).
word_in_body(I,"mining",P) :- word(I,X,"mine",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept TM (Text Mining)

in_title("tm") :- word_in_title("text"), word_in_title("mining").
in_sect("tm") :-  word_in_sect(I,"text"), word_in_sect(I,"mining").
body(I,"tm") :- word_in_body(I,"text",P), word_in_body(J,"mining",P).


%il termine "text mining" deve apparire almeno una volta 
textMining :- body(I,"tm"). 

in_body(I,"tm") :- textMining,word(I,"tm",_,_).
in_body(I,"tm") :- body(I,"tm").

%istanze
in_title("tm") :- textMining,title(I,_,"classif",_).
in_title("tm") :- textMining,title(I,_,"cluster",_).
in_title("tm") :- textMining,title(I,_,"categor",_).

in_sect("tm") :- textMining,section(I,_,"classif").
in_sect("tm") :- textMining,section(I,_,"cluster").
in_sect("tm") :- textMining,section(I,_,"categor").

in_body(I,"tm") :- textMining,word(I,_,"classif",_).
in_body(I,"tm") :- textMining,word(I,_,"cluster",_).
in_body(I,"tm") :- textMining,word(I,_,"categor",_).


word_in_title("text") :- title(_,X,"text",_).
word_in_title("mining") :- title(_,X,"mine",_).
word_in_sect(I,"text") :- section(I,X,"text").
word_in_sect(I,"mining") :- section(I,X,"mine").
word_in_body(I,"text",P) :- word(I,X,"text",P).
word_in_body(I,"mining",P) :- word(I,X,"mine",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept IR (Information Retrieval)

in_title("ir") :- word_in_title("information"), word_in_title("retrieval").
in_sect("ir") :-  word_in_sect(I,"information"), word_in_sect(I,"retrieval").
body(I,"ir") :- word_in_body(I,"information",P), word_in_body(J,"retrieval",P).

in_title("ir") :- word_in_title("information"), word_in_title("extraction").
in_sect("ir") :-  word_in_sect(I,"information"), word_in_sect(I,"extraction").
body(I,"ir") :- word_in_body(I,"information",P), word_in_body(J,"extraction",P).

%il termine "information retrieval" deve apparire almeno una volta 
infRetrieval :- body(I,"ir"). 

in_body(I,"ir") :- infRetrieval,word(I,"ir",_,_).
in_body(I,"ir") :- body(I,"ir").

word_in_title("information") :- title(_,X,"inform",_).
word_in_title("retrieval") :- title(_,X,"retriev",_).
word_in_title("retrieval") :- title(_,X,"extract",_).
word_in_sect(I,"information") :- section(I,X,"inform").
word_in_sect(I,"retrieval") :- section(I,X,"retriev").
word_in_sect(I,"retrieval") :- section(I,X,"extract").
word_in_body(I,"information",P) :- word(I,X,"inform",P).
word_in_body(I,"retrieval",P) :- word(I,X,"retriev",P).
word_in_body(I,"retrieval",P) :- word(I,X,"extract",P).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept KM 

in_title("km") :- word_in_title("knowledge"), word_in_title("management"). 
in_sect("km") :-  word_in_sect(I,"knowledge"), word_in_sect(I,"management").
body(I,"km") :- word_in_body(I,"knowledge",P), word_in_body(J,"management",P).

%il termine "knowledge management" deve apparire almeno una volta 
KnowMngt :- body(I,"km"). 

in_body(I,"km") :- KnowMngt,word(I,"km",_,_).
in_body(I,"km") :- body(I,"km").

word_in_title("knowledge") :- title(_,X,"knowledg",_).
word_in_title("management") :- title(_,X,"manag",_).
word_in_sect(I,"knowledge") :- section(I,X,"knowledg").
word_in_sect(I,"management") :- section(I,X,"manag").
word_in_body(I,"knowledge",P) :- word(I,X,"knowledg",P).
word_in_body(I,"management",P) :- word(I,X,"manag",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept KRR 

in_title("krr") :- word_in_title("knowledge"), word_in_title("representation"), 
word_in_title("reasoning").
in_sect("krr") :-  word_in_sect(I,"knowledge"), word_in_sect(I,"representation"),
word_in_sect(I,"reasoning").
body(I,"krr") :- word_in_body(I,"knowledge",P), word_in_body(J,"representation",P).
body(I,"krr"):-word_in_body(I,"reasoning",P).

%il termine "knowledge representation and reasoning" deve apparire almeno una volta 
krr :- body(I,"kr"). 

in_body(I,"krr") :- krr,word(I,"krr",_,_).
in_body(I,"krr") :- body(I,"krr").


word_in_title("knowledge") :- title(_,X,"knowledg",_).
word_in_title("representation") :- title(_,X,"represent",_).
word_in_title("reasoning") :- title(_,X,"reason",_).
word_in_sect(I,"knowledge") :- section(I,X,"knowledge").
word_in_sect(I,"representation") :- section(I,X,"represent").
word_in_sect(I,"reasoning") :- section(I,X,"reason").
word_in_body(I,"knowledge",P) :- word(I,X,"knowledg",P).
word_in_body(I,"representation",P) :- word(I,X,"represent",P).
word_in_body(I,"reasoning",P) :- word(I,X,"reason",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept NLP
in_title("nlp") :- word_in_title("natural"), word_in_title("language"), 
word_in_title("processing").
in_sect("nlp") :-  word_in_sect(I,"natural"), word_in_sect(I,"language"),
word_in_sect(I,"processing").
body(I,"nlp") :- word_in_body(I,"natural",P), word_in_body(J,"language",P),
word_in_body(K,"processing",P).

%il termine "Natural Language Processing" deve apparire almeno una volta 
nlp :- body(I,"nlp"). 

in_body(I,"nlp") :- nlp,word(I,"nlp",_,_).
in_body(I,"nlp") :- body(I,"nlp").


word_in_title("natural") :- title(_,X,"natur",_).
word_in_title("language") :- title(_,X,"languag",_).
word_in_title("processingg") :- title(_,X,"process",_).
word_in_sect(I,"natural") :- section(I,X,"natur").
word_in_sect(I,"language") :- section(I,X,"languag").
word_in_sect(I,"processing") :- section(I,X,"process").
word_in_body(I,"natural",P) :- word(I,X,"natur",P).
word_in_body(I,"language",P) :- word(I,X,"languag",P).
word_in_body(I,"processing",P) :- word(I,X,"process",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept Ontology 
in_title("ontology") :- title(I,X,"ontology",_).
in_sect("ontology") :- section(I,X,"ontology").
in_body(I,"ontology") :- word(I,X,"ontology",_).

in_title("ontology") :- title(I,X,_,_),instance_of(X,"ontology").
in_sect("ontology") :- section(I,X,_),instance_of(X,"ontology").
in_body(I,"ontology") :- word(I,X,_,_),instance_of(X,"ontology").

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept cM 

in_title("cm") :- word_in_title("content"), word_in_title("management").
in_sect("cm") :-  word_in_sect(I,"content"), word_in_sect(I,"management").
body(I,"cm") :- word_in_body(I,"content",P), word_in_body(J,"management",P).

%il termine "content management" deve apparire almeno una volta 
contentMngt :- body(I,"cm"). 

in_body(I,"cm") :- contentMngt,word(I,"cm",_,_).
in_body(I,"cm") :- body(I,"cm").


word_in_title("content") :- title(_,X,"content",_).
word_in_title("management") :- title(_,X,"manag",_).

word_in_sect(I,"content") :- section(I,X,"content").
word_in_sect(I,"management") :- section(I,X,"manag").

word_in_body(I,"content",P) :- word(I,X,"content",P).
word_in_body(I,"management",P) :- word(I,X,"manag",P).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept web 
in_title("web") :- title(I,"web",_,_). 
in_title("web") :- title(I,Y,_,_),synonym(Y,"web").
in_sect("web") :- section(I,"web",_). 
in_sect("web") :- section(I,Z,_),synonym(Z,"web").
in_body(I,"web") :- word(I,"web",_,_). 
in_body(I,"web") :- word(I,Z,_,_),synonym(Z,"web").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept e-learning 
in_title("e-learning") :- title(I,"e-learning",_,_). 
in_sect("e-learning") :- section(I,"e-learning",_).
in_body(I,"e-learning") :- word(I,"e-learning",_,_).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept formalism 
in_title("formalism") :- title(_,_,"formalism",_). 
in_sect("formalism") :- section(I_,_,"formalism").
in_body(I,"formalism") :- word(I,_,"formalism",_).

in_title("formalism") :- title(I,X,_,_),instance_of(X,"formalism").
in_sect("formalism") :- section(I,X,_),instance_of(X,"formalism").
in_body(I,"formalism") :- word(I,X,_,_),instance_of(X,"formalism").

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept language
in_title("language") :- title(I,_,"language",_).
in_sect("language") :- section(I,_,"language").
in_body(I,"language") :- word(I,_,"language",_).

in_title("language") :- title(I,X,_,_),instance_of(X,"language").
in_sect("language") :- section(I,X,_),instance_of(X,"language").
in_body(I,"language") :- word(I,X,_,_),instance_of(X,"language").

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept tooL
in_title("tools") :- title(_,_,"tool",_).
in_title("tools") :- title(I,Y,_,_),synonym(Y,"tools").
in_sect("tools") :- section(I,_,"tool").
in_sect("tools") :- section(I,Z,_),synonym(Z,"tools").
in_body(I,"tools") :- word(I,_,"tool",_).
in_body(I,"tools") :- word(I,Z,_,_),synonym(Z,"tools").

in_title("tool") :- title(I,X,_,_),instance_of(X,"tools").
in_sect("tool") :- section(I,X,_),instance_of(X,"tools").
in_body(I,"tool") :- word(I,X,_,_),instance_of(X,"tools").

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept compression
in_title("compression") :- title(I,"compression",_,_).
in_title("compression") :- title(I,Y,_,_),synonym(Y,"compression").
in_sect("compression") :- section(I,"compression",_).
in_sect("compression") :- section(I,Z,_),synonym(Z,"compression").
in_body(I,"compression") :- word(I,"compression",_,_).
in_body(I,"compression") :- word(I,Z,_,_),synonym(Z,"compression").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept olap
in_title("olap") :- title(I,"olap",_,_).
in_sect("olap") :- section(I,"olap",_).
in_body(I,"olap") :- word(I,"olap",_,_).



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%concept preporcessing
in_title("preprocessing") :- title(I,_,"preprocess",_).
in_title("preprocessing") :- title(I,_,"pre-process",_).
in_sect("preprocessing") :- section(I,_,"preprocess").
in_sect("preprocessing") :- section(I,_,"pre-process").

in_body(I,"preprocessing") :- word(I,_,"preprocess",_).
in_body(I,"preprocessing") :- word(I,_,"pre-process",_).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%concept classification (instance)

in_title("classification") :- title(I,_,"classif",_).
in_sect("classification") :- section(I,_,"classif").
in_body(I,"classification") :- word(I,_,"classif",_).

in_title("classification") :- title(I,_,"categor",_).
in_sect("classification") :- section(I,_,"categorf").
in_body(I,"classification") :- word(I,_,"categor",_).
