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 package edu.uchsc.ccp.iaa.matcher; 029 030 import java.util.Collection; 031 import java.util.HashSet; 032 import java.util.Set; 033 034 import edu.uchsc.ccp.iaa.Annotation; 035 import edu.uchsc.ccp.iaa.IAA; 036 037 public class SpanMatcher implements Matcher { 038 /** 039 * This method will return an annotation with the same class and spans. If 040 * one does not exist, then it will return an annotation with the same spans 041 * (but different class). Otherwise, null is returned. 042 * 043 * @param annotation 044 * @param compareSetName 045 * @param excludeAnnotations 046 * @param iaa 047 * @param matchResult 048 * will be set to NONTRIVIAL_MATCH or NONTRIVIAL_NONMATCH. 049 * Trivial matches and non-matches are not defined for this 050 * matcher. 051 * @see edu.uchsc.ccp.iaa.matcher.Matcher#match(Annotation, String, Set, 052 * IAA, MatchResult) 053 * @see edu.uchsc.ccp.iaa.matcher.MatchResult#NONTRIVIAL_MATCH 054 * @see edu.uchsc.ccp.iaa.matcher.MatchResult#NONTRIVIAL_NONMATCH 055 * @see edu.uchsc.ccp.iaa.Annotation#getShortestAnnotation(Collection) 056 */ 057 058 public Annotation match(Annotation annotation, String compareSetName, Set<Annotation> excludeAnnotations, IAA iaa, 059 MatchResult matchResult) { 060 Annotation spanAndClassMatch = ClassAndSpanMatcher.match(annotation, compareSetName, iaa, excludeAnnotations); 061 if (spanAndClassMatch != null) { 062 matchResult.setResult(MatchResult.NONTRIVIAL_MATCH); 063 return spanAndClassMatch; 064 } 065 066 Set<Annotation> candidateAnnotations = new HashSet<Annotation>(iaa.getExactlyOverlappingAnnotations(annotation, 067 compareSetName)); 068 candidateAnnotations.remove(excludeAnnotations); 069 070 for (Annotation candidateAnnotation : candidateAnnotations) { 071 if (!excludeAnnotations.contains(candidateAnnotation)) { 072 matchResult.setResult(MatchResult.NONTRIVIAL_MATCH); 073 return candidateAnnotation; 074 } 075 } 076 matchResult.setResult(MatchResult.NONTRIVIAL_NONMATCH); 077 return null; 078 } 079 080 public String getName() { 081 return "Span matcher"; 082 } 083 084 public String getDescription() { 085 return "Annotations match if they have the same spans."; 086 } 087 088 public boolean returnsTrivials() { 089 return false; 090 } 091 092 }