package doser.entitydisambiguation.algorithms.collective.dbpedia; 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.EntityCentricKBDBpedia; class CollectiveAndContextDriver { static final int PREPROCESSINGCONTEXTSIZE = 200; private String topic; private Response[] currentResponse; private List<SurfaceForm> rep; private EntityCentricKBDBpedia eckb; CollectiveAndContextDriver(Response[] res, List<SurfaceForm> rep, EntityCentricKBDBpedia eckb, String topic) { super(); this.topic = topic; if (res.length != rep.size()) { throw new IllegalArgumentException(); } this.currentResponse = res; this.rep = rep; this.eckb = eckb; this.eckb.precomputeDoc2VecSimilarities(rep, PREPROCESSINGCONTEXTSIZE); } void solve() { // First candidate pruning CandidatePruning pruning = new CandidatePruning(eckb); pruning.prune(rep); if (topic != null) { TableColumnFilter cf = new TableColumnFilter(eckb, topic); cf.filter(rep); } TimeNumberDisambiguation timenumberdis = new TimeNumberDisambiguation(eckb); timenumberdis.solve(rep); LocationDisambiguation locationDis = new LocationDisambiguation(eckb); locationDis.solve(rep); RuleAdapation rules = new RuleAdapation(); rules.addNoCandidatesCheckPluralRule(eckb); rules.addNoCandidatesExpansionRule(eckb); rules.addUnambiguousToAmbiguousRule(eckb); rules.addPatternRule(eckb, topic); rules.addContextRule(eckb); rules.performRuleChainBeforeCandidateSelection(rep); CandidateReductionDBpediaW2V w2vreduction = new CandidateReductionDBpediaW2V(eckb, rep, 20, 5, 150, false, false); w2vreduction.solve(); rep = w2vreduction.getRep(); w2vreduction = new CandidateReductionDBpediaW2V(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; } }