Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.29 KB | None | 0 0
  1. public ArrayList<Pair<Double, Integer>> search(HashMap<String, String> query, int offset, int k, boolean binary){
  2.        
  3.         ArrayList<String> terms = this.preprocess(query);
  4.        
  5.         HashMap<Integer, Double> scores = new HashMap<Integer, Double>();
  6.        
  7.         HashMap<Integer, Integer> length = new HashMap<Integer, Integer>();
  8.        
  9.         for(String term : terms){
  10.            
  11.             double idf = Frequency.idf(this.index, term);
  12.            
  13.             double tfq = 1; // vai ter uma funcao aqui que pega a frequencia na query
  14.            
  15.             double wtq = tfq*idf;
  16.            
  17.             for(IntegerPair doc : this.index.get(term)){
  18.                
  19.                 int id = doc.getId();
  20.                
  21.                 int tfd = doc.getFrequency(); // == wtd
  22.                
  23.                 if(!scores.containsKey(id)){
  24.                     scores.put(id, 0.0);
  25.                     length.put(id, 0);
  26.                 }
  27.                
  28.                 length.put(id,  tfd*tfd);
  29.                 scores.put(id, scores.get(id) + wtq * tfd);
  30.                
  31.             }
  32.            
  33.             ArrayList<Pair<Double, Integer>> results = new ArrayList<Pair<Double, Integer>>();
  34.            
  35.             for(Integer id : scores.keySet()){
  36.                 double normalized = scores.get(id)/Math.sqrt(length.get(id));
  37.                 Pair<Double, Integer> p = new Pair<Double, Integer>(normalized,id);
  38.                 results.add(p);
  39.             }
  40.            
  41.             Collections.sort(results);
  42.            
  43.             if(k < 0) return results;
  44.            
  45.             return (ArrayList<Pair<Double, Integer>>) results.subList(offset, offset+k);
  46.            
  47.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement