001/** 002 * 003 */ 004package org.dllearner.algorithms.isle.metrics; 005 006import java.util.HashMap; 007import java.util.Map; 008import java.util.Set; 009 010import org.dllearner.algorithms.isle.index.Index; 011import org.semanticweb.owlapi.model.OWLClassExpression; 012import org.semanticweb.owlapi.model.OWLEntity; 013 014/** 015 * @author Lorenz Buehmann 016 * 017 */ 018public abstract class AbstractRelevanceMetric implements RelevanceMetric { 019 020 protected Index index; 021 protected String name; 022 023 public AbstractRelevanceMetric(Index index) { 024 this.index = index; 025 026 name = getClass().getSimpleName().replace("RelevanceMetric", ""); 027 } 028 029 public static Map<OWLEntity, Double> normalizeMinMax(Map<OWLEntity, Double> hmEntity2Score) { 030 Map<OWLEntity, Double> hmEntity2Norm = new HashMap<>(); 031 032 double min = Double.MAX_VALUE; 033 double max = Double.MIN_VALUE; 034 035 OWLEntity minE=null; 036 OWLEntity maxE=null; 037 for (OWLEntity e : hmEntity2Score.keySet()) { 038 double value = hmEntity2Score.get(e); 039 if (value < min) { 040 min = value;minE = e; 041 } else if (value > max) { 042 max = value;maxE = e; 043 } 044 } 045// System.err.println("Max: " + max + "-" + maxE); 046// System.err.println("Min: " + min + "-" + minE); 047 // System.out.println( "min="+ dMin +" max="+ dMax ); 048 for (OWLEntity e : hmEntity2Score.keySet()) { 049 double value = hmEntity2Score.get(e); 050 double normalized = 0; 051 if (min == max) { 052 normalized = value; 053 normalized = 0.5; 054 } else { 055 normalized = (value - min) / (max - min); 056 } 057 hmEntity2Norm.put(e, normalized); 058 } 059 return hmEntity2Norm; 060 } 061 062 public String getName() { 063 return name; 064 } 065 066 @Override 067 public double getRelevance(OWLEntity entity, OWLClassExpression desc){ 068 Set<OWLEntity> entities = desc.getSignature(); 069 double score = 0; 070 for (OWLEntity otherEntity : entities) { 071 double relevance = getRelevance(entity, otherEntity); 072 if(!Double.isInfinite(relevance)){ 073 score += relevance/entities.size(); 074 } 075 } 076 return score; 077 } 078 079 @Override 080 public int hashCode() { 081 final int prime = 31; 082 int result = 1; 083 result = prime * result + ((name == null) ? 0 : name.hashCode()); 084 return result; 085 } 086 087 @Override 088 public boolean equals(Object obj) { 089 if (this == obj) 090 return true; 091 if (obj == null) 092 return false; 093 if (getClass() != obj.getClass()) 094 return false; 095 AbstractRelevanceMetric other = (AbstractRelevanceMetric) obj; 096 if (name == null) { 097 if (other.name != null) 098 return false; 099 } else if (!name.equals(other.name)) 100 return false; 101 return true; 102 } 103 104 105}