250 likes | 258 Views
Leverage ontology-based rules and reasoning to optimize literature searches, find specific enzyme functions like Levamisole inhibition efficiently in PubMed, and enhance decision-making in bioinformatics. Develop rule-based applications for personalized information systems.
E N D
GoPubMed and beyond: Rules and reasoning for ontology-based literature search
REWERSE:a European Network of Excellence • Reasoning on the Web with Rules and Semantics • Technology • Rule Markup languages • Policy specification, composition and conformance • Composition and typing • Reasoning-aware querying • Evolution and reactivity • Application • Web-based Decision Support for Event, Temporal, and Geographical Data • Towards a Bioinformatics Semantic Web • Personalised Information Systems • Towards a Bioinformatics Semantic Web • Groups: Dresden, Jena, Lisbon, Linkoeping, Edinburgh, Bucarest, Manchester, Paris • Rules and constraints for structure prediction, metabolic pathways, gene expression analysis, ontologies, workflows.
GoPubMed and beyond: Rules and reasoning for ontology-based literature search
Problem PubMed >12M articles
Example Task • Which enzymes does Levamisole inhibit? • It is well known that Levamisole inhibits alkaline phosphatase • It is not well known that Levamisole inhibits phosphofructokinase
PubMed Example • A keyword search for levamisole inhibitor produces well over 100 hits in PubMed. • To find out about specific functions, we have to go through all these papers! • We are interested in the relevant enzymatic functions. • A refined search for Levamisole inhibitor enzymatic activity produces only 5 hits - a lot of relevant papers have been dropped.
GoPubMed Example Query: Levamisole inhibitor Maximum papers: 100 Strict matching 54 papers in biological process 20 in cellular components 72 in molecular function
GoPubMed Example Let’s look for some functions: 70 papers including terms, which are enzyme activities
GoPubMed Example Transferase 8 Kinase 6 Hydrolase 58 Oxidoreductase 2 Lyase 1
GoPubMed Example …alkaline phosphatase inhibitor levamisole… Effects of alkaline phosphatase and its inhibitor Levamisole… Alkaline Phosphatase: 52 papers
GoPubMed Example Phosphofructokinase
GoPubMed Example Levamisole direclty inhibits tumor phosphofructokinase
GoPubMed Example In PubMed the article is listed at position 84! And hence unlikely to be read
GoPubMed andbeyond: Rules and reasoning for ontology-based literature search
Prova • Rule-based Java scripting for middleware • Combination of object-oriented and declarativeprogramming • Offer a rule-based platform for distributed agent programming. • Expose logic and agent behaviour as rules; • Access data sources via wrappers written in Java • Make all Java API from available packages directly accessible from rules; • Run within the Java runtime; • Enable rapid prototyping of applications;
PubMed XML Output <PubmedArticle> <MedlineCitation Owner="NLM" Status="Publisher"> <PMID>15469972</PMID> <DateCreated> <Year>2004</Year> <Month>10</Month> <Day>7</Day> </DateCreated> <Article> <Journal> <ISSN>0950-1991</ISSN> <JournalIssue PrintYN="N"> <PubDate> <Year>2004</Year> <Month>10</Month> <Day>6</Day> </PubDate> </JournalIssue> <Coden>DEVPED</Coden> <Title>Development (Cambridge, England)</Title> <ISOAbbreviation>Development</ISOAbbreviation> </Journal>…
Output Year: 2004 ArticleTitle: Developmental potential of defined neural progenitors derived from mouse embryonic stem cells. LastName: Plachta FirstName: Nicolas Initials: N ********************** LastName: Bibel FirstName: Miriam Initials: M ********************** LastName: Tucker FirstName: Kerry Lee Initials: KL ********************** LastName: Barde FirstName: Yves-Alain Initials: YA ****************************************** Year: 2004 ArticleTitle: Eye evolution: a question of genetic promiscuity. LastName: Nilsson ForeName: Dan-E Initials: DE ********************** …
%%% XML reading tests :- eval(test_xml1()). test_xml1() :- Document=XML("pubmed.xml"), Root = Document.getDocumentElement(), tagname(Root,Elements), Elements.nodes(Element), subtag(Element,SubElements), SubElements.nodes(SubElement), SubElementNodeName = SubElement.getNodeName(), ChildNodes=SubElement.getChildNodes(), ChildNodes.nodes(ChildNode), evaluate(ChildNode). tagname(Root,Elements):- Elements = Root.getElementsByTagName("MedlineCitation"). subtag(Element,SubElements):- SubElements = Element.getElementsByTagName("PubDate"). subtag(Element,SubElements):- SubElements = Element.getElementsByTagName("Article"). subtag(Element,SubElements):- SubElements = Element.getElementsByTagName("Author"). evaluate(ChildNode):- "Year"=ChildNode.getNodeName(), printout(ChildNode). evaluate(ChildNode):- "Initials"=ChildNode.getNodeName(), printout(ChildNode), println([**********************]). evaluate(ChildNode):- "FirstName"=ChildNode.getNodeName(), printout(ChildNode). evaluate(ChildNode):- "ForeName"=ChildNode.getNodeName(), printout(ChildNode). evaluate(ChildNode):- "LastName"=ChildNode.getNodeName(), printout(ChildNode). evaluate(ChildNode):- "ArticleTitle"=ChildNode.getNodeName(), printout(ChildNode). printout(ChildNode):- ChildNodeName = ChildNode.getNodeName(), DataName = ChildNode.getFirstChild(), StringName = DataName.getNodeValue(), println([ChildNodeName, ": ",StringName]). Code Snippet Prolog rules Java objects Unification
Traverse the GO tree and find all phosphofructokinases Built-in DB access Built-in DB access :-eval(consult("utils.prova")). location(database,“go","jdbc:mysql://comas.soi.city.ac.uk","guest","guest"). location(database,"GO","jdbc:mysql://dbserver","guest","guest"). :-solve(isPhosphofructokinase()). isPhosphofructokinase() :- dbopen("GO",DB), println(["DB open"]), sql_select(DB,term,[id,TermID],[name,Name],[where,"name = 'phosphofructokinase activity'"]), println(["Looking for all children of GO-Term (",TermID,"): ",Name]), findall(TermID,isPhosphofructokinase(DB,TermID),_). isPhosphofructokinase(DB,TermID) :- concat(["term1_id=",TermID],WhereClause), sql_select(DB,term2term,[term2_id,ChildTermID],[where, WhereClause]), concat(["id=",ChildTermID],WhereClause2), sql_select(DB,term,[name,ChildName],[where,WhereClause2]), println([TermID," has child ", ChildName,",",ChildTermID]), isPhosphofructokinase(DB,ChildTermID). isPhosphofructokinase(DB,TermID) :- println([TermID," does not have any children."]). Backtracking Recursion
Output Looking for all children of GO-Term (2153): phosphofructokinase activity 2153 has child 1-phosphofructokinase activity,2154 2154 does not have any children. 2153 has child 6-phosphofructo-2-kinase activity,2155 2155 does not have any children. 2153 has child 6-phosphofructokinase activity,2156 2156 does not have any children. 2153 does not have any children. yes
Messaging and Reaction Rules • Prova is designed to implement agents in a distributed system • Prova is based on theoretical work on multi agent systems • Prova provides predicates to send and receive messages and to realise reaction rules
Code Snippet Built-in agent agent communication: sendMsg and rcvMsg Abstracting from protocols like JMS, Jade or inline :- eval(ex004()). a(1). a(2). b(3). b(4). % Send out messages ex004() :- println(["==========ex004=========="]), iam(Me), sendMsg(XID1,self,Me,queryref,a(I)), rcvMult(XID1,self,Me,reply,a(I)), println(["Inline reaction ",rcvMult(XID1,self,Me,reply,a(I))]), sendMsg(XID2,self,Me,queryref,b(J)), rcvMult(XID2,self,Me,reply,b(J)), println(["Inline reaction ",rcvMult(XID2,self,Me,reply,b(J))]). % Reaction rule to general queryref rcvMsg(XID,Protocol,From,queryref,[X|Xs]|LocalContext) :- println(["Rule reaction 1 ",rcvMsg(XID,Protocol,From,queryref,[X|Xs]|LocalContext)]), derive([X|Xs]), sendMsg(XID,Protocol,From,reply,[X|Xs]|LocalContext). rcvMsg(XID,Protocol,From,queryref,[X|Xs]|LocalContext) :- println(["Rule reaction 2 ",rcvMsg(XID,Protocol,From,queryref,[X|Xs]|LocalContext)]), sendMsg(XID,Protocol,From,end_of_transmission,[X|Xs]|LocalContext). % A testing harness for printing incoming end_of_transmission messages. rcvMsg(XID,Protocol,From,end_of_transmission|Extra) :- println(["end_of_transmission for conversation-id ",XID,": "|Extra]).
Output ==========ex004========== Rule reaction 1 ["rcvMsg","mediator@bioinf-mobile3","self","mediator","queryref",["a",I]] Rule reaction 2 ["rcvMsg","mediator@bioinf-mobile3","self","mediator","queryref",["a",I]] Inline reaction ["rcvMult","mediator@bioinf-mobile3","self","mediator","reply",["a",1]] Inline reaction ["rcvMult","mediator@bioinf-mobile3","self","mediator","reply",["a",2]] end_of_transmission for conversation-id mediator@bioinf-mobile3: ["a",I] Rule reaction 1 ["rcvMsg","mediator@bioinf-mobile6","self","mediator","queryref",["b",N@@16]] Rule reaction 2 ["rcvMsg","mediator@bioinf-mobile6","self","mediator","queryref",["b",N@@16]] Rule reaction 1 ["rcvMsg","mediator@bioinf-mobile8","self","mediator","queryref",["b",N@@16]] Rule reaction 2 ["rcvMsg","mediator@bioinf-mobile8","self","mediator","queryref",["b",N@@16]] Inline reaction ["rcvMult","mediator@bioinf-mobile6","self","mediator","reply",["b",3]] Inline reaction ["rcvMult","mediator@bioinf-mobile6","self","mediator","reply",["b",4]] end_of_transmission for conversation-id mediator@bioinf-mobile6: ["b",N@@16] Inline reaction ["rcvMult","mediator@bioinf-mobile8","self","mediator","reply",["b",3]] Inline reaction ["rcvMult","mediator@bioinf-mobile8","self","mediator","reply",["b",4]] end_of_transmission for conversation-id mediator@bioinf-mobile8: ["b",N@@16] end_of_transmission for conversation-id mediator@bioinf-mobile3: ["a",I] Shutdown complete.
Conclusion • GoPubMed facilitates exploration of literature abstracts with the GeneOntology • Prova implements Prolog-style rules and reasoning with Java • Thanks: • GoPubMed: Andreas Doms, Ralf Delfs, Alex Kozlenkov • Prova: Alex Kozlenkov • Support: EU Projects REWERSE, GeneStream, BioGrid • Contact: • Michael Schroeder: ms@biotec.tu-dresden.de • URLs • www.biotec.tu-dresden.de • www.rewerse.net (REWERSE project including info on bioinfo group) • www.semanticwebrules.org (Prova) • www.gopubmed.org (GoPubMed)