public String apply(String newDocPath) throws IOException {

    FileInputStream fis = new FileInputStream(new File(newDocPath));
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

    String newDocContent = "";
    String line = "";
    while (line != null) {
      line = br.readLine();
      newDocContent += line + " ";
    }
    double[] score = new double[numClasses];

    List<String> newDocTokens = Utils.tokenizeString(newDocContent);
    TreeMap<String, Integer> termFreq = new TreeMap<String, Integer>();

    for (String str : newDocTokens) {
      if (vocabulary.contains(str)) {
        if (!termFreq.containsKey(str)) termFreq.put(str, 1);
        else {
          int temp = termFreq.get(str) + 1;
          termFreq.put(str, temp);
        }
      }
    }
    br.close();

    for (int c = 0; c < numClasses; c++) {
      score[c] = Math.log10(prior[c]);
      for (String t : termFreq.keySet()) {
        score[c] += Math.log10(condprob[vocabulary.indexOf(t)][c]);
      }
    }

    // return class id
    return classNames[Utils.argmax(score)];
  }