001    /**
002     * NNretrievalMethod.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     * 03/01/2007
008     */
009    package jcolibri.method.retrieve.NNretrieval;
010    
011    import java.util.ArrayList;
012    import java.util.Collection;
013    import java.util.List;
014    
015    import jcolibri.cbrcore.CBRCase;
016    import jcolibri.cbrcore.CBRQuery;
017    import jcolibri.method.retrieve.RetrievalResult;
018    import jcolibri.method.retrieve.NNretrieval.similarity.GlobalSimilarityFunction;
019    import jcolibri.util.ProgressController;
020    
021    /**
022     * Performs a Nearest Neighbor numeric scoring comparing attributes. 
023     * It uses global similarity functions to compare compound attributes 
024     * (CaseComponents) and 
025     * local similarity functions to compare simple attributes.
026     * The configuration of this method is stored in the NNConfig object.
027     * @author Juan A. Recio-García
028     * @version 2.0
029     * @see jcolibri.method.retrieve.NNretrieval.NNConfig
030     */
031    public class NNScoringMethod {
032    
033            
034            @SuppressWarnings("unchecked")
035          /**
036           * Performs the NN scoring over a collection of cases comparing them with a query. 
037           * This method is configured through the NNConfig object.
038           */
039            public static Collection<RetrievalResult> evaluateSimilarity(Collection<CBRCase> cases, CBRQuery query, NNConfig simConfig)
040            {
041                    List<RetrievalResult> res = new ArrayList<RetrievalResult>();
042                    ProgressController.init(NNScoringMethod.class,"Numeric Similarity Computation", cases.size());
043                    GlobalSimilarityFunction gsf = simConfig.getDescriptionSimFunction();
044                    for(CBRCase _case: cases)
045                    {
046                            res.add(new RetrievalResult(_case, gsf.compute(_case.getDescription(), query.getDescription(), _case, query, simConfig)));
047                            ProgressController.step(NNScoringMethod.class);
048                    }
049                    java.util.Collections.sort(res);
050                    ProgressController.finish(NNScoringMethod.class);
051                    
052                    return res;
053            }
054    }