001 /** 002 * OntDeepBasic.java 003 * jCOLIBRI2 framework. 004 * @author Juan A. Recio-García. 005 * GAIA - Group for Artificial Intelligence Applications 006 * http://gaia.fdi.ucm.es 007 * 13/06/2007 008 */ 009 package jcolibri.method.retrieve.NNretrieval.similarity.local.ontology; 010 011 import java.util.ArrayList; 012 013 import jcolibri.datatypes.Instance; 014 import jcolibri.exception.NoApplicableSimilarityFunctionException; 015 import jcolibri.method.retrieve.NNretrieval.similarity.LocalSimilarityFunction; 016 import jcolibri.util.FileIO; 017 import es.ucm.fdi.gaia.ontobridge.OntoBridge; 018 import es.ucm.fdi.gaia.ontobridge.OntologyDocument; 019 020 /** 021 * This function computes the fdeep_basic similarity. See package documentation 022 * for details. 023 * 024 * @author Juan A. Recio-Garcia 025 * @version 1.0 026 * @see jcolibri.method.retrieve.NNretrieval.similarity.local 027 */ 028 public class OntDeepBasic implements LocalSimilarityFunction 029 { 030 031 /* 032 * (non-Javadoc) 033 * 034 * @see jcolibri.method.retrieve.NNretrieval.similarity.LocalSimilarityFunction#compute(java.lang.Object, 035 * java.lang.Object, jcolibri.cbrcore.CaseComponent, 036 * jcolibri.cbrcore.CaseComponent, jcolibri.cbrcore.CBRCase, 037 * jcolibri.cbrcore.CBRQuery, java.lang.String) 038 */ 039 public double compute(Object caseObject, Object queryObject) throws NoApplicableSimilarityFunctionException 040 { 041 if ((caseObject == null) || (queryObject == null)) 042 return 0; 043 if (!(caseObject instanceof Instance)) 044 throw new jcolibri.exception.NoApplicableSimilarityFunctionException(this.getClass(), caseObject.getClass()); 045 if (!(queryObject instanceof Instance)) 046 throw new jcolibri.exception.NoApplicableSimilarityFunctionException(this.getClass(), queryObject 047 .getClass()); 048 049 Instance i1 = (Instance) caseObject; 050 Instance i2 = (Instance) queryObject; 051 052 if (i1.equals(i2)) 053 return 1; 054 055 OntoBridge ob = jcolibri.util.OntoBridgeSingleton.getOntoBridge(); 056 057 double up = ob.maxProfLCS(i1.toString(), i2.toString()); 058 double down = ob.getMaxProf(); 059 060 return up / down; 061 } 062 063 /** Applicable to Instance */ 064 public boolean isApplicable(Object o1, Object o2) 065 { 066 if ((o1 == null) && (o2 == null)) 067 return true; 068 else if (o1 == null) 069 return o2 instanceof Instance; 070 else if (o2 == null) 071 return o1 instanceof Instance; 072 else 073 return (o1 instanceof Instance) && (o2 instanceof Instance); 074 } 075 076 /** 077 * Testing method using test5 ontology 078 */ 079 public static void main(String[] args) 080 { 081 try 082 { 083 // Obtain a reference to OntoBridge 084 OntoBridge ob = jcolibri.util.OntoBridgeSingleton.getOntoBridge(); 085 // Configure it to work with the Pellet reasoner 086 ob.initWithPelletReasoner(); 087 // Setup the main ontology 088 OntologyDocument mainOnto = new OntologyDocument("http://gaia.fdi.ucm.es/ontologies/vacation.owl", FileIO 089 .findFile("jcolibri/test/test5/vacation.owl").toExternalForm()); 090 // There are not subontologies 091 ArrayList<OntologyDocument> subOntologies = new ArrayList<OntologyDocument>(); 092 // Load the ontology 093 ob.loadOntology(mainOnto, subOntologies, false); 094 095 OntDeepBasic sim = new OntDeepBasic(); 096 097 System.out.println("deep_basic(CAR,TRAIN)=" + sim.compute(new Instance("CAR"), new Instance("TRAIN"))); 098 System.out.println("deep_basic(CAR,IBIZA)=" + sim.compute(new Instance("CAR"), new Instance("IBIZA"))); 099 System.out.println("deep_basic(CAR,I101)=" + sim.compute(new Instance("CAR"), new Instance("I101"))); 100 101 } catch (Exception e) 102 { 103 org.apache.commons.logging.LogFactory.getLog(OntDeepBasic.class).error(e); 104 } 105 } 106 }