filebot/source/net/filebot/similarity/CrossPropertyMetric.java

56 lines
1.1 KiB
Java
Raw Normal View History

2014-04-19 02:30:29 -04:00
package net.filebot.similarity;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
2014-04-19 02:30:29 -04:00
import net.filebot.format.PropertyBindings;
public class CrossPropertyMetric implements SimilarityMetric {
2015-07-25 18:47:19 -04:00
private SimilarityMetric metric;
2015-07-25 18:47:19 -04:00
public CrossPropertyMetric(SimilarityMetric metric) {
this.metric = metric;
}
2015-07-25 18:47:19 -04:00
public CrossPropertyMetric() {
this.metric = new StringEqualsMetric();
}
2015-07-25 18:47:19 -04:00
@Override
public float getSimilarity(Object o1, Object o2) {
Map<String, Object> m1 = getProperties(o1);
if (m1.isEmpty())
return 0;
2015-07-25 18:47:19 -04:00
Map<String, Object> m2 = getProperties(o2);
if (m2.isEmpty())
return 0;
2015-07-25 18:47:19 -04:00
// works with commons keys
Set<String> keys = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
keys.addAll(m1.keySet());
keys.retainAll(m2.keySet());
if (keys.isEmpty())
return 0;
2015-07-25 18:47:19 -04:00
float feedback = 0;
for (String k : keys) {
try {
feedback += metric.getSimilarity(m1.get(k), m2.get(k));
} catch (Exception e) {
// ignore
}
}
2015-07-25 18:47:19 -04:00
return feedback / keys.size();
}
2015-07-25 18:47:19 -04:00
protected Map<String, Object> getProperties(Object object) {
2017-06-05 03:21:34 -04:00
return new PropertyBindings(object);
}
2015-07-25 18:47:19 -04:00
}