package edu.cmu.minorthird.text.learn.experiments; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Set; import edu.cmu.minorthird.text.AnnotatorLoader; import edu.cmu.minorthird.text.Details; import edu.cmu.minorthird.text.Span; import edu.cmu.minorthird.text.TextBase; import edu.cmu.minorthird.text.TextLabels; import edu.cmu.minorthird.text.Token; import edu.cmu.minorthird.text.gui.ZoomingTextLabelsViewer; import edu.cmu.minorthird.util.gui.Viewer; import edu.cmu.minorthird.util.gui.Visible; /** * A subset of another TextLabels. * * @author William Cohen */ public class SubTextLabels implements TextLabels,Visible{ protected SubTextBase subBase; protected TextLabels labels; public SubTextLabels(SubTextBase subBase,TextLabels labels){ this.subBase=subBase; this.labels=labels; } @Override public boolean isAnnotatedBy(String s){ return labels.isAnnotatedBy(s); } public void setAnnotatedBy(String s){ throw new UnsupportedOperationException( "can't do SubTextBase.setAnnotatedBy()"); } @Override public TextBase getTextBase(){ return subBase; } @Override public boolean hasDictionary(String dictionary){ return labels.hasDictionary(dictionary); } @Override public boolean inDict(Token token,String dict){ return labels.inDict(token,dict); } @Override public String getProperty(Token token,String prop){ return labels.getProperty(token,prop); } @Override public Set<String> getTokenProperties(){ return labels.getTokenProperties(); } @Override public String getProperty(Span span,String prop){ return subBase.contains(span)?labels.getProperty(span,prop):null; } @Override public Set<String> getSpanProperties(){ return labels.getSpanProperties(); } @Override public Iterator<Span> getSpansWithProperty(String prop){ return filter(labels.getSpansWithProperty(prop)); } @Override public Iterator<Span> getSpansWithProperty(String prop,String id){ return filter(labels.getSpansWithProperty(prop,id)); } @Override public boolean hasType(Span span,String type){ return subBase.contains(span)?labels.hasType(span,type):false; } @Override public Iterator<Span> instanceIterator(String type){ return filter(labels.instanceIterator(type)); } @Override public Iterator<Span> instanceIterator(String type,String documentId){ if(subBase.documentSpan(documentId)!=null) return labels.instanceIterator(type,documentId); else return Collections.<Span>emptySet().iterator(); } @Override public Set<String> getTypes(){ return labels.getTypes(); } @Override public Set<Span> getTypeSet(String type,String documentId){ return labels.getTypeSet(type,documentId); } @Override public boolean isType(String type){ return labels.isType(type); } @Override public Iterator<Span> closureIterator(String type){ return filter(labels.closureIterator(type)); } @Override public Iterator<Span> closureIterator(String type,String documentId){ if(subBase.documentSpan(documentId)!=null){ return labels.closureIterator(type,documentId); } else{ return Collections.<Span>emptySet().iterator(); } } @Override public String showTokenProp(TextBase base,String prop){ return labels.showTokenProp(base,prop); } @Override public Details getDetails(Span span,String type){ return (subBase.contains(span))?labels.getDetails(span,type):null; } @Override public void require(String annotationType,String fileToLoad){ labels.require(annotationType,fileToLoad); } @Override public void require(String annotationType,String fileToLoad, AnnotatorLoader loader){ labels.require(annotationType,fileToLoad,loader); } /** Annotate labels with annotator named fileToLoad */ @Override public void annotateWith(String annotationType,String fileToLoad){ labels.annotateWith(annotationType,fileToLoad); } private Iterator<Span> filter(Iterator<Span> i){ List<Span> list=new ArrayList<Span>(); while(i.hasNext()){ Span span=i.next(); if(subBase.contains(span)) list.add(span); } return list.iterator(); } /** Assert that Span span has the given value of the given property */ public void setProperty(Span span,String prop,String value){ System.out.println("Not used"); } @Override public Viewer toGUI(){ return new ZoomingTextLabelsViewer(this); } }