//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.annotators.misc; import java.util.Collections; import org.apache.uima.UIMAException; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.fit.descriptor.ConfigurationParameter; import org.apache.uima.fit.factory.JCasFactory; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.ResourceInitializationException; import com.google.common.collect.ImmutableSet; import uk.gov.dstl.baleen.core.pipelines.orderers.AnalysisEngineAction; import uk.gov.dstl.baleen.exceptions.BaleenException; import uk.gov.dstl.baleen.types.semantic.Entity; import uk.gov.dstl.baleen.uima.BaleenAnnotator; import uk.gov.dstl.baleen.uima.utils.TypeSystemSingleton; import uk.gov.dstl.baleen.uima.utils.TypeUtils; /** * Annotate the entire document as a single entity * * * @baleen.javadoc */ public class FullDocument extends BaleenAnnotator { private Class<? extends Entity> et = null; /** * The type to annotate the whole document with * * @baleen.config uk.gov.dstl.baleen.types.semantic.Entity */ public static final String PARAM_TYPE = "type"; @ConfigurationParameter(name = PARAM_TYPE, defaultValue="uk.gov.dstl.baleen.types.semantic.Entity") private String type; @Override public void doInitialize(UimaContext aContext) throws ResourceInitializationException { try{ et = TypeUtils.getEntityClass(type, JCasFactory.createJCas(TypeSystemSingleton.getTypeSystemDescriptionInstance())); }catch(UIMAException | BaleenException e){ throw new ResourceInitializationException(e); } } @Override public void doProcess(JCas jCas) throws AnalysisEngineProcessException { String text = jCas.getDocumentText(); if(text == null){ getMonitor().info("Didn't annotate the document as it contained no content"); return; } try { Entity ret = et.getConstructor(JCas.class).newInstance(jCas); ret.setBegin(0); ret.setEnd(text.length()); ret.setConfidence(1.0f); addToJCasIndex(ret); getMonitor().info("Annotated full document as {}", type); } catch (Exception e) { throw new AnalysisEngineProcessException(e); } } @Override public AnalysisEngineAction getAction() { return new AnalysisEngineAction(Collections.emptySet(), ImmutableSet.of(et)); } }