001 /*
002 * The contents of this file are subject to the Mozilla Public
003 * License Version 1.1 (the "License"); you may not use this file
004 * except in compliance with the License. You may obtain a copy of
005 * the License at http://www.mozilla.org/MPL/
006 *
007 * Software distributed under the License is distributed on an "AS
008 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
009 * implied. See the License for the specific language governing
010 * rights and limitations under the License.
011 *
012 * The Original Code is Knowtator.
013 *
014 * The Initial Developer of the Original Code is University of Colorado.
015 * Copyright (C) 2005-2008. All Rights Reserved.
016 *
017 * Knowtator was developed by the Center for Computational Pharmacology
018 * (http://compbio.uchcs.edu) at the University of Colorado Health
019 * Sciences Center School of Medicine with support from the National
020 * Library of Medicine.
021 *
022 * Current information about Knowtator can be obtained at
023 * http://knowtator.sourceforge.net/
024 *
025 * Contributor(s):
026 * Philip V. Ogren <philip@ogren.info> (Original Author)
027 */
028
029 package edu.uchsc.ccp.iaa.html;
030
031 import java.io.File;
032 import java.io.IOException;
033 import java.io.PrintStream;
034 import java.text.NumberFormat;
035 import java.util.Map;
036 import java.util.Set;
037
038 import edu.uchsc.ccp.iaa.Annotation;
039 import edu.uchsc.ccp.iaa.AnnotationSpanIndex;
040 import edu.uchsc.ccp.iaa.IAA;
041 import edu.uchsc.ccp.iaa.matcher.SubclassMatcher;
042
043 public class SubclassMatcherHTML {
044
045 public static void printIAA(IAA iaa, SubclassMatcher matcher, File directory, int numberOfDocs,
046 Map<Annotation, String> annotationTexts, Map<Annotation, String> annotationTextNames) throws IOException {
047 String fileName = matcher.getName();
048 PrintStream html = new PrintStream(new File(directory, fileName + ".html"));
049
050 NumberFormat percentageFormat = NumberFormat.getPercentInstance();
051 percentageFormat.setMinimumFractionDigits(2);
052
053 html.println(IAA2HTML.initHTML(matcher.getName(), matcher.getDescription()));
054 html.println("<h2>" + iaa.getSetNames().size() + "-way IAA Results</h2>");
055
056 html.println("<p>");
057 html.println("<table border=1>\n");
058 html.println("<tr><td><b>IAA</b></td><td><b>matches</b></td><td><b>non-matches</b></td></tr>");
059
060 Set<String> sets = iaa.getSetNames();
061
062 Map<String, Set<Annotation>> allwayMatches = iaa.getNontrivialAllwayMatches();
063 Map<String, Set<Annotation>> allwayNonmatches = iaa.getNontrivialAllwayNonmatches();
064
065 Set<Annotation> allwayMatchesSingleSet = IAA2HTML.getSingleSet(allwayMatches);
066 Set<Annotation> allwayNonmatchesSingleSet = IAA2HTML.getSingleSet(allwayNonmatches);
067
068 int totalAllwayMatches = allwayMatchesSingleSet.size();
069 int totalAllwayNonmatches = allwayNonmatchesSingleSet.size();
070
071 double iaaScore = (double) totalAllwayMatches / ((double) totalAllwayMatches + (double) totalAllwayNonmatches);
072
073 html.println("<tr><td>" + percentageFormat.format(iaaScore) + "</td>" + "<td>" + totalAllwayMatches + "</td>"
074 + "<td>" + totalAllwayNonmatches + "</td></tr>");
075 html.println("</table>");
076
077 html.println("<br>IAA = matches / matches + non-matches");
078 html.println("<br>IAA calculated on " + numberOfDocs + " documents.");
079 html.println("<br>There are " + (totalAllwayMatches + totalAllwayNonmatches)
080 + " annotations with the class or subclass of " + matcher.getIAAClass());
081
082 Map<String, Set<Annotation>> nonmatches = iaa.getAllwayNonmatches();
083 Set<Annotation> nonmatchesSingleSet = IAA2HTML.getSingleSet(nonmatches);
084 AnnotationSpanIndex spanIndex = new AnnotationSpanIndex(nonmatchesSingleSet);
085
086 IAA2HTML.printMatchData(html, sets, fileName, directory, allwayMatches, annotationTexts, annotationTextNames,
087 matcher.getSubclasses(), iaa);
088
089 IAA2HTML.printNonmatchData(html, sets, fileName, directory, allwayNonmatches, spanIndex, annotationTexts,
090 annotationTextNames, matcher.getSubclasses(), iaa);
091
092 Map<String, Map<String, Set<Annotation>>> pairwiseMatches = iaa.getNontrivialPairwiseMatches();
093 Map<String, Map<String, Set<Annotation>>> pairwiseNonmatches = iaa.getNontrivialPairwiseNonmatches();
094
095 IAA2HTML.printPairwiseAgreement(html, sets, pairwiseMatches, pairwiseNonmatches, percentageFormat);
096
097 html.flush();
098 html.close();
099
100 }
101
102 }