public static void main(String[] args) { EntityCollection.initEntityInfos(); for (int i = 0; i < altCorrect.length; i++) { altCorrect[i] = 0; } for (int i = 0; i < altScoreCorrect.length; i++) { altScoreCorrect[i] = 0; for (int j = 0; j < altCorrect.length; j++) { altCorrect_altScore[i][j] = 0; } } List<Integer> lst; BufferedReader reader = null; BufferedWriter writer = null; try { RemoteNLP.setUrlNlpServer(Watson.getRemoteNLPUrl()); reader = new BufferedReader( new InputStreamReader(new FileInputStream(new File(questionFile)), "UTF8")); writer = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(new File(outputFile)), "UTF-8")); writer.write(header); String line, evalOut; while ((line = reader.readLine()) != null) { evalOut = evalQuestion(line); writer.write(evalOut); } // Console output lst = new ArrayList<Integer>(Arrays.asList(altCorrect)); for (int k = 0; k < 5; k++) { lst = new ArrayList<Integer>(Arrays.asList(altCorrect_altScore[k])); System.out.println( "Correct " + altScoreCorrect[k] + " of " + questionCount + ", number of correct alternatives" + lst); int countCorrects = altScoreCorrect[k]; int i = 0; for (Integer alternative : lst) { countCorrects += alternative; i++; System.out.println( "Correct with " + i + " alternative : " + (double) countCorrects / (double) questionCount); } } reader.close(); writer.close(); } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(reader); IOUtils.closeQuietly(writer); } }
private static String evalQuestion(String line) { String evalOut = ""; String[] questionAnswer = line.split(COL_SEPARATE); String question = questionAnswer[0]; String expectedAnswer = questionAnswer[1]; String expectedQuestiontype = questionAnswer[2]; try { WatsonAnswer wAnswer = Watson.retrieveWatsonAnswer(question); Question pQuestion = new Question(question); List<PossibleAnswer> answers = new ArrayList<PossibleAnswer>(); List<QuizAnswer> allAnswers = new ArrayList<QuizAnswer>(); QuizAnswer firstAnswer = new QuizAnswer("D'Oh", 0.0, new ArrayList<String>()); Questiontype qType = Questiontype.unknown; List<QuizAnswer> altAnswers = new ArrayList<QuizAnswer>(); altAnswers.add(firstAnswer); if (wAnswer != null) { answers = Watson.getPossibleAnswers(pQuestion, wAnswer, numberOfSelectedAnswersForPipeline); allAnswers = QuizPipeline.executePipeline( pQuestion, answers, Watson.getRemoteNLPUrl(), numOfAltAnswers); qType = pQuestion.getQuestionType(); } StringBuilder sb = new StringBuilder(); sb.append(question); sb.append(COL_SEPARATE); sb.append(expectedQuestiontype); sb.append(COL_SEPARATE); sb.append(qType); sb.append(COL_SEPARATE); sb.append(expectedAnswer); sb.append(COL_SEPARATE); for (int k = 0; k < 5; k++) { if (k == 0) allAnswers = sortByValue(allAnswers, 0.06, "default"); if (k == 1) allAnswers = sortByValue(allAnswers, 0.08, "default"); if (k == 2) allAnswers = sortByValue(allAnswers, 0.1, "default"); if (k == 3) allAnswers = sortByValue(allAnswers, 0.12, "default"); if (k == 4) allAnswers = sortByValue(allAnswers, 0.14, "default"); altAnswers = allAnswers.subList(1, allAnswers.size()); firstAnswer = allAnswers.get(0); boolean found = false; if (isCorrect(firstAnswer, expectedAnswer)) { if (k == 0) correct++; altScoreCorrect[k]++; found = true; } String answerText = firstAnswer.getAnswer(); if (firstAnswer.getNeTypes().contains("UNKNOWN")) answerText = firstAnswer.getSentence(); sb.append(answerText); sb.append(COL_SEPARATE); sb.append(firstAnswer.getScore()); sb.append(COL_SEPARATE); Iterator<QuizAnswer> iterator = altAnswers.iterator(); iterator.next(); int numOfAnswers = 1; int i = 0; while (numOfAnswers <= numOfAltAnswers && iterator.hasNext()) { QuizAnswer answer = (QuizAnswer) iterator.next(); if (isCorrect(answer, expectedAnswer)) if (!found) { if (k == 0) altCorrect[i]++; altCorrect_altScore[k][i]++; found = true; } answerText = answer.getAnswer(); if (firstAnswer.getNeTypes().contains("UNKNOWN")) answerText = answer.getSentence(); sb.append(answerText); sb.append(COL_SEPARATE); sb.append(answer.getScore()); sb.append(COL_SEPARATE); numOfAnswers++; i++; } evalOut = sb.toString().trim(); evalOut = evalOut + "\n"; if (k == 0) questionCount++; } } catch (Exception e) { System.err.println("Error during Pipeline Execution: " + e.getMessage()); e.printStackTrace(); } return evalOut; }