dawrehxyz

NDCG

Apr 30th, 2020
827
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.49 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 dcgp = rel_score / log2(a + 1);
  33.                 dcg_arr.add(dcgp);
  34.                 dcg += dcgp;
  35.             }
  36.             else
  37.             {
  38.                 System.err.println("Key not found: " + query_doc_name);
  39.             }
  40.         }
  41.         System.err.println("");
  42.         System.err.println("\n" + "dcg: " + Double.toString(dcg));
  43.  
  44.         //IDCG
  45.         double idcg = 0.0;
  46.         ArrayList<Double> idcg_arr = new ArrayList<>();
  47.         Collection<Double> temp = docs_and_scores.values();
  48.         ArrayList<Double> sorted_relevance_scores = new ArrayList<>(temp);
  49.         Collections.sort(sorted_relevance_scores, Collections.reverseOrder());
  50.         for(int a = 1; a <= 50; a++)
  51.         {
  52.             double rel_score = sorted_relevance_scores.get(a);
  53.             double idcgp = rel_score / log2(a + 1);
  54.             idcg_arr.add(idcgp);
  55.             idcg += idcgp;
  56.         }
  57.         System.err.println("idcg: " + Double.toString(idcg));
  58.  
  59.         //NDCG
  60.         double ndcg = 0.0;
  61.         for(int a = 0; a < 50; a++)
  62.         {
  63.             ndcg += dcg_arr.get(a) / idcg_arr.get(a);
  64.         }
  65.         System.err.println("ndcg: " + Double.toString(ndcg));
  66.         System.err.println("even_odd: " + Integer.toString(even_odd) + "\n");
  67.         //even_odd = (even_odd + 1) % 2;
  68.     }
  69.  
  70.     public void Load_Relevance_Scores()
  71.     {
  72.         try {
  73.             File file = new File("./ir/average_relevance.txt");
  74.             FileReader fileReader = new FileReader(file);
  75.             BufferedReader bufferedReader = new BufferedReader(fileReader);
  76.             String readLine = "-1";
  77.             while((readLine = bufferedReader.readLine()) != null)
  78.             {
  79.                 String[] doc_score = readLine.split(" ");
  80.                 String doc_name = doc_score[0];
  81.                 double relevance_score = Integer.parseInt(doc_score[1]);
  82.                 doc_relevance_scores.put(doc_name, relevance_score);
  83.             }
  84.             bufferedReader.close();
  85.             fileReader.close();
  86.         } catch(Exception e){
  87.             e.printStackTrace();
  88.         }
  89.     }
  90.  
  91.     /**
  92.      *  Searches the index for postings matching the query.
  93.      *  @return A postings list representing the result of the query.
  94.      */
  95.     public PostingsList search(Query query, QueryType queryType, RankingType rankingType, NormalizationType normType)
  96.     {
  97.         if (query.queryterm == null) return null;
  98.         else if(query.queryterm.size() == 0) return null;
  99.         else if(queryType == QueryType.INTERSECTION_QUERY) return IntersectionAlgorithm(query);
  100.         else if(queryType == QueryType.PHRASE_QUERY) return PhraseAlgorithm(query);
  101.         else if(queryType == QueryType.RANKED_QUERY)
  102.         {
  103.             if(rankingType == RankingType.TF_IDF)
  104.             {
  105.                 PostingsList postings_list = TF_IDF_Algorithm(query, false, normType);
  106.                 boolean ndcg = true;
  107.                 if(ndcg == true) Caluclate_NDCG(postings_list);
  108.                 return postings_list;
  109.             }
  110.             else if(rankingType == RankingType.PAGERANK) return PAGERANK_Algorithm(query, false);
  111.             else if(rankingType == RankingType.COMBINATION) return COMBINATION_Algorithm(query, normType);
  112.             else if(rankingType == RankingType.HITSRANKER) return HITSRanker_Algorithm(query);
  113.             else return null;
  114.         }
  115.         else return null;
  116.     }
Advertisement
Add Comment
Please, Sign In to add comment