Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Relevance scores
- HashMap<String, Double> doc_relevance_scores = new HashMap<>();
- Integer even_odd = 0;
- /** Constructor */
- public Searcher(Index index, KGramIndex kgIndex)
- {
- this.index = index;
- this.kgIndex = kgIndex;
- hits_ranker = new HITSRanker(file_path_linksDavis, file_path_davisTitles, index);
- }
- private double log2(double x)
- {
- return (Math.log(x) / Math.log(2));
- }
- public void Caluclate_NDCG(PostingsList query_postings_list)
- {
- //DCG
- double dcg = 0.0;
- ArrayList<Double> dcg_arr = new ArrayList<>();
- System.err.println("");
- for(int a = 1; a <= 50; a++)
- {
- int query_doc_id = query_postings_list.get(a - 1).docID;
- String query_doc_name = getFileName(Index.docNames.get(query_doc_id));
- //if(query_doc_name.equals("Mathematics.f") && even_odd % 2 == 0) continue;
- if(doc_relevance_scores.containsKey(query_doc_name))
- {
- double rel_score = doc_relevance_scores.get(query_doc_name);
- double dcgp = rel_score / log2(a + 1);
- dcg_arr.add(dcgp);
- dcg += dcgp;
- }
- else
- {
- System.err.println("Key not found: " + query_doc_name);
- }
- }
- System.err.println("");
- System.err.println("\n" + "dcg: " + Double.toString(dcg));
- //IDCG
- double idcg = 0.0;
- ArrayList<Double> idcg_arr = new ArrayList<>();
- Collection<Double> temp = docs_and_scores.values();
- ArrayList<Double> sorted_relevance_scores = new ArrayList<>(temp);
- Collections.sort(sorted_relevance_scores, Collections.reverseOrder());
- for(int a = 1; a <= 50; a++)
- {
- double rel_score = sorted_relevance_scores.get(a);
- double idcgp = rel_score / log2(a + 1);
- idcg_arr.add(idcgp);
- idcg += idcgp;
- }
- System.err.println("idcg: " + Double.toString(idcg));
- //NDCG
- double ndcg = 0.0;
- for(int a = 0; a < 50; a++)
- {
- ndcg += dcg_arr.get(a) / idcg_arr.get(a);
- }
- System.err.println("ndcg: " + Double.toString(ndcg));
- System.err.println("even_odd: " + Integer.toString(even_odd) + "\n");
- //even_odd = (even_odd + 1) % 2;
- }
- public void Load_Relevance_Scores()
- {
- try {
- File file = new File("./ir/average_relevance.txt");
- FileReader fileReader = new FileReader(file);
- BufferedReader bufferedReader = new BufferedReader(fileReader);
- String readLine = "-1";
- while((readLine = bufferedReader.readLine()) != null)
- {
- String[] doc_score = readLine.split(" ");
- String doc_name = doc_score[0];
- double relevance_score = Integer.parseInt(doc_score[1]);
- doc_relevance_scores.put(doc_name, relevance_score);
- }
- bufferedReader.close();
- fileReader.close();
- } catch(Exception e){
- e.printStackTrace();
- }
- }
- /**
- * Searches the index for postings matching the query.
- * @return A postings list representing the result of the query.
- */
- public PostingsList search(Query query, QueryType queryType, RankingType rankingType, NormalizationType normType)
- {
- if (query.queryterm == null) return null;
- else if(query.queryterm.size() == 0) return null;
- else if(queryType == QueryType.INTERSECTION_QUERY) return IntersectionAlgorithm(query);
- else if(queryType == QueryType.PHRASE_QUERY) return PhraseAlgorithm(query);
- else if(queryType == QueryType.RANKED_QUERY)
- {
- if(rankingType == RankingType.TF_IDF)
- {
- PostingsList postings_list = TF_IDF_Algorithm(query, false, normType);
- boolean ndcg = true;
- if(ndcg == true) Caluclate_NDCG(postings_list);
- return postings_list;
- }
- else if(rankingType == RankingType.PAGERANK) return PAGERANK_Algorithm(query, false);
- else if(rankingType == RankingType.COMBINATION) return COMBINATION_Algorithm(query, normType);
- else if(rankingType == RankingType.HITSRANKER) return HITSRanker_Algorithm(query);
- else return null;
- }
- else return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment