Just following up on this. I adjusted the previous pipeline to the one shown below and can generate temporal annotations.
// Token processing pipeline. builder.add(SimpleSegmentAnnotator.createAnnotatorDescription) builder.add(SentenceDetector.createAnnotatorDescription) builder.add(TokenizerAnnotatorPTB.createAnnotatorDescription) builder.add(LvgAnnotator.createAnnotatorDescription()) // Sometimes commented out. builder.add(ContextDependentTokenizerAnnotator.createAnnotatorDescription) builder.add(POSTagger.createAnnotatorDescription) builder.add(AnalysisEngineFactory.createEngineDescription(classOf[CopyNPChunksToLookupWindowAnnotations])) // Added. builder.add(AnalysisEngineFactory.createEngineDescription(classOf[RemoveEnclosedLookupWindows])) // Added. // Ontology mapping/confidence. builder.add( DefaultJCasTermAnnotator.createAnnotatorDescription( "my_dictionary.xml")) builder.add(ClearNLPDependencyParserAE.createAnnotatorDescription) builder.add(PolarityCleartkAnalysisEngine.createAnnotatorDescription) builder.add(HistoryCleartkAnalysisEngine.createAnnotatorDescription) builder.add(SubjectCleartkAnalysisEngine.createAnnotatorDescription) // Temporal additions. builder.add( BackwardsTimeAnnotator.createAnnotatorDescription( "models\\timeannotator.jar")) builder.add( EventAnnotator.createAnnotatorDescription( "models\\eventannotator.jar")) builder.add( AnalysisEngineFactory.createEngineDescription(classOf[AddEvent])) builder.add( EventTimeRelationAnnotator.createAnnotatorDescription("models\\eventtime.jar")) builder.createAggregateDescription As well, I can extract the generated temporal annotations with the below line of code: val relations = JCasUtil.select(jcas, classOf[TemporalTextRelation]).asScala However, the pipeline does not appear to be adding the temporal annotations to annotations of class EventMention or its subclasses. For example, if I have an instance of a DiseaseDisorderMention, calling d iseaseDisorderMention.getRelativeTemporalContext always returns a null. Am I missing pipeline steps which link the TemporalTextRelation instances to EventMention instances, or is it necessary to manually do this? Thanks, Mike On Tue, Feb 19, 2019 at 4:47 PM Michael Trepanier <m...@metistream.com> wrote: > Hi, > I have a pipeline defined by the below aggregate description (in Scala). > > aed = { > builder.add(SimpleSegmentAnnotator.createAnnotatorDescription) > builder.add(SentenceDetector.createAnnotatorDescription) > builder.add(TokenizerAnnotatorPTB.createAnnotatorDescription) > builder.add(ThreadSafeLvg.createAnnotatorDescription) > > builder.add(ContextDependentTokenizerAnnotator.createAnnotatorDescription) > builder.add(POSTagger.createAnnotatorDescription) > builder.add( > DefaultJCasTermAnnotator.createAnnotatorDescription( > "path/to/file.xml")) > builder.add(ClearNLPDependencyParserAE.createAnnotatorDescription) > builder.add(PolarityCleartkAnalysisEngine.createAnnotatorDescription) > builder.add(HistoryCleartkAnalysisEngine.createAnnotatorDescription) > builder.add(SubjectCleartkAnalysisEngine.createAnnotatorDescription) > // Temporal analysis steps. > builder.add(EventAnnotator.createAnnotatorDescription) > > builder.add(AnalysisEngineFactory.createEngineDescription(classOf[CopyPropertiesToTemporalEventAnnotator])) > > builder.add(DocTimeRelAnnotator.createAnnotatorDescription("path/to/default/model.jar")) > > builder.add(BackwardsTimeAnnotator.createAnnotatorDescription("path/to/default/model.jar")) > builder.createAggregateDescription > } > > At the end of the pipeline, I have added the four temporal pipeline stages > defined in > https://github.com/apache/ctakes/blob/ctakes-4.0.0/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/pipelines/FullTemporalExtractionPipeline.java > in order glean temporal information. > > However, when running this pipeline against the following text: "The > patient underwent a CT scan in April which did not reveal lesions in his > liver", the temporal related fields are always null. > > My processing pipeline goes as follows: > > 1) Run above pipeline. > 2) Glean all IdentifiedAnnotations from index. > 3) Filter to all EventMention type annotations (subclass of > IdentifiedAnnotation). > 4) Filter to all MedicationMention, ProcecureMention, > DiseaseDisorderMention, or SignSymptomMention annotations (subclass of > EventMention). > 5) Use these subclasses' "getRelativeTemporalContext" method to get the > TemporalTextRelations. > > After step 5, the TemporalTextRelations are always null. Am I going about > ascertaining this information the wrong way? Referencing > http://qiicr.org/CI4CC-Spring2016-ASW/assets/CI4CC2016-Finan.pdf, this > sentence should yield TemporalTextRelations. > > Thanks, > > Mike > > > > > -- > [image: MetiStream Logo - 500] > Mike Trepanier| Senior Engineer | MetiStream, Inc. | m...@metistream.com | > 845 - 270 - 3129 (m) | www.metistream.com > -- [image: MetiStream Logo - 500] Mike Trepanier| Senior Big Data Engineer | MetiStream, Inc. | m...@metistream.com | 845 - 270 - 3129 (m) | www.metistream.com