/* $Id: Metrics.h 15565 2013-01-07 14:27:05Z sloot $ $URL: https://ilk.uvt.nl/svn/trunk/sources/Timbl6/include/timbl/Metrics.h $ Copyright (c) 1998 - 2013 ILK - Tilburg University CLiPS - University of Antwerp This file is part of timbl timbl is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. timbl is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . For questions and suggestions, see: http://ilk.uvt.nl/software.html or send mail to: timbl@uvt.nl */ #ifndef TIMBL_METRICS_H #define TIMBL_METRICS_H #include namespace Timbl{ extern const double maxSimilarity; metricClass *getMetricClass( MetricType ); class metricClass { public: metricClass( MetricType m ): _type(m){}; virtual ~metricClass() {}; MetricType type() const { return _type; }; virtual bool isSimilarityMetric() const = 0; virtual bool isNumerical() const = 0; virtual bool isStorable() const = 0; virtual double distance( FeatureValue *, FeatureValue *, size_t=1, double = 1.0 ) const = 0; private: MetricType _type; }; class distanceMetricClass: public metricClass { public: distanceMetricClass( MetricType m ): metricClass(m){}; virtual ~distanceMetricClass() {}; bool isSimilarityMetric() const { return false; }; }; class OverlapMetric: public distanceMetricClass { public: OverlapMetric(): distanceMetricClass( Overlap ){}; bool isNumerical() const { return false; }; bool isStorable() const { return false; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class NumericMetricClass: public distanceMetricClass { public: NumericMetricClass( MetricType m ): distanceMetricClass( m ){}; virtual ~NumericMetricClass() {}; bool isNumerical() const { return true; }; bool isStorable() const { return false; }; }; class NumericMetric: public NumericMetricClass { public: NumericMetric(): NumericMetricClass( Numeric ){}; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class EuclideanMetric: public NumericMetricClass { public: EuclideanMetric(): NumericMetricClass( Euclidean ){}; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class ValueDiffMetric: public distanceMetricClass { public: ValueDiffMetric(): distanceMetricClass( ValueDiff ){}; bool isNumerical() const { return false; }; bool isStorable() const { return true; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class DiceMetric: public distanceMetricClass { public: DiceMetric(): distanceMetricClass( Dice ){}; bool isNumerical() const { return false; }; bool isStorable() const { return true; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class JeffreyMetric: public distanceMetricClass { public: JeffreyMetric(): distanceMetricClass( JeffreyDiv ){}; bool isNumerical() const { return false; }; bool isStorable() const { return true; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class JSMetric: public distanceMetricClass { public: JSMetric(): distanceMetricClass( JSDiv ){}; bool isNumerical() const { return false; }; bool isStorable() const { return true; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class LevenshteinMetric: public distanceMetricClass { public: LevenshteinMetric(): distanceMetricClass( Levenshtein ){}; bool isNumerical() const { return false; }; bool isStorable() const { return true; }; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class similarityMetricClass: public metricClass { public: similarityMetricClass( MetricType m ): metricClass( m ){}; virtual ~similarityMetricClass() {}; bool isSimilarityMetric() const { return true; }; bool isNumerical() const { return true; }; bool isStorable() const { return false; }; }; class CosineMetric: public similarityMetricClass { public: CosineMetric(): similarityMetricClass( Cosine ){}; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; class DotProductMetric: public similarityMetricClass { public: DotProductMetric(): similarityMetricClass( DotProduct ){}; double distance( FeatureValue *, FeatureValue *, size_t, double ) const; }; } #endif // TIMBL_METRICS_H