Package edu.wiki.service

Source Code of edu.wiki.service.ESAServlet

package edu.wiki.service;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Locale;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;

import com.sun.org.apache.xerces.internal.dom.DocumentImpl;
import com.sun.org.apache.xerces.internal.parsers.DOMParser;

import edu.wiki.api.concept.IConceptIterator;
import edu.wiki.api.concept.IConceptVector;
import edu.wiki.search.ESASearcher;
import edu.wiki.search.NormalizedWikipediaDistance;

public class ESAServlet extends HttpServlet {
 
  private static final long serialVersionUID = 1L;
 
  protected ServletContext context;
 
  protected NormalizedWikipediaDistance nwd;
  protected ESASearcher esa;
 
  DOMParser parser = new DOMParser() ;
  protected Document doc = new DocumentImpl();
  // protected DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.US);
  protected DecimalFormat df = new DecimalFormat("#.##########");
 
 
 
  static Connection connection;
  static Statement stmtQuery;
 
  static String strTitles = "SELECT id,title FROM article WHERE id IN ";
 
  public static void initDB() throws ClassNotFoundException, SQLException, IOException {
    // Load the JDBC driver
    String driverName = "com.mysql.jdbc.Driver"; // MySQL Connector
    Class.forName(driverName);
   
    // read DB config
    InputStream is = ESASearcher.class.getResourceAsStream("/config/db.conf");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String serverName = br.readLine();
    String mydatabase = br.readLine();
    String username = br.readLine();
    String password = br.readLine();
    br.close();

    // Create a connection to the database
    String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
    connection = DriverManager.getConnection(url, username, password);
   
    stmtQuery = connection.createStatement();
    stmtQuery.setFetchSize(100);

  }
 
 
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
    context = config.getServletContext() ;
   
    nwd = new NormalizedWikipediaDistance(context.getInitParameter("index_path"));
    try {
      esa = new ESASearcher();
      initDB();
    } catch (Exception e) {
      e.printStackTrace();
      throw new ServletException();
    }
  }
 
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    doGet(request, response) ;

  }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    try {

      response.setHeader("Cache-Control", "no-cache");
      response.setCharacterEncoding("UTF-8") ;

      String task = request.getParameter("task") ;
     
      //redirect to home page if there is no task
      if (task==null) {
        response.setContentType("text/html");
        response.getWriter().append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><meta http-equiv=\"REFRESH\" content=\"0;url=" + context.getInitParameter("server_path") + "></head><body></body></html>") ;
        return ;
      }
     
      //process compare request
      if (task.equals("nwd")) {
        String term1 = request.getParameter("term1");
        String term2 = request.getParameter("term2") ;
               
        if (term1 == null || term2 == null) {
          response.setContentType("text/html");
          response.getWriter().append("-1") ;
          return ;
        }
        else {
          final double distance = nwd.getDistance(term1, term2);
          response.setContentType("text/html");
         
          if(distance == 10000.0){
            response.getWriter().append(String.valueOf(distance)) ;
          }
          else if(distance == -1){
            response.getWriter().append(String.valueOf(distance)) ;
          }
          else {
            response.getWriter().append(df.format(distance)) ;
          }
          return ;
        }
       
      }
     
      //process compare request
      if (task.equals("esa")) {
        String term1 = request.getParameter("term1");
        String term2 = request.getParameter("term2") ;
       
        if (term1 == null || term2 == null) {
          response.setContentType("text/html");
          response.getWriter().append("-1") ;
          return ;
        }
        else {
          final double sim = esa.getRelatedness(term1, term2);
          response.setContentType("text/html");
          if(sim == -1){
            response.getWriter().append(String.valueOf(sim)) ;
          }
          else {
            response.getWriter().append(df.format(sim)) ;
          }
          esa.clean();
          return ;
        }

      }
     
      //process compare request
      if (task.equals("vector")) {
        final String source = request.getParameter("source");       
        final String strLimit = request.getParameter("limit");
       
        int limit;
       
        if(strLimit == null){
          limit = 10;
        }
        else {
          limit = Integer.valueOf(strLimit);
        }
       
        if (source == null) {
          response.setContentType("text/html");
          response.getWriter().append("null") ;
          return ;
        }
        else {         
          response.setContentType("text/html");
         
          final IConceptVector cv = esa.getConceptVector(source);
         
          if(cv == null){
            response.getWriter().append("null") ;
          }
         
          else {
            final IConceptVector ncv = esa.getNormalVector(cv, limit);
            final IConceptIterator it = ncv.orderedIterator();
           
            HashMap<Integer, Double> vals = new HashMap<Integer, Double>(10);
            HashMap<Integer, String> titles = new HashMap<Integer, String>(10);
           
            String inPart = "(";
           
            int count = 0;
            while(it.next() && count < limit){
              inPart += it.getId() + ",";
              vals.put(it.getId(),it.getValue());
              count++;
            }
           
            inPart = inPart.substring(0,inPart.length()-1) + ")";
               
            ResultSet r = stmtQuery.executeQuery(strTitles + inPart);
            while(r.next()){
              titles.put(r.getInt(1), new String(r.getBytes(2),"UTF-8"));
            }
           
           
            it.reset();
            count = 0;
            while(it.next() && count < limit){
              int id = it.getId();
              response.getWriter().append(id + "\t" + titles.get(id) + "\t" + df.format(vals.get(id)) + "\n") ;
              count++;
            }
          }
          return ;
        }

      }
     
     

    } catch (Exception error) {
      response.reset() ;
      response.setContentType("application/xml");
      response.setHeader("Cache-Control", "no-cache");
      response.setCharacterEncoding("UTF8") ;

      response.getWriter().append("error");
    }
  }

}
TOP

Related Classes of edu.wiki.service.ESAServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.