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/06 18:31:01 UTC
svn commit: r1637168 - in
/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal:
ae/EventEventRelationAnnotator.java ae/EventTimeSelfRelationAnnotator.java
eval/EvaluationOfEventTimeRelations.java
Author: clin
Date: Thu Nov 6 17:31:01 2014
New Revision: 1637168
URL: http://svn.apache.org/r1637168
Log:
Add UMLS filter for event-time relations.
Modified:
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeSelfRelationAnnotator.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventTimeRelations.java
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java?rev=1637168&r1=1637167&r2=1637168&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventEventRelationAnnotator.java Thu Nov 6 17:31:01 2014
@@ -203,6 +203,11 @@ public class EventEventRelationAnnotator
pairs.add(new IdentifiedAnnotationPair(event1, event2));
}
}
+ for(EventMention event1 : JCasUtil.selectCovered(jCas, EventMention.class, eventA)){
+ for(EventMention event2 : JCasUtil.selectCovered(jCas, EventMention.class, eventB)){
+ pairs.add(new IdentifiedAnnotationPair(event1, event2));
+ }
+ }
}
pairs.add(new IdentifiedAnnotationPair(eventA, eventB));
}
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeSelfRelationAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeSelfRelationAnnotator.java?rev=1637168&r1=1637167&r2=1637168&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeSelfRelationAnnotator.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/EventTimeSelfRelationAnnotator.java Thu Nov 6 17:31:01 2014
@@ -161,23 +161,33 @@ public class EventTimeSelfRelationAnnota
Annotation sentence) {
Map<EventMention, Collection<EventMention>> coveringMap =
JCasUtil.indexCovering(jCas, EventMention.class, EventMention.class);
-
+
List<IdentifiedAnnotationPair> pairs = Lists.newArrayList();
for (EventMention event : JCasUtil.selectCovered(jCas, EventMention.class, sentence)) {
- // ignore subclasses like Procedure and Disease/Disorder
- if(this.isTraining()){//if training mode, train on both gold event and nearby system events
-
- if (event.getClass().equals(EventMention.class)) {
+ boolean eventValid = false;
+ if (event.getClass().equals(EventMention.class)) {//event is a gold event
+ for( EventMention aEve : JCasUtil.selectCovered(jCas, EventMention.class, event)){
+ if(!aEve.getClass().equals(EventMention.class)){//this event cover a UMLS semantic type
+ eventValid = true;
+ break;
+ }
+ }
+ }
+
+ if(eventValid){
+ // ignore subclasses like Procedure and Disease/Disorder
+ if(this.isTraining()){//if training mode, train on both gold event and span-overlapping system events
for (TimeMention time : JCasUtil.selectCovered(jCas, TimeMention.class, sentence)) {
Collection<EventMention> eventList = coveringMap.get(event);
for(EventMention covEvent : eventList){
pairs.add(new IdentifiedAnnotationPair(covEvent, time));
}
pairs.add(new IdentifiedAnnotationPair(event, time));
+ for(EventMention covedEvent : JCasUtil.selectCovered(jCas, EventMention.class, event)){//select covered events
+ pairs.add(new IdentifiedAnnotationPair(covedEvent, time));
+ }
}
- }
- }else{//if testing mode, only test on system generated events
- if (event.getClass().equals(EventMention.class)) {
+ }else{//if testing mode, only test on system generated events
for (TimeMention time : JCasUtil.selectCovered(jCas, TimeMention.class, sentence)) {
pairs.add(new IdentifiedAnnotationPair(event, time));
}
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventTimeRelations.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventTimeRelations.java?rev=1637168&r1=1637167&r2=1637168&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventTimeRelations.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/eval/EvaluationOfEventTimeRelations.java Thu Nov 6 17:31:01 2014
@@ -364,6 +364,7 @@ EvaluationOfTemporalRelations_ImplBase{
AnalysisEngineFactory.createEngineDescription(RemoveEventEventRelations.class),
CAS.NAME_DEFAULT_SOFA,
GOLD_VIEW_NAME);
+ aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveNonUMLSEtEvents.class));
aggregateBuilder.add(AnalysisEngineFactory.createEngineDescription(RemoveRelations.class));
aggregateBuilder.add(this.baseline ? RecallBaselineEventTimeRelationAnnotator.createAnnotatorDescription(directory) :
@@ -385,11 +386,11 @@ EvaluationOfTemporalRelations_ImplBase{
GOLD_VIEW_NAME,
CAS.NAME_DEFAULT_SOFA
);
- outf = new File("target/eval/thyme/SystemError_eventTime_recall_dev.txt");
+ outf = new File("target/eval/thyme/SystemError_eventTime_recall_test.txt");
}else if (!recallModeEvaluation && this.useClosure){
- outf = new File("target/eval/thyme/SystemError_eventTime_precision_dev.txt");
+ outf = new File("target/eval/thyme/SystemError_eventTime_precision_test.txt");
}else{
- outf = new File("target/eval/thyme/SystemError_eventTime_plain_dev.txt");
+ outf = new File("target/eval/thyme/SystemError_eventTime_plain_test.txt");
}
PrintWriter outDrop =null;
@@ -468,6 +469,51 @@ EvaluationOfTemporalRelations_ImplBase{
outDrop.close();
return stats;
}
+
+ public static class RemoveNonUMLSEtEvents extends org.apache.uima.fit.component.JCasAnnotator_ImplBase {
+ public static final String PARAM_GOLD_VIEW = "GoldView";
+
+ @ConfigurationParameter(name = PARAM_GOLD_VIEW,mandatory=false)
+ private String goldViewName = CAS.NAME_DEFAULT_SOFA;
+
+ @Override
+ public void process(JCas jCas) throws AnalysisEngineProcessException {
+ JCas sysView;
+ JCas goldView;
+ try {
+ sysView = jCas.getView(CAS.NAME_DEFAULT_SOFA);
+ goldView = jCas.getView(PARAM_GOLD_VIEW);
+ } catch (CASException e) {
+ throw new AnalysisEngineProcessException(e);
+ }
+ for(TemporalTextRelation relation : Lists.newArrayList(JCasUtil.select(goldView, TemporalTextRelation.class))){
+ Annotation arg1 = relation.getArg1().getArgument();
+ Annotation arg2 = relation.getArg2().getArgument();
+ Annotation argEvent = null;
+ if(arg1 instanceof EventMention && arg2 instanceof TimeMention){
+ argEvent = arg1;
+ }else if(arg1 instanceof TimeMention && arg2 instanceof EventMention){
+ argEvent = arg2;
+ }else{
+ continue;
+ }
+ boolean eventValid = false;
+ for (EventMention event : JCasUtil.selectCovered(sysView, EventMention.class, argEvent)){
+ if(!event.getClass().equals(EventMention.class)){
+ eventValid = true;
+ break;
+ }
+ }
+ if(eventValid){
+ // these are the kind we keep.
+ continue;
+ }
+ arg1.removeFromIndexes();
+ arg2.removeFromIndexes();
+ relation.removeFromIndexes();
+ }
+ }
+ }
/*
private static String formatRelation(BinaryTextRelation relation) {