You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by cl...@apache.org on 2014/11/05 22:31:54 UTC
svn commit: r1636965 - in
/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal: ae/
ae/feature/ eval/
Author: clin
Date: Wed Nov 5 21:31:53 2014
New Revision: 1636965
URL: http://svn.apache.org/r1636965
Log:
update some annotators and features for temporal relations on i2b2 data
Modified:
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventAdmissionTimeAnnotator.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventDischargeTimeAnnotator.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/ClosestVerbExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/DateAndMeasurementExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/EventPropertyExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/NumberOfEventsInTheSameSentenceExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/SectionHeaderExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TemporalAttributeFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TimeXExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/UmlsSingleFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfI2B2TemporalRelations.java
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventAdmissionTimeAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventAdmissionTimeAnnotator.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventAdmissionTimeAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventAdmissionTimeAnnotator.java Wed Nov 5 21:31:53 2014
@@ -105,7 +105,7 @@ public class EventAdmissionTimeAnnotator
new File(modelDirectory, "model.jar"));
}
- private CleartkExtractor contextExtractor;
+ private CleartkExtractor<EventMention, BaseToken> contextExtractor;
private NearbyVerbTenseXExtractor verbTensePatternExtractor;
private SectionHeaderExtractor sectionIDExtractor;
private ClosestVerbExtractor closestVerbExtractor;
@@ -119,10 +119,10 @@ public class EventAdmissionTimeAnnotator
@Override
public void initialize(UimaContext context) throws ResourceInitializationException {
super.initialize(context);
- CombinedExtractor1 baseExtractor = new CombinedExtractor1(
- new CoveredTextExtractor(),
- new TypePathExtractor(BaseToken.class, "partOfSpeech"));
- this.contextExtractor = new CleartkExtractor(
+ CombinedExtractor1<BaseToken> baseExtractor = new CombinedExtractor1<>(
+ new CoveredTextExtractor<BaseToken>(),
+ new TypePathExtractor<>(BaseToken.class, "partOfSpeech"));
+ this.contextExtractor = new CleartkExtractor<>(
BaseToken.class,
baseExtractor,
new Preceding(3),
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventDischargeTimeAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventDischargeTimeAnnotator.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventDischargeTimeAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventDischargeTimeAnnotator.java Wed Nov 5 21:31:53 2014
@@ -104,7 +104,7 @@ public class EventDischargeTimeAnnotator
new File(modelDirectory, "model.jar"));
}
- private CleartkExtractor contextExtractor;
+ private CleartkExtractor<EventMention, BaseToken> contextExtractor;
private NearbyVerbTenseXExtractor verbTensePatternExtractor;
private SectionHeaderExtractor sectionIDExtractor;
private ClosestVerbExtractor closestVerbExtractor;
@@ -118,10 +118,10 @@ public class EventDischargeTimeAnnotator
@Override
public void initialize(UimaContext context) throws ResourceInitializationException {
super.initialize(context);
- CombinedExtractor1 baseExtractor = new CombinedExtractor1(
- new CoveredTextExtractor(),
- new TypePathExtractor(BaseToken.class, "partOfSpeech"));
- this.contextExtractor = new CleartkExtractor(
+ CombinedExtractor1<BaseToken> baseExtractor = new CombinedExtractor1<>(
+ new CoveredTextExtractor<BaseToken>(),
+ new TypePathExtractor<>(BaseToken.class, "partOfSpeech"));
+ this.contextExtractor = new CleartkExtractor<>(
BaseToken.class,
baseExtractor,
new Preceding(3),
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/ClosestVerbExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/ClosestVerbExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/ClosestVerbExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/ClosestVerbExtractor.java Wed Nov 5 21:31:53 2014
@@ -49,7 +49,7 @@ public class ClosestVerbExtractor implem
@Override
public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
+ List<Feature> features = new ArrayList<>();
//1 get covering sentence:
Map<EventMention, Collection<Sentence>> coveringMap =
@@ -62,7 +62,7 @@ public class ClosestVerbExtractor implem
//2 get all Verbs within the same sentence as target event lies
if (sentList != null && !sentList.isEmpty()){
for(Sentence sent : sentList) {
- verbDistMap = new TreeMap<Integer, WordToken>();
+ verbDistMap = new TreeMap<>();
for ( WordToken wt : JCasUtil.selectCovered(view, WordToken.class, sent)) {
if (wt != null){
String pos = wt.getPartOfSpeech();
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/DateAndMeasurementExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/DateAndMeasurementExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/DateAndMeasurementExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/DateAndMeasurementExtractor.java Wed Nov 5 21:31:53 2014
@@ -47,7 +47,7 @@ public class DateAndMeasurementExtractor
@Override
public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
+ List<Feature> features = new ArrayList<>();
//1 get covering sentence:
Map<EventMention, Collection<Sentence>> coveringMap =
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/EventPropertyExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/EventPropertyExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/EventPropertyExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/EventPropertyExtractor.java Wed Nov 5 21:31:53 2014
@@ -43,7 +43,7 @@ public class EventPropertyExtractor impl
@Override
public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
+ List<Feature> features = new ArrayList<>();
//1 get event:
EventMention event = (EventMention)annotation;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/NumberOfEventsInTheSameSentenceExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/NumberOfEventsInTheSameSentenceExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/NumberOfEventsInTheSameSentenceExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/NumberOfEventsInTheSameSentenceExtractor.java Wed Nov 5 21:31:53 2014
@@ -109,11 +109,11 @@ RelationFeaturesExtractor {
private static boolean hasOverlappingSpan(EventMention cevent,
IdentifiedAnnotation arg) {
- if(cevent.getBegin()==arg.getBegin() && arg.getEnd()>=cevent.getEnd()){
+ if(cevent.getBegin()==arg.getBegin() || arg.getEnd()==cevent.getEnd()){
return true;
- }else if(arg.getBegin()<=cevent.getBegin() && cevent.getEnd()==arg.getEnd()){
+ }else if(arg.getBegin()<=cevent.getBegin() && cevent.getEnd()>=arg.getEnd()){
return true;
- }else if(arg.getBegin()<=cevent.getBegin() && arg.getEnd()>=cevent.getEnd()){ //if argument cover current (gold) event mention.
+ }else if(arg.getBegin()>=cevent.getBegin() && cevent.getEnd()<=arg.getEnd()){ //if argument cover current (gold) event mention.
return true;
}
return false;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/SectionHeaderExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/SectionHeaderExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/SectionHeaderExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/SectionHeaderExtractor.java Wed Nov 5 21:31:53 2014
@@ -35,37 +35,41 @@ import org.cleartk.ml.feature.extractor.
public class SectionHeaderExtractor implements FeatureExtractor1 {
- private String name;
+ private String name;
-// private Logger logger = Logger.getLogger(this.getClass().getName());
+ // private Logger logger = Logger.getLogger(this.getClass().getName());
- public SectionHeaderExtractor() {
- super();
- this.name = "SectionHeader";
-
- }
-
- @Override
- public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
-
- //1 get covering sentence:
- Map<EventMention, Collection<Segment>> coveringMap =
- JCasUtil.indexCovering(view, EventMention.class, Segment.class);
- EventMention targetTokenAnnotation = (EventMention)annotation;
- Collection<Segment> segList = coveringMap.get(targetTokenAnnotation);
-
- //2 get Verb Tense
- if (segList != null && !segList.isEmpty()){
- for(Segment seg : segList) {
- String segname = seg.getId();
- Feature feature = new Feature(this.name, segname);
- features.add(feature);
-// logger.info("found segment id: "+ segname);
- }
-
- }
- return features;
- }
+ public SectionHeaderExtractor() {
+ super();
+ this.name = "SectionHeader";
+
+ }
+
+ @Override
+ public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
+ List<Feature> features = new ArrayList<>();
+
+ //1 get covering sentence:
+ Map<EventMention, Collection<Segment>> coveringMap =
+ JCasUtil.indexCovering(view, EventMention.class, Segment.class);
+ EventMention targetTokenAnnotation = (EventMention)annotation;
+ Collection<Segment> segList = coveringMap.get(targetTokenAnnotation);
+
+ //2 get Verb Tense
+ if (segList != null && !segList.isEmpty()){
+ for(Segment seg : segList) {
+ String segname = seg.getId();
+ if (!segname.equals("SIMPLE_SEGMENT")){//remove simple segment
+ Feature feature = new Feature(this.name, segname);
+ features.add(feature);
+ }else{
+ continue;
+ }
+ // logger.info("found segment id: "+ segname);
+ }
+
+ }
+ return features;
+ }
}
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TemporalAttributeFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TemporalAttributeFeatureExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TemporalAttributeFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TemporalAttributeFeatureExtractor.java Wed Nov 5 21:31:53 2014
@@ -50,14 +50,14 @@ public class TemporalAttributeFeatureExt
if(arg1 instanceof EventMention && arg2 instanceof TimeMention){
event = JCasUtil.selectCovering(jCas, EventMention.class, arg1.getBegin(), arg1.getEnd()).get(0);
time = (TimeMention)arg2;
- if(event!=null && event.getEvent()!=null)
+ if(event!=null && event.getEvent()!=null && event.getEvent().getProperties().getContextualModality()!=null)
feats.add(new Feature("Event-Modality-", event.getEvent().getProperties().getContextualModality()));
feats.add(new Feature("Time-Class-", time.getTimeClass()));
}else if(arg2 instanceof EventMention && arg1 instanceof TimeMention){
time = (TimeMention)arg1;
event = JCasUtil.selectCovering(jCas, EventMention.class, arg2.getBegin(), arg2.getEnd()).get(0);
feats.add(new Feature("Timex-Class-", time.getTimeClass()));
- if(event!=null && event.getEvent()!=null)
+ if(event!=null && event.getEvent()!=null && event.getEvent().getProperties().getContextualModality()!=null)
feats.add(new Feature("Event-Modality-", event.getEvent().getProperties().getContextualModality()));
}
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TimeXExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TimeXExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TimeXExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/TimeXExtractor.java Wed Nov 5 21:31:53 2014
@@ -48,7 +48,7 @@ public class TimeXExtractor implements F
private String name;
// private TemporalPETExtractor path;
private TemporalAttributeFeatureExtractor attr;
- private TimeWordTypeExtractor timewd;
+ private TimeWordTypeExtractor<IdentifiedAnnotation> timewd;
// private TemporalSingleTreeExtractor treeExt;
// private Logger logger = Logger.getLogger(this.getClass().getName());
@@ -58,13 +58,13 @@ public class TimeXExtractor implements F
this.name = "TimeXFeature";
// this.path = new TemporalPETExtractor();
this.attr = new TemporalAttributeFeatureExtractor();
- this.timewd = new TimeWordTypeExtractor();
+ this.timewd = new TimeWordTypeExtractor<>();
// this.treeExt = new TemporalSingleTreeExtractor();
}
@Override
public List<Feature> extract(JCas view, Annotation annotation) throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
+ List<Feature> features = new ArrayList<>();
//1 get covering sentence:
Map<EventMention, Collection<Sentence>> coveringMap =
@@ -89,7 +89,7 @@ public class TimeXExtractor implements F
// }
if (sentList != null && !sentList.isEmpty()){
- timeDistMap = new TreeMap<Integer, IdentifiedAnnotation>();
+ timeDistMap = new TreeMap<>();
for(Sentence sent : sentList) {
for (TimeMention time : JCasUtil.selectCovered(view, TimeMention.class, sent)) {
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/UmlsSingleFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/UmlsSingleFeatureExtractor.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/UmlsSingleFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/UmlsSingleFeatureExtractor.java Wed Nov 5 21:31:53 2014
@@ -39,7 +39,7 @@ public class UmlsSingleFeatureExtractor
public List<Feature> extract(JCas jCas, Annotation focusAnnotation)
throws CleartkExtractorException {
- List<Feature> features = new ArrayList<Feature>();
+ List<Feature> features = new ArrayList<>();
JCas systemView = jCas;
// try {
@@ -79,7 +79,7 @@ public class UmlsSingleFeatureExtractor
}
private static CounterMap<String> getMentionTypes(List<EventMention> entities){
- CounterMap<String> typeCounts = new CounterMap<String>();
+ CounterMap<String> typeCounts = new CounterMap<>();
for(EventMention entityMention : entities) {
if(entityMention.getDiscoveryTechnique() == CONST.NE_DISCOVERY_TECH_DICT_LOOKUP)
typeCounts.add(String.valueOf(entityMention.getTypeID()));
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfI2B2TemporalRelations.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfI2B2TemporalRelations.java?rev=1636965&r1=1636964&r2=1636965&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfI2B2TemporalRelations.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfI2B2TemporalRelations.java Wed Nov 5 21:31:53 2014
@@ -18,7 +18,11 @@
*/
package org.apache.ctakes.temporal.eval;
+import java.io.BufferedWriter;
import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.net.URI;
import java.util.ArrayDeque;
import java.util.ArrayList;
@@ -30,7 +34,13 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ctakes.core.ae.CDASegmentAnnotator;
import org.apache.ctakes.relationextractor.eval.RelationExtractorEvaluation.HashableArguments;
+import org.apache.ctakes.temporal.ae.ConsecutiveSentencesEventEventRelationAnnotator;
+import org.apache.ctakes.temporal.ae.ConsecutiveSentencesEventTimeRelationAnnotator;
+import org.apache.ctakes.temporal.ae.EventTimeSelfRelationAnnotator;
+import org.apache.ctakes.temporal.ae.TemporalRelationRuleAnnotator;
+import org.apache.ctakes.temporal.ae.DocTimeRelAnnotator;
import org.apache.ctakes.temporal.ae.EventAdmissionTimeAnnotator;
import org.apache.ctakes.temporal.ae.EventDischargeTimeAnnotator;
import org.apache.ctakes.temporal.ae.EventEventRelationAnnotator;
@@ -42,11 +52,13 @@ import org.apache.ctakes.temporal.utils.
import org.apache.ctakes.temporal.utils.TLinkTypeArray2;
import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
import org.apache.ctakes.typesystem.type.relation.RelationArgument;
+import org.apache.ctakes.typesystem.type.relation.TemporalTextRelation;
import org.apache.ctakes.typesystem.type.textsem.EventMention;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.ctakes.typesystem.type.textsem.TimeMention;
import org.apache.ctakes.typesystem.type.textspan.Sentence;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.fit.pipeline.JCasIterator;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.CASException;
import org.apache.uima.collection.CollectionReader;
@@ -63,10 +75,17 @@ import org.apache.uima.resource.Resource
import org.apache.uima.util.FileUtils;
import org.cleartk.eval.AnnotationStatistics;
import org.cleartk.ml.jar.JarClassifierBuilder;
-import org.cleartk.ml.libsvm.LibSvmStringOutcomeDataWriter;
-import org.cleartk.ml.tksvmlight.TkSvmLightStringOutcomeDataWriter;
+//import org.cleartk.ml.libsvm.LibSvmStringOutcomeDataWriter;
+import org.cleartk.ml.liblinear.LibLinearStringOutcomeDataWriter;
+//import org.cleartk.classifier.tksvmlight.TKSVMlightStringOutcomeDataWriter;
import org.cleartk.ml.tksvmlight.model.CompositeKernel.ComboOperator;
import org.cleartk.util.ViewUriUtil;
+import org.apache.uima.fit.component.JCasAnnotator_ImplBase;
+import org.apache.uima.fit.descriptor.ConfigurationParameter;
+import org.apache.uima.fit.factory.AggregateBuilder;
+import org.apache.uima.fit.factory.AnalysisEngineFactory;
+import org.apache.uima.fit.pipeline.SimplePipeline;
+import org.apache.uima.fit.util.JCasUtil;
import com.google.common.base.Function;
import com.google.common.collect.HashMultimap;
@@ -121,6 +140,11 @@ EvaluationOfTemporalRelations_ImplBase{
private static final String EVENT_EVENT = "event_event";
private static final String EVENT_DISCHARGE = "event_dischargeTime";
private static final String EVENT_ADMISSION = "event_admissionTime";
+ private static final String TIME_DISCHARGE = "time_dischargeTime";
+ private static final String TIME_ADMISSION = "time_admissionTime";
+ // private static final String EVENT_ADMIT = "event_admission";
+ private static final String TEMP_CROSSSENT = "temp_crossSentence";
+ private static final String TEMPET_CROSSSENT = "eventTime_crossSentence";
public static void main(String[] args) throws Exception {
TempRelOptions options = CliFactory.parseArguments(TempRelOptions.class, args);
List<Integer> trainItems = null;
@@ -244,8 +268,15 @@ EvaluationOfTemporalRelations_ImplBase{
// if(this.baseline) return;
if(this.skipTrain) return;
AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
+ //add sectionizer
+ aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(
+ CDASegmentAnnotator.class,
+ CDASegmentAnnotator.PARAM_SECTIONS_FILE,
+ "org/apache/ctakes/temporal/ae/section/ccda_sections.txt"));
aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class, BinaryTextRelation.class));
- // aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveCrossSentenceRelations.class));
+ aggregateBuilder.add(DocTimeRelAnnotator
+ .createAnnotatorDescription("/org/apache/ctakes/temporal/ae/doctimerel/model.jar"));
+ // aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveCrossSentenceRelations.class));
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveNullArgumentRelations.class));
if(!this.useGoldAttributes){
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveGoldAttributes.class));
@@ -255,27 +286,49 @@ EvaluationOfTemporalRelations_ImplBase{
// aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(AddContain2Overlap.class));
// aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(AddTransitiveBeforeAndOnRelations.class));
}
- // aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveNonContainsRelations.class));
+ //output all long distances
+ // aggregateBuilder.add(
+ // AnalysisEngineFactory.createPrimitiveDescription(FindLongDisRelations.class));//AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class),
+ // CAS.NAME_DEFAULT_SOFA,
+ // GOLD_VIEW_NAME);
+ // aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveNonContainsRelations.class));
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(AddFlippedOverlap.class));//add flipped overlap instances to training data
- // aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveEventEventRelations.class));
- aggregateBuilder.add(EventTimeRelationAnnotator.createDataWriterDescription(
- // LibSvmStringOutcomeDataWriter.class,
- TkSvmLightStringOutcomeDataWriter.class,
- // TKLibSvmStringOutcomeDataWriter.class,
+ // aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(RemoveEventEventRelations.class));
+ //test rules:
+ // aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(TemporalRelationRuleAnnotator.class));
+
+ aggregateBuilder.add(EventTimeSelfRelationAnnotator.createDataWriterDescription(
+ // LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,
+ // TKSVMlightStringOutcomeDataWriter.class,
+ // TKLIBSVMStringOutcomeDataWriter.class,
// SVMlightStringOutcomeDataWriter.class,
new File(directory,EVENT_TIME),
params.probabilityOfKeepingANegativeExample));
aggregateBuilder.add(EventEventRelationAnnotator.createDataWriterDescription(
- LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,//TKSVMlightStringOutcomeDataWriter.class,//
+ // LIBLINEARStringOutcomeDataWriter.class,
new File(directory,EVENT_EVENT),
params.probabilityOfKeepingANegativeExample));
aggregateBuilder.add(EventDischargeTimeAnnotator.createDataWriterDescription(
- LibSvmStringOutcomeDataWriter.class,
+ // LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,
new File(directory,EVENT_DISCHARGE)));
aggregateBuilder.add(EventAdmissionTimeAnnotator.createDataWriterDescription(
- LibSvmStringOutcomeDataWriter.class,
+ // LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,
new File(directory,EVENT_ADMISSION)));
+ aggregateBuilder.add(ConsecutiveSentencesEventEventRelationAnnotator.createDataWriterDescription(
+ // LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,
+ new File(directory,TEMP_CROSSSENT),
+ params.probabilityOfKeepingANegativeExample));
+ aggregateBuilder.add(ConsecutiveSentencesEventTimeRelationAnnotator.createDataWriterDescription(
+ // LibSvmStringOutcomeDataWriter.class,
+ LibLinearStringOutcomeDataWriter.class,
+ new File(directory,TEMPET_CROSSSENT),
+ params.probabilityOfKeepingANegativeExample));
SimplePipeline.runPipeline(collectionReader, aggregateBuilder.createAggregate());
String[] optArray;
@@ -302,21 +355,32 @@ EvaluationOfTemporalRelations_ImplBase{
}
// HideOutput hider = new HideOutput();
- JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_TIME), optArray);
- JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_EVENT), "-h","0","-c", "1000");
- JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_DISCHARGE), "-h","0","-c", "1000");
- JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_ADMISSION), "-h","0","-c", "1000");
+ JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_TIME), "-c", "0.001");//"-h","0","-c", "1000");//optArray);//"-c", "0.05");//
+ JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_EVENT), "-c", "0.001");
+ JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_DISCHARGE), "-c", "0.001");
+ JarClassifierBuilder.trainAndPackage(new File(directory,EVENT_ADMISSION), "-c", "0.001");
+ // JarClassifierBuilder.trainAndPackage(new File(directory,TIME_ADMISSION), "-h","0","-c", "1000");
+ // JarClassifierBuilder.trainAndPackage(new File(directory,TIME_DISCHARGE), "-h","0","-c", "1000");
+ JarClassifierBuilder.trainAndPackage(new File(directory,TEMP_CROSSSENT), "-c", "0.001");
+ JarClassifierBuilder.trainAndPackage(new File(directory,TEMPET_CROSSSENT), "-c", "0.001");
// hider.restoreOutput();
// hider.close();
}
+ @SuppressWarnings("deprecation")
@Override
protected AnnotationStatistics<String> test(CollectionReader collectionReader, File directory)
throws Exception {
AggregateBuilder aggregateBuilder = this.getPreprocessorAggregateBuilder();
+ //add sectionizer
+ aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(
+ CDASegmentAnnotator.class,
+ CDASegmentAnnotator.PARAM_SECTIONS_FILE,
+ "org/apache/ctakes/temporal/ae/section/ccda_sections.txt"));
aggregateBuilder.add(CopyFromGold.getDescription(EventMention.class, TimeMention.class));
-
- // aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(
+ aggregateBuilder.add(DocTimeRelAnnotator
+ .createAnnotatorDescription("/org/apache/ctakes/temporal/ae/doctimerel/model.jar"));
+ // aggregateBuilder.add(AnalysisEngineFactory.createPrimitiveDescription(
// RemoveCrossSentenceRelations.class,
// RemoveCrossSentenceRelations.PARAM_SENTENCE_VIEW,
// CAS.NAME_DEFAULT_SOFA,
@@ -348,20 +412,28 @@ EvaluationOfTemporalRelations_ImplBase{
// GOLD_VIEW_NAME);
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveRelations.class));
+
+ aggregateBuilder.add(EventAdmissionTimeAnnotator.createAnnotatorDescription(new File(directory,EVENT_ADMISSION)));
+ aggregateBuilder.add(EventDischargeTimeAnnotator.createAnnotatorDescription(new File(directory,EVENT_DISCHARGE)));
+ // aggregateBuilder.add(TimexAdmissionTimeAnnotator.createAnnotatorDescription(new File(directory,TIME_ADMISSION)));
+ // aggregateBuilder.add(TimexDischargeTimeAnnotator.createAnnotatorDescription(new File(directory,TIME_DISCHARGE)));
+
aggregateBuilder.add(this.baseline ? RecallBaselineEventTimeRelationAnnotator.createAnnotatorDescription(directory) :
- EventTimeRelationAnnotator.createEngineDescription(new File(directory,EVENT_TIME)));
+ EventTimeSelfRelationAnnotator.createEngineDescription(new File(directory,EVENT_TIME)));
aggregateBuilder.add(EventEventRelationAnnotator.createAnnotatorDescription(new File(directory,EVENT_EVENT)));
- aggregateBuilder.add(EventDischargeTimeAnnotator.createAnnotatorDescription(new File(directory,EVENT_DISCHARGE)));
- aggregateBuilder.add(EventAdmissionTimeAnnotator.createAnnotatorDescription(new File(directory,EVENT_ADMISSION)));
-
- if (this.useClosure) {//add closure for system output
- aggregateBuilder.add(
- AnalysisEngineFactory.createEngineDescription(AddClosure.class),//AnalysisEngineFactory.createEngineDescription(AddTransitiveContainsRelations.class),
- GOLD_VIEW_NAME,
- CAS.NAME_DEFAULT_SOFA
- );
- }
-
+ aggregateBuilder.add(ConsecutiveSentencesEventEventRelationAnnotator.createAnnotatorDescription(new File(directory,TEMP_CROSSSENT)));
+ aggregateBuilder.add(ConsecutiveSentencesEventTimeRelationAnnotator.createAnnotatorDescription(new File(directory,TEMPET_CROSSSENT)));
+ aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(TemporalRelationRuleAnnotator.class));
+
+
+ // if (this.useClosure) {//add closure for system output
+ // aggregateBuilder.add(
+ // AnalysisEngineFactory.createPrimitiveDescription(AddClosure.class),//AnalysisEngineFactory.createPrimitiveDescription(AddTransitiveContainsRelations.class),
+ // GOLD_VIEW_NAME,
+ // CAS.NAME_DEFAULT_SOFA
+ // );
+ // }
+
if(this.i2b2Output != null){
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(WriteI2B2XML.class, WriteI2B2XML.PARAM_OUTPUT_DIR, this.i2b2Output), "TimexView", CAS.NAME_DEFAULT_SOFA);
}
@@ -635,8 +707,8 @@ EvaluationOfTemporalRelations_ImplBase{
// return goodSys;
// }
-
- public static class RemoveEventEventRelations extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+/**
+ public static class RemoveEventEventRelations extends JCasAnnotator_ImplBase {
public static final String PARAM_RELATION_VIEW = "RelationView";
@ConfigurationParameter(name = PARAM_RELATION_VIEW)
private String relationViewName = CAS.NAME_DEFAULT_SOFA;
@@ -668,6 +740,7 @@ EvaluationOfTemporalRelations_ImplBase{
}
}
+ */
public static class RemoveNullArgumentRelations extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
@Override
@@ -684,22 +757,22 @@ EvaluationOfTemporalRelations_ImplBase{
}
}
- /* public static class RemoveNonTLINKRelations extends JCasAnnotator_ImplBase {
- @Override
- public void process(JCas jCas) throws AnalysisEngineProcessException {
- for (BinaryTextRelation relation : Lists.newArrayList(JCasUtil.select(
- jCas,
- BinaryTextRelation.class))) {
- if (!(relation instanceof TemporalTextRelation)) {
- relation.getArg1().removeFromIndexes();
- relation.getArg2().removeFromIndexes();
- relation.removeFromIndexes();
- }
- }
- }
- }*/
-
- public static class RemoveCrossSentenceRelations extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+ public static class RemoveNonTLINKRelations extends JCasAnnotator_ImplBase {
+ @Override
+ public void process(JCas jCas) throws AnalysisEngineProcessException {
+ for (BinaryTextRelation relation : Lists.newArrayList(JCasUtil.select(
+ jCas,
+ BinaryTextRelation.class))) {
+ if (!(relation instanceof TemporalTextRelation)) {
+ relation.getArg1().removeFromIndexes();
+ relation.getArg2().removeFromIndexes();
+ relation.removeFromIndexes();
+ }
+ }
+ }
+ }
+ /**
+ public static class RemoveCrossSentenceRelations extends JCasAnnotator_ImplBase {
public static final String PARAM_SENTENCE_VIEW = "SentenceView";
@@ -748,9 +821,10 @@ EvaluationOfTemporalRelations_ImplBase{
}
}
}
+ */
-
- public static class RemoveRelations extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+
+ public static class RemoveRelations extends JCasAnnotator_ImplBase {
@Override
public void process(JCas jCas) throws AnalysisEngineProcessException {
for (BinaryTextRelation relation : Lists.newArrayList(JCasUtil.select(
@@ -763,182 +837,9 @@ EvaluationOfTemporalRelations_ImplBase{
}
}
- /**
- * Holds a set of parameters for a relation extraction model
- */
- // public static class ParameterSettings {
- // public boolean classifyBothDirections;
- //
- // public float probabilityOfKeepingANegativeExample;
- //
- // public String svmKernel;
- //
- // public int svmKernelIndex;
- //
- // public double svmCost;
- //
- // public double svmGamma;
- //
- // public String secondKernel;
- // public int secondKernelIndex;
- // public CompositeKernel.ComboOperator comboOperator;
- // public double tkWeight;
- // public double lambda;
- //
- // public AnnotationStatistics<String> stats;
- //
- // static List<String> SVM_KERNELS = Arrays.asList(
- // "linear",
- // "polynomial",
- // "radial basis function",
- // "sigmoid",
- // "user",
- // "tk");
- //
- // public ParameterSettings(
- // boolean classifyBothDirections,
- // float probabilityOfKeepingANegativeExample,
- // String svmKernel,
- // double svmCost,
- // double svmGamma,
- // String secondKernel,
- // CompositeKernel.ComboOperator comboOperator,
- // double tkWeight,
- // double lambda) {
- // super();
- // this.classifyBothDirections = classifyBothDirections;
- // this.probabilityOfKeepingANegativeExample = probabilityOfKeepingANegativeExample;
- // this.svmKernel = svmKernel;
- // this.svmKernelIndex = SVM_KERNELS.indexOf(this.svmKernel);
- // if (this.svmKernelIndex == -1) {
- // throw new IllegalArgumentException("Unrecognized kernel: " + this.svmKernel);
- // }
- // this.svmCost = svmCost;
- // this.svmGamma = svmGamma;
- // this.secondKernel = secondKernel;
- // this.secondKernelIndex = SVM_KERNELS.indexOf(this.secondKernel);
- // this.comboOperator = comboOperator;
- // this.tkWeight = tkWeight;
- // this.lambda = lambda;
- // }
- //
- // @Override
- // public String toString() {
- // StringBuffer buff = new StringBuffer();
- // // buff.append("Bothdirections=");
- // // buff.append(classifyBothDirections);
- // // buff.append(",downsamplingratio=");
- // // buff.append(probabilityOfKeepingANegativeExample);
- // buff.append(",Kernel=");
- // buff.append(svmKernel);
- // buff.append(",Cost=");
- // buff.append(svmCost);
- // buff.append(",Gamma=");
- // buff.append(svmGamma);
- // buff.append(",secondKernel=");
- // buff.append(secondKernel);
- // buff.append(",operator=");
- // buff.append(comboOperator);
- // buff.append(",tkWeight=");
- // buff.append(tkWeight);
- // buff.append(",lambda=");
- // buff.append(lambda);
- // return buff.toString();
- // }
- // }
-
- public static class AddTransitiveContainsRelations extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
-
- @Override
- public void process(JCas jCas) throws AnalysisEngineProcessException {
-
- // collect many-to-many mappings of containment relations
- Multimap<Annotation, Annotation> isContainedIn = HashMultimap.create();
- Multimap<Annotation, Annotation> contains = HashMultimap.create();
- Set<BinaryTextRelation> containsRelations = Sets.newHashSet();
- for (BinaryTextRelation relation : JCasUtil.select(jCas, BinaryTextRelation.class)) {
- if (relation.getCategory().equals("CONTAINS")) {
- containsRelations.add(relation);
- Annotation arg1 = relation.getArg1().getArgument();
- Annotation arg2 = relation.getArg2().getArgument();
- contains.put(arg1, arg2);
- isContainedIn.put(arg2, arg1);
- }
- }
-
- // look for X -> Y -> Z containment chains and add X -> Z relations
- Deque<Annotation> todo = new ArrayDeque<>(isContainedIn.keySet());
- while (!todo.isEmpty()) {
- Annotation next = todo.removeFirst();
- for (Annotation parent : Lists.newArrayList(isContainedIn.get(next))) {
- for (Annotation grandParent : Lists.newArrayList(isContainedIn.get(parent))) {
- if (!isContainedIn.containsEntry(next, grandParent)) {
- isContainedIn.put(next, grandParent);
- contains.put(grandParent, next);
-
- // once X -> Z has been added, we need to re-do all W where W -> X
- for (Annotation child : contains.get(next)) {
- todo.add(child);
- }
- }
- }
- }
- }
-
- // remove old relations
- for (BinaryTextRelation relation : containsRelations) {
- relation.getArg1().removeFromIndexes();
- relation.getArg2().removeFromIndexes();
- relation.removeFromIndexes();
- }
-
- // add new, transitive relations
- for (Annotation contained : isContainedIn.keySet()) {
- for (Annotation container : isContainedIn.get(contained)) {
- RelationArgument arg1 = new RelationArgument(jCas);
- arg1.setArgument(container);
- RelationArgument arg2 = new RelationArgument(jCas);
- arg2.setArgument(contained);
- BinaryTextRelation relation = new BinaryTextRelation(jCas);
- relation.setArg1(arg1);
- relation.setArg2(arg2);
- relation.setCategory("CONTAINS");
- arg1.addToIndexes();
- arg2.addToIndexes();
- relation.addToIndexes();
- }
- }
- }
-
- }
-
- public static class AddContain2Overlap extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
-
- @Override
- public void process(JCas jCas) throws AnalysisEngineProcessException {
-
- Set<BinaryTextRelation> containsRelations = Sets.newHashSet();
- for (BinaryTextRelation relation : JCasUtil.select(jCas, BinaryTextRelation.class)) {
- if (relation.getCategory().equals("CONTAINS")) {
- containsRelations.add(relation);
- }
- }
-
- for (BinaryTextRelation relation : containsRelations) {
- RelationArgument arg1 = (RelationArgument) relation.getArg1().clone();
- RelationArgument arg2 = (RelationArgument) relation.getArg2().clone();
- BinaryTextRelation newrelation = new BinaryTextRelation(jCas);
- newrelation.setArg1(arg1);
- newrelation.setArg2(arg2);
- newrelation.setCategory("OVERLAP");
- arg1.addToIndexes();
- arg2.addToIndexes();
- newrelation.addToIndexes();
- }
- }
- }
+
- public static class AddFlippedOverlap extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+ public static class AddFlippedOverlap extends JCasAnnotator_ImplBase {
@Override
public void process(JCas jCas) throws AnalysisEngineProcessException {
@@ -978,6 +879,94 @@ EvaluationOfTemporalRelations_ImplBase{
}
}
+ public static class FindLongDisRelations extends JCasAnnotator_ImplBase {
+
+ @Override
+ public void process(JCas jCas) throws AnalysisEngineProcessException {
+
+ try{
+ JCas goldView = jCas.getView(GOLD_VIEW_NAME);
+ JCas systemView = jCas.getView(CAS.NAME_DEFAULT_SOFA);
+ File outf = new File("target/eval/temporal-relations/RelationDistance.txt");
+ File outI = new File("target/eval/temporal-relations/LongRelationInstances.txt");
+ File outA = new File("target/eval/temporal-relations/AdjacentRelationInstances.txt");
+ BufferedWriter output = new BufferedWriter(new FileWriter(outf, true));
+ PrintWriter outIns = new PrintWriter(new BufferedWriter(new FileWriter(outI, true)));
+ PrintWriter outAdj = new PrintWriter(new BufferedWriter(new FileWriter(outA, true)));
+
+ Set<TemporalTextRelation> temporalRelations = Sets.newHashSet();
+ for (TemporalTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
+ temporalRelations.add(relation);
+ }
+
+ for (BinaryTextRelation orelation : temporalRelations) {
+ Annotation argA = orelation.getArg1().getArgument();
+ Annotation argB = orelation.getArg2().getArgument();
+ //suppose arg1 is before arg2
+ int begin = argA==null? 1000000 : argA.getEnd();
+ int end = argB==null? 0: argB.getBegin();
+
+ if(begin < end){
+ int sentencesInBetween = 0;
+ List<Sentence> sentences = JCasUtil.selectCovered(systemView, Sentence.class, begin, end);
+
+ sentencesInBetween = sentences==null? 0: sentences.size();
+
+ boolean adjacentSent = false;
+ if(sentencesInBetween == 0){//differentiate relations in adjacent sentences
+ //find the sentence after argA
+ List<Sentence> follwingSentences = JCasUtil.selectFollowing(systemView, Sentence.class, argA, 1);
+ if(follwingSentences !=null && follwingSentences.size()>=1){
+ Sentence nextSent = follwingSentences.get(0);
+ if( nextSent.getBegin()>end){
+ sentencesInBetween =-1;//find within-sentence relations
+ }else{//find adjacent-sentence relations
+ adjacentSent = true;
+ }
+ }else{//if there is no following sentence
+ List<Sentence> prededingSentences = JCasUtil.selectPreceding(systemView, Sentence.class, argB, 1);
+ if(prededingSentences==null || prededingSentences.size()==0){
+ sentencesInBetween = -1;
+ }else{
+ Sentence preSent = prededingSentences.get(0);
+ if( preSent.getEnd()< begin){
+ sentencesInBetween =-1;//find within-sentence relations
+ }else{//find adjacent-sentence relations
+ adjacentSent = true;
+ }
+ }
+ }
+ }
+
+ String text = systemView.getDocumentText();
+ int windowBegin = Math.max(0, argA.getBegin() - 50);
+ int windowEnd = Math.min(text.length(), argB.getEnd() + 50);
+ if (adjacentSent){
+ outAdj.println("++++++++++Adjacent X-sentence Relation in "+ ViewUriUtil.getURI(jCas).toString() + "+++++++");
+ outAdj.println(text.substring(windowBegin,argA.getBegin())+"["+argA.getCoveredText()+"] "+ text.substring(argA.getEnd(), argB.getBegin()) +" ["+argB.getCoveredText()+"]"+text.substring(argB.getEnd(),windowEnd));
+ }
+
+ output.append(sentencesInBetween+"\n");
+ if (sentencesInBetween > 5){
+ outIns.println("++++++++++Long Distance Relation in "+ ViewUriUtil.getURI(jCas).toString() + "+++++++");
+ outIns.println(text.substring(windowBegin,argA.getBegin())+"["+argA.getCoveredText()+"] "+ text.substring(argA.getEnd(), argB.getBegin()) +" ["+argB.getCoveredText()+"]"+text.substring(argB.getEnd(),windowEnd));//"["+argA.getCoveredText()+"] "+ systemView.getDocumentText().substring(argA.getEnd(), argB.getBegin()) +" ["+argB.getCoveredText()+"]");
+ }
+ }
+ }
+ output.close();
+ outIns.close();
+ outAdj.close();
+ }catch (IOException e) {
+ //exception handling left as an exercise for the reader
+ } catch (CASException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+
+ }
+ }
+
public static class AddClosure extends JCasAnnotator_ImplBase {
@Override
@@ -1079,108 +1068,4 @@ EvaluationOfTemporalRelations_ImplBase{
return false;
}
}
-
- // public static class AddTransitiveBeforeAndOnRelations extends JCasAnnotator_ImplBase {
- //
- // @Override
- // public void process(JCas jCas) throws AnalysisEngineProcessException {
- //
- // // collect many-to-many mappings of containment relations
- // Multimap<Annotation, Annotation> contains = HashMultimap.create();
- // Multimap<Annotation, Annotation> before = HashMultimap.create();
- // Multimap<Annotation, Annotation> endson = HashMultimap.create();
- // Multimap<Annotation, Annotation> beginson = HashMultimap.create();
- // Set<BinaryTextRelation> beforeRel = Sets.newHashSet();
- //
- // for (BinaryTextRelation relation : JCasUtil.select(jCas, BinaryTextRelation.class)) {
- // if (relation.getCategory().equals("CONTAINS")) {
- // Annotation arg1 = relation.getArg1().getArgument();
- // Annotation arg2 = relation.getArg2().getArgument();
- // contains.put(arg1, arg2);
- // }else if (relation.getCategory().equals("BEFORE")) {
- // Annotation arg1 = relation.getArg1().getArgument();
- // Annotation arg2 = relation.getArg2().getArgument();
- // before.put(arg1, arg2);
- // beforeRel.add(relation);
- // }else if (relation.getCategory().equals("ENDS-ON")) {
- // Annotation arg1 = relation.getArg1().getArgument();
- // Annotation arg2 = relation.getArg2().getArgument();
- // endson.put(arg1, arg2);
- // if (!endson.containsEntry(arg2, arg1)) {
- // endson.put(arg2, arg1);
- // }
- // }else if (relation.getCategory().equals("BEGINS-ON")) {
- // Annotation arg1 = relation.getArg1().getArgument();
- // Annotation arg2 = relation.getArg2().getArgument();
- // beginson.put(arg1, arg2);
- // if (!beginson.containsEntry(arg2, arg1)) {
- // beginson.put(arg2, arg1);
- // }
- // }
- // }
- //
- // // for A BEFORE B, check if A and B Contain anything
- // for (BinaryTextRelation brelation : beforeRel) {
- // Annotation argA = brelation.getArg1().getArgument();
- // Annotation argB = brelation.getArg2().getArgument();
- // //add contained before
- // for (Annotation childA : contains.get(argA)) {
- // for (Annotation childB : contains.get(argB)) {
- // if (!before.containsEntry(childA, childB)) {
- // //create a new before relation:
- // RelationArgument arg1 = new RelationArgument(jCas);
- // arg1.setArgument(childA);
- // RelationArgument arg2 = new RelationArgument(jCas);
- // arg2.setArgument(childB);
- // BinaryTextRelation relation = new BinaryTextRelation(jCas);
- // relation.setArg1(arg1);
- // relation.setArg2(arg2);
- // relation.setCategory("BEFORE");
- // arg1.addToIndexes();
- // arg2.addToIndexes();
- // relation.addToIndexes();
- // before.put(childA, childB);
- // }
- // }
- // }
- // //add ends-on A
- // for (Annotation endsOnA : endson.get(argA)) {
- // if (!before.containsEntry(endsOnA, argB)) {
- // //create a new before relation:
- // RelationArgument arg1 = new RelationArgument(jCas);
- // arg1.setArgument(endsOnA);
- // RelationArgument arg2 = new RelationArgument(jCas);
- // arg2.setArgument(argB);
- // BinaryTextRelation relation = new BinaryTextRelation(jCas);
- // relation.setArg1(arg1);
- // relation.setArg2(arg2);
- // relation.setCategory("BEFORE");
- // arg1.addToIndexes();
- // arg2.addToIndexes();
- // relation.addToIndexes();
- // before.put(endsOnA, argB);
- // }
- // }
- // //add begins-on B
- // for (Annotation beginsOnB : beginson.get(argB)) {
- // if (!before.containsEntry(argA, beginsOnB)) {
- // //create a new before relation:
- // RelationArgument arg1 = new RelationArgument(jCas);
- // arg1.setArgument(argA);
- // RelationArgument arg2 = new RelationArgument(jCas);
- // arg2.setArgument(beginsOnB);
- // BinaryTextRelation relation = new BinaryTextRelation(jCas);
- // relation.setArg1(arg1);
- // relation.setArg2(arg2);
- // relation.setCategory("BEFORE");
- // arg1.addToIndexes();
- // arg2.addToIndexes();
- // relation.addToIndexes();
- // before.put(argA, beginsOnB);
- // }
- // }
- // }
- // }
- //
- // }
}