package doser.entitydisambiguation.algorithms;
import doser.entitydisambiguation.algorithms.collective.dbpedia.CollectiveDisambiguationDBpediaEntities;
import doser.entitydisambiguation.algorithms.collective.general.CollectiveDisambiguationGeneralEntities;
import doser.entitydisambiguation.backend.AbstractDisambiguationTask;
import doser.entitydisambiguation.backend.DisambiguationTaskSingle;
import doser.entitydisambiguation.dpo.EntityDisambiguationDPO;
import doser.entitydisambiguation.knowledgebases.KnowledgeBaseIdentifiers;
public class DisambiguationHandler {
private static final DisambiguationHandler instance;
static {
try {
instance = new DisambiguationHandler();
} catch (Exception e) {
throw new RuntimeException("An error occurred!", e);
}
}
private DisambiguationHandler() {
super();
}
public static DisambiguationHandler getInstance() {
return instance;
}
public AbstractDisambiguationAlgorithm getAlgorithm(AbstractDisambiguationTask task) {
AbstractDisambiguationAlgorithm algorithm = null;
if (task instanceof DisambiguationTaskSingle) {
DisambiguationTaskSingle t = (DisambiguationTaskSingle) task;
EntityDisambiguationDPO dpo = t.getEntityToDisambiguate();
if (dpo.getSetting() != null
&& (dpo.getSetting().equalsIgnoreCase("CSTable"))) {
algorithm = new EntityCentricAlgorithmCSTable();
} else if ((dpo.getSetting() != null
&& (dpo.getSetting().equalsIgnoreCase("NoContext"))
|| dpo.getContext() == null || dpo.getContext().equals("") || dpo
.getContext().equals(" "))) {
algorithm = new EntityCentricAlgorithmTableDefault();
} else if ((dpo.getSetting() != null)
&& (dpo.getSetting().equalsIgnoreCase("DocumentCentric"))) {
algorithm = new DocumentCentricAlgorithmDefault();
} else {
algorithm = new EntityCentricAlgorithmDefault();
}
} else {
if (task.getKbIdentifier().equals(KnowledgeBaseIdentifiers.Biomed)) {
algorithm = new CollectiveDisambiguationGeneralEntities();
} else {
algorithm = new CollectiveDisambiguationDBpediaEntities();
}
}
return algorithm;
}
}