/**
   * Assign scores for similarity in n-gram frequency to the given question to every sentence in the
   * possible answer.
   */
  public void annotate(PossibleAnswer possibleAnswer) {
    // count n-gram frequencies of question text
    Question question = possibleAnswer.getQuestion();
    Text text = possibleAnswer.getAnnotatedText();

    NGramFrequencyMap questionFreq;
    for (NGramFreqCounter freqCounter : freqCounters) {
      questionFreq = freqCounter.extractFreqs(question.getAnnotatedText());

      NGramFrequencyMap answerFreq;
      Double distance;
      for (Sentence sentence : text.getSentences()) {
        // count n-gram frequencies for every sentence in the answer-text
        answerFreq = freqCounter.extractFreqs(sentence);
        // compare to question frequencies
        distance = distEval.evaluateDistance(questionFreq, answerFreq);
        // store distance in sentence
        sentence.addNgramDistance(extractDescription(freqCounter), distance);
      }
    }
  }
  public NGramFrequencyMap extractFreqs(Text annotations) {
    String text;

    if (removeStopWords) {
      List<Sentence> noStopwordsText = removeStopwords(annotations);
      text = "";
      for (Sentence sent : noStopwordsText) {
        text = text + " " + sent.getConcatTokens();
      }
      text = text.trim();
    } else text = annotations.toString();

    return extractFreqs(text);
  }