package edu.isistan.uima.unified.analysisengines.opennlp; import java.util.LinkedList; import java.util.List; import opennlp.tools.coref.DiscourseEntity; import opennlp.tools.coref.LinkerMode; import opennlp.tools.coref.mention.DefaultParse; import opennlp.tools.coref.mention.Mention; import opennlp.tools.lang.english.TreebankLinker; //import opennlp.tools.lang.english.TreebankParser; import opennlp.tools.parser.Parse; import opennlp.tools.parser.Parser; import org.apache.uima.UimaContext; import org.apache.uima.analysis_engine.AnalysisEngineProcessException; import org.apache.uima.cas.text.AnnotationIndex; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.resource.ResourceInitializationException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.uimafit.component.JCasAnnotator_ImplBase; import org.uimafit.descriptor.ConfigurationParameter; import org.uimafit.descriptor.ExternalResource; import edu.isistan.uima.unified.analysisengines.AnnotationGenerator; import edu.isistan.uima.unified.sharedresources.ProgressMonitorResource; import edu.isistan.uima.unified.typesystems.nlp.Sentence; @SuppressWarnings("unused") public class CoreferenceAnnotator extends JCasAnnotator_ImplBase { @ConfigurationParameter(name="parser") private String parserName; @ConfigurationParameter(name="linker") private String linkerName; // protected Parser parser; protected TreebankLinker linker; // @ExternalResource(key="monitor") private ProgressMonitorResource monitorResource; private IProgressMonitor subMonitor; @Override public void initialize(UimaContext aContext) throws ResourceInitializationException { super.initialize(aContext); try { //parserName = (String) aContext.getConfigParameterValue("parser"); //parser = TreebankParser.getParser(parserName); //linkerName = (String) aContext.getConfigParameterValue("linker"); linker = new TreebankLinker(linkerName, LinkerMode.TEST); } catch (Exception e) { e.printStackTrace(); } } @Override public void process(JCas aJCas) throws AnalysisEngineProcessException { if(parser == null || linker == null) return; // subMonitor = new SubProgressMonitor(monitorResource.getMonitor(), 1, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); subMonitor.subTask("Annotating coreferences (OpenNLP)"); // String docText = aJCas.getDocumentText(); AnnotationIndex<Annotation> sAnnotations = aJCas.getAnnotationIndex(Sentence.type); List<String> sentenceList = new LinkedList<String>(); for(Annotation sAnnotation : sAnnotations) { Sentence sentenceAnnotation = (Sentence) sAnnotation; String sentence = sentenceAnnotation.getCoveredText(); sentenceList.add(sentence); } String[] sentences = new String[sentenceList.size()]; for (int i = 0; i < sentences.length; i++) { sentences[i] = sentenceList.get(i); } // subMonitor.beginTask(this.getClass().getSimpleName(), sentences.length); // //int sentencePos = 0; for(int sentenceNumber = 0; sentenceNumber < sentences.length; sentenceNumber++) { String sentence = sentences[sentenceNumber]; Parse parse = null; //parse = TreebankParser.parseLine(sentence, parser, 1)[0]; DefaultParse dp = new DefaultParse(parse, sentenceNumber); Mention[] extents = linker.getMentionFinder().getMentions(dp); DiscourseEntity[] discourseEntities = linker.getEntities(extents); AnnotationGenerator.generateCoreference(0, 0, aJCas); // subMonitor.worked(1); } // subMonitor.done(); } @Override public void destroy() { super.destroy(); } }