Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package servlets; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; import java.util.Comparator; import java.util.Properties; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.store.FSDirectory; import retriever.TrecDocRetriever; import org.apache.lucene.misc.HighFreqTerms; import org.apache.lucene.misc.TermStats; /** * * @author Debasis */ class TermStatsComparator implements Comparator<TermStats> { @Override public int compare(TermStats t, TermStats t1) { return new Long(t.docFreq).compareTo(new Long(t1.docFreq)); } } public class TermStatsViewer extends HttpServlet { TrecDocRetriever retriever; @Override public void init(ServletConfig config) throws ServletException { String propFileName = config.getInitParameter("configFile"); try { retriever = new TrecDocRetriever(propFileName); } catch (Exception ex) { ex.printStackTrace(); } } String analyze(String query) { StringBuffer buff = new StringBuffer(); try { Analyzer analyzer = retriever.getAnalyzer(); TokenStream stream = analyzer.tokenStream("dummy", new StringReader(query)); CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class); stream.reset(); while (stream.incrementToken()) { String term = termAtt.toString(); buff.append(term); break; } stream.end(); stream.close(); } catch (Exception ex) { ex.printStackTrace(); return query; } return buff.toString(); } boolean isNumber(String str) { int len = str.length(); for (int i = 0; i < len; i++) { if (!(str.charAt(i) >= '0' && str.charAt(i) <= '9')) return false; } return true; } /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ IndexReader reader = retriever.getReader(); String term = request.getParameter("term"); if (isNumber(term)) { TermStats[] termStats = null; try { termStats = HighFreqTerms.getHighFreqTerms(reader, Integer.parseInt(term), TrecDocRetriever.FIELD_ANALYZED_CONTENT, new TermStatsComparator()); } catch (Exception ex) { out.println("Error in obtaining term stats"); } if (termStats == null) out.println("Error in obtaining term stats"); StringBuffer responseBuff = new StringBuffer("<table><tbody>"); responseBuff.append("<tr>").append("<th>").append("Term").append("</th>").append("<th>") .append("Doc Freq").append("</th>").append("<th>").append("Coll Freq").append("</th>") .append("</tr>"); for (TermStats ts : termStats) { responseBuff.append("<tr>").append("<td>").append(ts.termtext.utf8ToString()).append("</td>") .append("<td>").append(ts.docFreq).append("</td>").append("<td>") .append(ts.totalTermFreq).append("</td>").append("</tr>"); } responseBuff.append("</tbody></table>"); out.println(responseBuff.toString()); } else { String analyzedTerm = analyze(term); Term t = new Term(TrecDocRetriever.FIELD_ANALYZED_CONTENT, analyzedTerm); int docFreq = reader.docFreq(t); long collFreq = reader.totalTermFreq(t); out.println("Doc freq: " + docFreq + " " + "Coll Freq: " + collFreq); } } } // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> /** * Handles the HTTP <code>GET</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP <code>POST</code> method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }