1 package org.contineo.searchengine.comparision; 2 3 import java.util.ArrayList ; 4 import java.util.Collection ; 5 import java.util.Collections ; 6 import java.util.Hashtable ; 7 import java.util.Iterator ; 8 import java.util.List ; 9 10 import org.contineo.admin.Menu; 11 import org.contineo.admin.dao.MenuDAO; 12 import org.contineo.documan.Term; 13 import org.contineo.documan.dao.TermDAO; 14 15 20 public class Searcher { 21 22 25 public Searcher() { 26 } 27 28 36 public Collection findSimilarDocuments(int menuid, double minScore, String username) { 37 TermDAO termsDao = new TermDAO(); 38 Collection basicTerms = termsDao.findByMenuid(menuid); 39 Collection terms = termsDao.findByStem(menuid); 41 Collection <SearchResult> result = new ArrayList <SearchResult>(); 42 Iterator iter = terms.iterator(); 43 MenuDAO mdao = new MenuDAO(); 44 Collection coll2 = mdao.findMenuIdByUserName(username); 45 while (iter.hasNext()) { 46 Term term = (Term)iter.next(); 48 if (coll2.contains(String.valueOf(term.getMenuid()))) { 49 Collection docTerms = termsDao.findByMenuid(term.getMenuid()); 50 double score = calculateScore(basicTerms, docTerms); 51 if (score >= minScore) { 52 SearchResult sres = new SearchResult(); 53 Menu menu = mdao.findByPrimaryKey(term.getMenuid()); 54 sres.setScore(score); 55 sres.setIcon(menu.getMenuIcon()); 56 sres.setMenuid(String.valueOf(menu.getMenuId())); 57 sres.setName(menu.getMenuText()); 58 sres.setPath(menu.getMenuPath()); 59 result.add(sres); 60 } 61 } 62 } 63 Collections.sort((List )result, new SearchResultComparator()); 64 return result; 65 } 66 67 private double calculateScore(Collection refTerms, Collection terms) { 68 double score = 0.0d; 69 double abs1 = 0.0d; 70 double abs2 = 0.0d; 71 Hashtable table = convert(terms); 72 Iterator iter = refTerms.iterator(); 73 while (iter.hasNext()) { 74 Term term = (Term)iter.next(); 75 abs1 += term.getValue() * term.getValue(); 76 if (table.containsKey(term.getStem())) { 77 Double value = (Double )table.get(term.getStem()); 78 abs2 += value.doubleValue() * value.doubleValue(); 79 score += value.doubleValue() * term.getValue(); 80 } 81 } 82 return (2*score) / (abs1+abs2); 83 } 84 85 private Hashtable convert(Collection coll) { 86 Hashtable <String , Double > table = new Hashtable <String , Double >(coll.size()); 87 Iterator iter = coll.iterator(); 88 while (iter.hasNext()) { 89 Term term = (Term)iter.next(); 90 table.put(term.getStem(), new Double (term.getValue())); 91 } 92 return table; 93 } 94 } 95 | Popular Tags |