package edu.isi.karma.research.modeling; import java.util.Comparator; import edu.isi.karma.modeling.alignment.SemanticModel; import edu.isi.karma.rep.alignment.LabeledLink; public class LOD_SemanticModelComparator implements Comparator<SemanticModel> { private double computeCost(SemanticModel model) { if (model == null || model.getGraph() == null || model.getGraph().edgeSet().size() == 0) return 0.0; double cost = 0.0; for (LabeledLink e : model.getGraph().edgeSet()) { cost += e.getWeight(); } return cost; } // private List<Integer> computeCoherence(SemanticModel model) { // // if (model == null || model.getGraph() == null || model.getGraph().edgeSet().size() == 0) // return null; // // List<String> patternIds = new ArrayList<String>(); // // for (LabeledLink e : model.getGraph().edgeSet()) { // for (String s : e.getModelIds()) { // patternIds.add(s); // } // } // // Function<String, String> stringEqualiy = new Function<String, String>() { // @Override public String apply(final String s) { // return s; // } // }; // // Multimap<String, String> index = // Multimaps.index(patternIds, stringEqualiy); // // List<Integer> frequencies = new LinkedList<Integer>(); // for (String s : index.keySet()) { // frequencies.add(index.get(s).size()); // } // // Collections.sort(frequencies); // frequencies = Lists.reverse(frequencies); // return frequencies; // } // // private int compareCoherence(List<Integer> c1, List<Integer> c2) { // if (c1 == null || c2 == null) // return 0; // // for (int i = 0; i < c1.size(); i++) { // if (i < c2.size()) { // if (c1.get(i) > c2.get(i)) return -1; // else if (c1.get(i) < c2.get(i)) return +1; // } // } // if (c1.size() < c2.size()) // return -1; // else if (c2.size() < c1.size()) // return +1; // else // return 0; // } @Override public int compare(SemanticModel m1, SemanticModel m2) { // List<Integer> m1Coherence = computeCoherence(m1); // List<Integer> m2Coherence = computeCoherence(m2); // int coherence = compareCoherence(m1Coherence, m2Coherence); // if (coherence != 0) // return coherence; double m1Cost = computeCost(m1); double m2Cost = computeCost(m2); if (m1Cost < m2Cost) return -1; else if (m1Cost > m2Cost) return +1; return 0; } }