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);
- // }
- // }
- // }
- // }
- //
- // }
}