Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public ArrayList<Pair<Double, Integer>> search(HashMap<String, String> query, int offset, int k, boolean binary){
- ArrayList<String> terms = this.preprocess(query);
- HashMap<Integer, Double> scores = new HashMap<Integer, Double>();
- HashMap<Integer, Integer> length = new HashMap<Integer, Integer>();
- for(String term : terms){
- double idf = Frequency.idf(this.index, term);
- double tfq = 1; // vai ter uma funcao aqui que pega a frequencia na query
- double wtq = tfq*idf;
- for(IntegerPair doc : this.index.get(term)){
- int id = doc.getId();
- int tfd = doc.getFrequency(); // == wtd
- if(!scores.containsKey(id)){
- scores.put(id, 0.0);
- length.put(id, 0);
- }
- length.put(id, tfd*tfd);
- scores.put(id, scores.get(id) + wtq * tfd);
- }
- ArrayList<Pair<Double, Integer>> results = new ArrayList<Pair<Double, Integer>>();
- for(Integer id : scores.keySet()){
- double normalized = scores.get(id)/Math.sqrt(length.get(id));
- Pair<Double, Integer> p = new Pair<Double, Integer>(normalized,id);
- results.add(p);
- }
- Collections.sort(results);
- if(k < 0) return results;
- return (ArrayList<Pair<Double, Integer>>) results.subList(offset, offset+k);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement