001/** 002 * 003 */ 004package org.dllearner.algorithms.isle.metrics; 005 006import org.dllearner.algorithms.isle.index.Index; 007import org.semanticweb.owlapi.model.OWLEntity; 008 009/** 010 * @author Lorenz Buehmann 011 * 012 */ 013public class SignificantPMIRelevanceMetric extends AbstractRelevanceMetric { 014 015 protected final double delta; 016 017 /** 018 * 019 * @param index: semantic index 020 * @param delta: parameter varying from 0 to 1 021 */ 022 public SignificantPMIRelevanceMetric(Index index, double delta) { 023 super(index); 024 if (delta<0 ||delta>1) 025 throw new IllegalArgumentException("Delta parameter should be in [0,1]"); 026 this.delta = delta; 027 } 028 029 @Override 030 public synchronized double getRelevance(OWLEntity entityA, OWLEntity entityB){ 031 double fA = index.getNumberOfDocumentsFor(entityA); 032 double fB = index.getNumberOfDocumentsFor(entityB); 033 double fAB = index.getNumberOfDocumentsFor(entityA, entityB); 034 035 double N = index.getTotalNumberOfDocuments(); 036 037 if(fA == 0 || fB == 0 || fAB == 0){ 038 return 0; 039 } 040 041 double pmi = Math.log(fAB / (fA*fB/N + Math.sqrt(fA)*Math.sqrt(Math.log(delta)/-2))); 042 043 return pmi; 044 } 045 046 @Override 047 public synchronized double getNormalizedRelevance(OWLEntity entityA, OWLEntity entityB){ 048 //TODO 049 return Double.NaN; 050 } 051 052}