private Map<String, Double> extractAdditionalFeatures(Map<String, Double> additionalFeatures, Document d,
			Query q, Map<String, Double> idfs) {
		
		Map<String, Double> newAdditionalFeatures = new HashMap<String, Double>();

		if (additionalFeatures.containsKey("bm25")) {
			try {
				newAdditionalFeatures.put("bm25", bm25scorer.getBM25Score(d, q, idfs));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		if (additionalFeatures.containsKey("smallestwindow")) {
			try {
				newAdditionalFeatures.put("smallestwindow", smScorer.getSmallestWindow(d, q, idfs));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		if (additionalFeatures.containsKey("pagerank")) {
			newAdditionalFeatures.put("pagerank", (double) d.page_rank);
		}
		
		if (additionalFeatures.containsKey("percentage_of_query_terms_in_body")) {
			newAdditionalFeatures.put("percentage_of_query_terms_in_body", scorer.getPercentageOfQueryTermsInField(d, q).get("body"));
		}
		
		if (additionalFeatures.containsKey("percentage_of_query_terms_in_anchors")) {
			newAdditionalFeatures.put("percentage_of_query_terms_in_anchors", scorer.getPercentageOfQueryTermsInField(d, q).get("body"));
		}
		
		if (additionalFeatures.containsKey("num_of_unique_anchors")) {
			newAdditionalFeatures.put("num_of_unique_anchors", (double) scorer.getNumOfUniqueAnchors(d, q));
		}
		
		if (additionalFeatures.containsKey("title_length")) {
			newAdditionalFeatures.put("title_length", (double) scorer.getTitleLength(d));
		}

		return newAdditionalFeatures;

	}