package edu.isi.karma.research.modeling;
import java.util.Comparator;
import java.util.List;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
import com.google.common.collect.Multisets;
public class PatternComparator implements Comparator<Pattern> {
private List<String> types;
public PatternComparator() {
}
public PatternComparator(List<String> types) {
this.types = types;
}
@Override
public int compare(Pattern p1, Pattern p2) {
if (types != null) {
Multiset<String> sourceTypes = HashMultiset.create(this.types);
Multiset<String> p1Types = HashMultiset.create(p1.getTypes());
Multiset<String> p2Types = HashMultiset.create(p2.getTypes());
int a = Multisets.intersection(sourceTypes, p1Types).size();
int b = Multisets.intersection(sourceTypes, p2Types).size();
// pattern with more common type has higher priority
if (a > b)
return -1;
else if (a < b)
return 1;
}
if (p1.getLength() < p2.getLength()) // prefer more concise models
return -1;
else if (p1.getLength() > p2.getLength())
return 1;
else {
if (p1.getFrequency() > p2.getFrequency()) // prefer more frequent patterns
return -1;
else if (p1.getFrequency() < p2.getFrequency())
return 1;
else
return 0;
}
}
}