コード例 #1
0
 private static void test(WordAligner wordAligner, List<SentencePair> testSentencePairs, Map<Integer, Alignment> testAlignments, boolean verbose) {
   int proposedSureCount = 0;
   int proposedPossibleCount = 0;
   int sureCount = 0;
   int proposedCount = 0;
   for (SentencePair sentencePair : testSentencePairs) {
     Alignment proposedAlignment = wordAligner.alignSentencePair(sentencePair);
     Alignment referenceAlignment = testAlignments.get(sentencePair.getSentenceID());
     if (referenceAlignment == null)
       throw new RuntimeException("No reference alignment found for sentenceID "+sentencePair.getSentenceID());
     if (verbose) System.out.println("Alignment:\n"+Alignment.render(referenceAlignment,proposedAlignment,sentencePair));
     for (int frenchPosition = 0; frenchPosition < sentencePair.getFrenchWords().size(); frenchPosition++) {
       for (int englishPosition = 0; englishPosition < sentencePair.getEnglishWords().size(); englishPosition++) {
         boolean proposed = proposedAlignment.containsSureAlignment(englishPosition, frenchPosition);
         boolean sure = referenceAlignment.containsSureAlignment(englishPosition, frenchPosition);
         boolean possible = referenceAlignment.containsPossibleAlignment(englishPosition, frenchPosition);
         if (proposed && sure) proposedSureCount += 1;
         if (proposed && possible) proposedPossibleCount += 1;
         if (proposed) proposedCount += 1;
         if (sure) sureCount += 1;
       }
     }
   }
   System.out.println("Precision: "+proposedPossibleCount/(double)proposedCount);
   System.out.println("Recall: "+proposedSureCount/(double)sureCount);
   System.out.println("AER: "+(1.0-(proposedSureCount+proposedPossibleCount)/(double)(sureCount+proposedCount)));
 }
コード例 #2
0
  private static void predict(WordAligner wordAligner, List<SentencePair> testSentencePairs, String path) throws IOException {
	BufferedWriter writer = new BufferedWriter(new FileWriter(path));
    for (SentencePair sentencePair : testSentencePairs) {
      Alignment proposedAlignment = wordAligner.alignSentencePair(sentencePair);
      for (int frenchPosition = 0; frenchPosition < sentencePair.getFrenchWords().size(); frenchPosition++) {
        for (int englishPosition = 0; englishPosition < sentencePair.getEnglishWords().size(); englishPosition++) {
          if (proposedAlignment.containsSureAlignment(englishPosition, frenchPosition)) {
        	writer.write(frenchPosition + "-" + englishPosition + " ");
          }
        }
      }
      writer.write("\n");
    }
    writer.close();
  }