dnet-hadoop/dhp-pace-core/src/main/java/eu/dnetlib/pace/tree/StringContainsMatch.java

68 lines
1.4 KiB
Java
Raw Normal View History

2023-07-06 10:28:53 +02:00
package eu.dnetlib.pace.tree;
2023-07-06 10:28:53 +02:00
import java.util.Map;
import eu.dnetlib.pace.config.Config;
import eu.dnetlib.pace.tree.support.AbstractStringComparator;
import eu.dnetlib.pace.tree.support.ComparatorClass;
/**
* The Class Contains match
*
* @author miconis
* */
@ComparatorClass("stringContainsMatch")
public class StringContainsMatch extends AbstractStringComparator {
2023-07-06 10:28:53 +02:00
private Map<String, String> params;
2023-07-06 10:28:53 +02:00
private boolean CASE_SENSITIVE;
private String STRING;
private String AGGREGATOR;
2023-07-06 10:28:53 +02:00
public StringContainsMatch(Map<String, String> params) {
super(params);
this.params = params;
2023-07-06 10:28:53 +02:00
// read parameters
CASE_SENSITIVE = Boolean.parseBoolean(params.getOrDefault("caseSensitive", "false"));
STRING = params.get("string");
AGGREGATOR = params.get("aggregator");
2023-07-06 10:28:53 +02:00
}
2023-07-06 10:28:53 +02:00
@Override
public double distance(final String a, final String b, final Config conf) {
2023-07-06 10:28:53 +02:00
String ca = a;
String cb = b;
if (!CASE_SENSITIVE) {
ca = a.toLowerCase();
cb = b.toLowerCase();
STRING = STRING.toLowerCase();
}
2023-07-06 10:28:53 +02:00
if (AGGREGATOR != null) {
switch (AGGREGATOR) {
case "AND":
if (ca.contains(STRING) && cb.contains(STRING))
return 1.0;
break;
case "OR":
if (ca.contains(STRING) || cb.contains(STRING))
return 1.0;
break;
case "XOR":
if (ca.contains(STRING) ^ cb.contains(STRING))
return 1.0;
break;
default:
return 0.0;
}
}
2023-07-06 10:28:53 +02:00
return 0.0;
}
}