dawrehxyz

NDCG-NEW

Apr 30th, 2020
794
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.67 KB | None | 0 0
  1.     //Relevance scores
  2.     HashMap<String, Double> doc_relevance_scores = new HashMap<>();
  3.     Integer even_odd = 0;
  4.    
  5.     /** Constructor */
  6.     public Searcher(Index index, KGramIndex kgIndex)
  7.     {
  8.         this.index = index;
  9.         this.kgIndex = kgIndex;
  10.         hits_ranker = new HITSRanker(file_path_linksDavis, file_path_davisTitles, index);
  11.     }
  12.  
  13.     private double log2(double x)
  14.     {
  15.         return (Math.log(x) / Math.log(2));
  16.     }
  17.  
  18.     public void Caluclate_NDCG(PostingsList query_postings_list)
  19.     {
  20.         //DCG
  21.         double dcg = 0.0;
  22.         ArrayList<Double> dcg_arr = new ArrayList<>();
  23.         System.err.println("");
  24.         for(int a = 1; a <= 50; a++)
  25.         {
  26.             int query_doc_id = query_postings_list.get(a - 1).docID;
  27.             String query_doc_name = getFileName(Index.docNames.get(query_doc_id));
  28.             if(query_doc_name.equals("Mathematics.f") && even_odd % 2 == 0) continue;
  29.             if(doc_relevance_scores.containsKey(query_doc_name))
  30.             {
  31.                 double rel_score = doc_relevance_scores.get(query_doc_name);
  32.                 double val = (Math.pow(2, rel_score) - 1) / log2(a + 1);
  33.                 dcg += val;
  34.                 dcg_arr.add(dcg);
  35.             }
  36.             else
  37.             {
  38.                 System.err.println("Key not found: " + query_doc_name);
  39.             }
  40.         }
  41.         System.err.println("");
  42.  
  43.         //IDCG
  44.         double idcg = 0.0;
  45.         ArrayList<Double> idcg_arr = new ArrayList<>();
  46.         Collection<Double> temp = doc_relevance_scores.values();
  47.         ArrayList<Double> sorted_relevance_scores = new ArrayList<>(temp);
  48.         Collections.sort(sorted_relevance_scores, Collections.reverseOrder());
  49.         for(int a = 1; a <= 50; a++)
  50.         {
  51.             double rel_score = sorted_relevance_scores.get(a);
  52.             double val = (Math.pow(2, rel_score) - 1) / log2(a + 1);
  53.             idcg += val;
  54.             idcg_arr.add(idcg);
  55.         }
  56.  
  57.         //NDCG
  58.         double ndcg = dcg / idcg;
  59.         double ndcg_elementwise = 0.0;
  60.         for(int a = 0; a < dcg_arr.size(); a++)
  61.         {
  62.             ndcg_elementwise += dcg_arr.get(a) / idcg_arr.get(a);
  63.         }
  64.         System.err.println("\n" + "dcg: " + Double.toString(dcg));
  65.         System.err.println("idcg: " + Double.toString(idcg));
  66.         System.err.println("ndcg: " + Double.toString(ndcg));
  67.         System.err.println("ndcg elementwise: " + Double.toString(ndcg_elementwise));
  68.         System.err.println("even_odd: " + Integer.toString(even_odd) + "\n");
  69.         even_odd = (even_odd + 1) % 2;
  70.     }
  71.  
  72.     public void Load_Relevance_Scores()
  73.     {
  74.         try {
  75.             File file = new File("./ir/average_relevance.txt");
  76.             FileReader fileReader = new FileReader(file);
  77.             BufferedReader bufferedReader = new BufferedReader(fileReader);
  78.             String readLine = "-1";
  79.             while((readLine = bufferedReader.readLine()) != null)
  80.             {
  81.                 String[] doc_score = readLine.split(" ");
  82.                 String doc_name = doc_score[0];
  83.                 double relevance_score = Integer.parseInt(doc_score[1]);
  84.                 doc_relevance_scores.put(doc_name, relevance_score);
  85.             }
  86.             bufferedReader.close();
  87.             fileReader.close();
  88.         } catch(Exception e){
  89.             e.printStackTrace();
  90.         }
  91.     }
  92.  
  93.     /**
  94.      *  Searches the index for postings matching the query.
  95.      *  @return A postings list representing the result of the query.
  96.      */
  97.     public PostingsList search(Query query, QueryType queryType, RankingType rankingType, NormalizationType normType)
  98.     {
  99.         if (query.queryterm == null) return null;
  100.         else if(query.queryterm.size() == 0) return null;
  101.         else if(queryType == QueryType.INTERSECTION_QUERY) return IntersectionAlgorithm(query);
  102.         else if(queryType == QueryType.PHRASE_QUERY) return PhraseAlgorithm(query);
  103.         else if(queryType == QueryType.RANKED_QUERY)
  104.         {
  105.             if(rankingType == RankingType.TF_IDF)
  106.             {
  107.                 PostingsList postings_list = TF_IDF_Algorithm(query, false, normType);
  108.                 boolean ndcg = true;
  109.                 if(ndcg == true) Caluclate_NDCG(postings_list);
  110.                 return postings_list;
  111.             }
  112.             else if(rankingType == RankingType.PAGERANK) return PAGERANK_Algorithm(query, false);
  113.             else if(rankingType == RankingType.COMBINATION) return COMBINATION_Algorithm(query, normType);
  114.             else if(rankingType == RankingType.HITSRANKER) return HITSRanker_Algorithm(query);
  115.             else return null;
  116.         }
  117.         else return null;
  118.     }
Advertisement
Add Comment
Please, Sign In to add comment