package doser.entitydisambiguation.algorithms.collective.general;
import java.util.LinkedList;
import java.util.List;
import doser.entitydisambiguation.algorithms.SurfaceForm;
import doser.entitydisambiguation.algorithms.collective.CandidatePruning;
import doser.entitydisambiguation.algorithms.rules.RuleAdapation;
import doser.entitydisambiguation.dpo.DisambiguatedEntity;
import doser.entitydisambiguation.dpo.Response;
import doser.entitydisambiguation.knowledgebases.AbstractEntityCentricKBGeneral;
class CollectiveContextDriverGeneral {
static final int PREPROCESSINGCONTEXTSIZE = 200;
private Response[] currentResponse;
private List<SurfaceForm> rep;
private AbstractEntityCentricKBGeneral eckb;
CollectiveContextDriverGeneral(Response[] res, List<SurfaceForm> rep, AbstractEntityCentricKBGeneral eckb) {
super();
this.currentResponse = res;
this.rep = rep;
this.eckb = eckb;
}
void solve() {
// First candidate pruning
CandidatePruning pruning = new CandidatePruning(eckb);
pruning.prune(rep);
RuleAdapation rules = new RuleAdapation();
rules.addNoCandidatesCheckPluralRule(eckb);
rules.addNoCandidatesExpansionRule(eckb);
rules.performRuleChainBeforeCandidateSelection(rep);
CandidateReductionGeneralW2V w2vreduction = new CandidateReductionGeneralW2V(eckb, rep, 20, 5, 125, false, false);
w2vreduction.solve();
rep = w2vreduction.getRep();
w2vreduction = new CandidateReductionGeneralW2V(eckb, rep, 45, 5, 250, true, true);
w2vreduction.solve();
rep = w2vreduction.getRep();
FinalEntityDisambiguation finalDis = new FinalEntityDisambiguation(eckb, rep);
finalDis.setup();
finalDis.solve();
}
void generateResult() {
for (int i = 0; i < currentResponse.length; i++) {
SurfaceForm r = search(i);
if (currentResponse[i] == null && r != null && r.getCandidates().size() == 1) {
Response res = new Response();
List<DisambiguatedEntity> entList = new LinkedList<DisambiguatedEntity>();
DisambiguatedEntity ent = new DisambiguatedEntity();
ent.setEntityUri(r.getCandidates().get(0));
ent.setText("ToDoText");
entList.add(ent);
res.setDisEntities(entList);
res.setStartPosition(-1);
res.setSelectedText(r.getSurfaceForm());
currentResponse[i] = res;
}
}
}
private SurfaceForm search(int qryNr) {
for (SurfaceForm r : rep) {
if (r.getQueryNr() == qryNr) {
return r;
}
}
return null;
}
}