package doser.server.actions.kbenrichment;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import doser.entitydisambiguation.backend.DisambiguationMainService;
import doser.entitydisambiguation.backend.AbstractDisambiguationTask;
import doser.entitydisambiguation.backend.DisambiguationTaskSingle;
import doser.entitydisambiguation.dpo.DisambiguatedEntity;
import doser.entitydisambiguation.dpo.EntityDisambiguationDPO;
import doser.entitydisambiguation.dpo.Response;
import doser.entitydisambiguation.properties.Properties;
/**
* Servlet implementation class DisplayEntityCandidatesServlet
*/
public class DisplayEntityCandidatesServlet extends HttpServlet {
public static final String INDEX = Properties.getInstance()
.getDBPediaIndex();
public static final int RETURNEDDOCUMENTS = 20;
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DisplayEntityCandidatesServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String label = request.getParameter("searchlabel");
Set<String> candidateSet = null;
if (label == null) {
candidateSet = new LinkedHashSet<String>();
} else {
candidateSet = checkLabelInIndex(label);
}
request.setAttribute("candidatesize",
String.valueOf(candidateSet.size()));
request.setAttribute("searchlabel", label);
int counter = 0;
for (String candidate : candidateSet) {
request.setAttribute(
(new StringBuffer("candidate").append(counter).toString()),
candidate);
counter++;
}
request.getRequestDispatcher("JSP/DisplayEntityCandidates.jsp")
.forward(request, response);
}
private Set<String> checkLabelInIndex(String label) {
Set<String> docSet = new LinkedHashSet<String>();
List<AbstractDisambiguationTask> lst = new LinkedList<AbstractDisambiguationTask>();
EntityDisambiguationDPO ent = new EntityDisambiguationDPO();
String sfs = label;
ent.setSelectedText(sfs);
AbstractDisambiguationTask task = new DisambiguationTaskSingle(ent);
task.setReturnNr(RETURNEDDOCUMENTS);
task.setKbIdentifier("biomedcopy", "EntityCentric");
task.setRetrieveDocClasses(true);
lst.add(task);
DisambiguationMainService.getInstance().disambiguate(lst);
for (int i = 0; i < lst.size(); i++) {
List<Response> res = lst.get(i).getResponse();
List<DisambiguatedEntity> disList = res.get(0).getDisEntities();
for (DisambiguatedEntity e : disList) {
docSet.add(e.getEntityUri());
}
}
return docSet;
}
}