You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by dl...@apache.org on 2016/09/19 21:01:02 UTC
svn commit: r1761503 -
/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java
Author: dligach
Date: Mon Sep 19 21:01:01 2016
New Revision: 1761503
URL: http://svn.apache.org/viewvc?rev=1761503&view=rev
Log:
using a single relation snippet printer now instead of two separate ones
Modified:
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java?rev=1761503&r1=1761502&r2=1761503&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/nn/data/EventTimeRelPrinter.java Mon Sep 19 21:01:01 2016
@@ -50,7 +50,6 @@ import org.apache.uima.fit.pipeline.Simp
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
-import org.cleartk.util.ViewUriUtil;
import com.lexicalscope.jewel.cli.CliFactory;
import com.lexicalscope.jewel.cli.Option;
@@ -106,7 +105,9 @@ public class EventTimeRelPrinter {
// write training data to file
CollectionReader trainCollectionReader = Utils.getCollectionReader(trainFiles);
AnalysisEngine trainDataWriter = AnalysisEngineFactory.createEngine(
- TrainRelationSnippetPrinter.class,
+ RelationSnippetPrinter.class,
+ "IsTraining",
+ true,
"OutputFile",
trainFile.getAbsoluteFile());
SimplePipeline.runPipeline(trainCollectionReader, trainDataWriter);
@@ -114,7 +115,9 @@ public class EventTimeRelPrinter {
// write dev data to file
CollectionReader devCollectionReader = Utils.getCollectionReader(devFiles);
AnalysisEngine devDataWriter = AnalysisEngineFactory.createEngine(
- TestRelationSnippetPrinter.class,
+ RelationSnippetPrinter.class,
+ "IsTraining",
+ false,
"OutputFile",
devFile.getAbsolutePath());
SimplePipeline.runPipeline(devCollectionReader, devDataWriter);
@@ -122,12 +125,16 @@ public class EventTimeRelPrinter {
/**
* Print gold standard relations and their context.
- *
- * @author dmitriy dligach
*/
- public static class TrainRelationSnippetPrinter extends JCasAnnotator_ImplBase {
+ public static class RelationSnippetPrinter extends JCasAnnotator_ImplBase {
@ConfigurationParameter(
+ name = "IsTraining",
+ mandatory = true,
+ description = "are we training?")
+ private boolean isTraining;
+
+ @ConfigurationParameter(
name = "OutputFile",
mandatory = true,
description = "path to the output file")
@@ -150,22 +157,29 @@ public class EventTimeRelPrinter {
throw new AnalysisEngineProcessException(e);
}
- // can't iterate over binary text relations in a sentence, so need
- // a lookup from pair of annotations to binary text relation
+ // can't iterate over binary text relations in a sentence, so need a lookup
Map<List<Annotation>, BinaryTextRelation> relationLookup = new HashMap<>();
- for(BinaryTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
- Annotation arg1 = relation.getArg1().getArgument();
- Annotation arg2 = relation.getArg2().getArgument();
-
- if(relationLookup.get(Arrays.asList(arg1, arg2)) != null) {
- // there is already a relation between arg1 and arg2
- // only store if it is 'contains' relation
- if(relation.getCategory().equals("CONTAINS")) {
- relationLookup.put(Arrays.asList(arg1, arg2), relation);
+ if(isTraining) {
+ for(BinaryTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
+ Annotation arg1 = relation.getArg1().getArgument();
+ Annotation arg2 = relation.getArg2().getArgument();
+
+ if(relationLookup.get(Arrays.asList(arg1, arg2)) != null) {
+ // there is already a relation between arg1 and arg2
+ // only store if it is 'contains' relation
+ if(relation.getCategory().equals("CONTAINS")) {
+ relationLookup.put(Arrays.asList(arg1, arg2), relation);
+ } else {
+ System.out.println("skipping relation: " + arg1.getCoveredText() + " ... " + arg2.getCoveredText());
+ }
} else {
- System.out.println("skipping relation: " + arg1.getCoveredText() + " ... " + arg2.getCoveredText());
+ relationLookup.put(Arrays.asList(arg1, arg2), relation);
}
- } else {
+ }
+ } else {
+ for(BinaryTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
+ Annotation arg1 = relation.getArg1().getArgument();
+ Annotation arg2 = relation.getArg2().getArgument();
relationLookup.put(Arrays.asList(arg1, arg2), relation);
}
}
@@ -195,92 +209,6 @@ public class EventTimeRelPrinter {
}
String context;
- if(time.getBegin() < event.getBegin()) {
- // ... time ... event ... scenario
- context = getTokenContext(systemView, sentence, time, "t", event, "e", 2);
- } else {
- // ... event ... time ... scenario
- context = getTokenContext(systemView, sentence, event, "e", time, "t", 2);
- }
-
- String text = String.format("%s|%s", label, context);
- eventTimeRelationsInSentence.add(text.toLowerCase());
- }
- }
-
- try {
- Files.write(Paths.get(outputFile), eventTimeRelationsInSentence, StandardOpenOption.APPEND);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- /**
- * Print gold standard relations and their context.
- *
- * @author dmitriy dligach
- */
- public static class TestRelationSnippetPrinter extends JCasAnnotator_ImplBase {
-
- @ConfigurationParameter(
- name = "OutputFile",
- mandatory = true,
- description = "path to the output file")
- private String outputFile;
-
- @Override
- public void process(JCas jCas) throws AnalysisEngineProcessException {
-
- JCas goldView;
- try {
- goldView = jCas.getView("GoldView");
- } catch (CASException e) {
- throw new AnalysisEngineProcessException(e);
- }
-
- JCas systemView;
- try {
- systemView = jCas.getView("_InitialView");
- } catch (CASException e) {
- throw new AnalysisEngineProcessException(e);
- }
-
- // can't iterate over binary text relations in a sentence, so need
- // a lookup from pair of annotations to binary text relation
- Map<List<Annotation>, BinaryTextRelation> relationLookup = new HashMap<>();
- for(BinaryTextRelation relation : JCasUtil.select(goldView, TemporalTextRelation.class)) {
- Annotation arg1 = relation.getArg1().getArgument();
- Annotation arg2 = relation.getArg2().getArgument();
- relationLookup.put(Arrays.asList(arg1, arg2), relation);
- }
-
- // go over sentences, extracting event-event relation instances
- for(Sentence sentence : JCasUtil.select(systemView, Sentence.class)) {
- List<String> eventTimeRelationsInSentence = new ArrayList<>();
-
- // retrieve event-time relations in this sentence
- for(EventMention event : JCasUtil.selectCovered(goldView, EventMention.class, sentence)) {
- for(TimeMention time : JCasUtil.selectCovered(goldView, TimeMention.class, sentence)) {
-
- BinaryTextRelation timeEventRelation = relationLookup.get(Arrays.asList(time, event));
- BinaryTextRelation eventTimeRelation = relationLookup.get(Arrays.asList(event, time));
-
- // TODO: am I capturing multiple relations here? probably not...
- String label = "none";
- if(timeEventRelation != null) {
- if(timeEventRelation.getCategory().equals("CONTAINS")) {
- label = "contains"; // this is contains
- }
- }
- if(eventTimeRelation != null) {
- if(eventTimeRelation.getCategory().equals("CONTAINS")) {
- label = "contains-1"; // this is contains
- }
- }
-
- String context;
if(time.getBegin() < event.getBegin()) {
// ... time ... event ... scenario
context = getTokenContext(systemView, sentence, time, "t", event, "e", 2);