/* * GS2MGPPSearch.java * Copyright (C) 2002 New Zealand Digital Library, http://www.nzdl.org * * This program is free software; you can redistribute it and/or modify * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.greenstone.gsdl3.service; // Greenstone classes import org.greenstone.mgpp.*; import org.greenstone.gsdl3.util.*; import org.w3c.dom.Element; import java.util.Vector; import java.util.ArrayList; import java.util.Collections; import org.apache.log4j.*; /** * * @author Shaoqun Wu */ public class GoogleNgramMGPPSearch extends GS2MGPPSearch { static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.GoogleNgramMGPPSearch.class.getName()); protected String default_max_docs = "-1"; protected String default_hits_per_page = "30"; /** constructor */ public GoogleNgramMGPPSearch(){ super(); } /** configure this service */ public boolean configure(Element info, Element extra_info) { if (!super.configure(info, extra_info)){ return false; } this.default_max_docs = "-1"; this.default_hits_per_page = "30"; this.does_stem = false; this.does_paging = true; return true; } // sort the doc_nums by their frequency protected String [] getDocIDs(Object query_result) { try{ Vector docs = ((MGPPQueryResult)query_result).getDocs(); //ArrayList docList_past = new ArrayList(); //ArrayList docList_future = new ArrayList(); //ArrayList docList_present = new ArrayList(); ArrayList docList = new ArrayList(); for (int d = 0; d < docs.size(); d++) { String num = Long.toString((((MGPPDocInfo) docs.elementAt(d)).num_)); String doc_id = internalNum2OID(num); DBInfo dbInfo = this.gs_doc_db.getInfo(doc_id); String fre = (String)dbInfo.getInfo("Frequency"); String tense = (String)dbInfo.getInfo("Tense"); if(!fre.equals("")){ // if (tense.equals("past")){ // docList_past.add(new DocWrapper(num,Integer.parseInt(fre),tense)); // } // else{ // if (tense.equals("future")){ // docList_future.add(new DocWrapper(num,Integer.parseInt(fre),tense)); // } // else{ // if(tense.equals("present")){ // docList_present.add(new DocWrapper(num,Integer.parseInt(fre),tense)); // } // } //} docList.add(new DocWrapper(num,Integer.parseInt(fre),tense)); } } //Collections.sort(docList_past); //Collections.sort(docList_future); //Collections.sort(docList_present); Collections.sort(docList); int i_pa = 0; int i_f = 0; int i_pre = 0; //String [] doc_nums = new String [docList_past.size()+docList_future.size()+docList_present.size()]; String [] doc_nums = new String [docList.size()]; int interval = 10; for(int d = 0; d < doc_nums.length; d++){ // for(;i_pre < docList_present.size() && interval > 0;i_pre++){ // doc_nums[d] = ((DocWrapper)docList_present.get(i_pre)).num; // d++; // interval--; // } // interval = 10+interval; // for(;i_pa < docList_past.size() && interval > 0;i_pa++){ // doc_nums[d] = ((DocWrapper)docList_past.get(i_pa)).num; // d++; // interval--; // } // interval = 10+interval; // for(;i_f < docList_future.size() && interval > 0;i_f++){ // doc_nums[d] = ((DocWrapper)docList_future.get(i_f)).num; // d++; // interval--; // } // interval = 10; doc_nums[d] = docList.get(d).num; } return doc_nums; } catch(Exception e){ e.printStackTrace(); } return null; } static class DocWrapper implements Comparable{ public int fre = 0; public String num = ""; public String tense = ""; public DocWrapper(String num, int fre, String tense){ this.fre = fre; this.num = num; this.tense = tense; } public int compareTo(Object o){ if (!(o instanceof DocWrapper)) return -1; DocWrapper docIn = (DocWrapper)o; if (num.equals(docIn.num)){ return 0; } if (fre > docIn.fre) return -1; return 1; } public boolean equals(Object o){ if (!(o instanceof DocWrapper)) return false; DocWrapper docIn = (DocWrapper)o; if (num.equals(docIn.num)){ return true; } return false; } } }