/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.operator.similarity; import com.rapidminer.example.ExampleSet; import com.rapidminer.example.Tools; import com.rapidminer.operator.IOContainer; import com.rapidminer.operator.MissingIOObjectException; import com.rapidminer.operator.OperatorException; import com.rapidminer.operator.UserError; import com.rapidminer.operator.similarity.attributebased.ExampleBasedSimilarityMeasure; import com.rapidminer.parameter.ParameterType; import com.rapidminer.parameter.ParameterTypeStringCategory; import com.rapidminer.parameter.Parameters; import com.rapidminer.parameter.UndefinedParameterError; import com.rapidminer.tools.ClassNameMapper; /** * Some utilities for similarities. * * @author Michael Wurst, Ingo Mierswa * @version $Id: SimilarityUtil.java,v 1.7 2008/09/12 10:32:07 tobiasmalbrecht Exp $ */ public class SimilarityUtil { /** The parameter name for "similarity measure to apply" */ public static final String PARAMETER_MEASURE = "measure"; private static final String[] DEFAULT_SIM_MEASURES = { "com.rapidminer.operator.similarity.attributebased.MixedEuclideanDistance", "com.rapidminer.operator.similarity.attributebased.EuclideanDistance", "com.rapidminer.operator.similarity.attributebased.CosineSimilarity", "com.rapidminer.operator.similarity.attributebased.ManhattanDistance", "com.rapidminer.operator.similarity.attributebased.CamberraNumericalDistance", "com.rapidminer.operator.similarity.attributebased.ChebychevNumericalDistance", "com.rapidminer.operator.similarity.attributebased.CorrelationSimilarity", "com.rapidminer.operator.similarity.attributebased.DiceNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.DiceNumericalSimilarity", "com.rapidminer.operator.similarity.attributebased.InnerProductSimilarity", "com.rapidminer.operator.similarity.attributebased.JaccardNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.JaccardNumericalSimilarity", "com.rapidminer.operator.similarity.attributebased.KulczynskiNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.MaxProductSimilarity", "com.rapidminer.operator.similarity.attributebased.OverlapNumericalSimilarity", "com.rapidminer.operator.similarity.attributebased.RogersTanimotoNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.RussellRaoNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.SimpleMatchingNominalSimilarity", "com.rapidminer.operator.similarity.attributebased.NominalDistance", "de.tud.inf.operator.fingerprints.lnf.LnfEuclideanDistance", "de.tud.inf.operator.fingerprints.lnf.LnfManhattanDistance", "de.tud.inf.operator.fingerprints.lnf.LnfBhattacharyyaSimilarity", "de.tud.inf.operator.fingerprints.lnf.LnfCosineSimilarity", "de.tud.inf.operator.fingerprints.lbp.LbpEuclideanDistance", "de.tud.inf.operator.fingerprints.asc.GscEuclideanDistance", "de.tud.inf.operator.fingerprints.asc.GscEuclideanDistanceWithRot", "de.tud.inf.operator.fingerprints.asc.GscEuclidMultiLevel", "de.tud.inf.operator.fingerprints.asc.GscCosineSimilarity", "de.tud.inf.operator.fingerprints.asc.GscCosineSimilarityWithRot", "de.tud.inf.operator.fingerprints.asc.GscManhattanDistance", "de.tud.inf.operator.fingerprints.asc.GscManhattanDistanceWithRot" }; private static ClassNameMapper SIM_CLASSES_MAP = new ClassNameMapper(DEFAULT_SIM_MEASURES); public static ParameterType generateSimilarityParameter() { ParameterType result = new ParameterTypeStringCategory(PARAMETER_MEASURE, "similarity measure to apply", SIM_CLASSES_MAP.getShortClassNames(), SIM_CLASSES_MAP.getShortClassNames()[0]); result.setExpert(false); return result; } public static SimilarityMeasure resolveSimilarityMeasure(Parameters parameters, IOContainer ioContainer, ExampleSet es) throws OperatorException, MissingIOObjectException, UndefinedParameterError, UserError { Tools.checkAndCreateIds(es); String simClassName = (String) parameters.getParameter(PARAMETER_MEASURE); if ((ioContainer != null) && ioContainer.contains(SimilarityMeasure.class)) { if (simClassName != null) es.getLog().log("External similarity measure found. This measure is used instead of the one specified in the parameter \"measure\""); return ioContainer.get(SimilarityMeasure.class); } else if (simClassName != null) { ExampleBasedSimilarityMeasure sim = (ExampleBasedSimilarityMeasure) SIM_CLASSES_MAP.getInstantiation(simClassName); sim.init(es); return sim; } else { return null; } } }