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 2014/03/13 16:23:38 UTC
svn commit: r1577196 - in
/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal: ae/
ae/feature/duration/ data/analysis/
Author: dligach
Date: Thu Mar 13 15:23:37 2014
New Revision: 1577196
URL: http://svn.apache.org/r1577196
Log:
Moved various utility methods used by duration-related classes to one place (feature.duration.Utils)
Added:
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java (with props)
Modified:
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventTimeRelationsInGold.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventsInGold.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationDistributionFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventEventFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventTimeFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationExpectationFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationTimeUnitFeatureExtractor.java
ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/PrintNormalizedTemporalExpressions.java
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventTimeRelationsInGold.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventTimeRelationsInGold.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventTimeRelationsInGold.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventTimeRelationsInGold.java Thu Mar 13 15:23:37 2014
@@ -4,8 +4,8 @@ import java.io.File;
import java.io.IOException;
import java.util.Map;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationTimeUnitFeatureExtractor;
+import org.apache.ctakes.temporal.ae.feature.duration.Utils;
+import org.apache.ctakes.temporal.ae.feature.duration.Utils.Callback;
import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
import org.apache.ctakes.typesystem.type.relation.RelationArgument;
import org.apache.ctakes.typesystem.type.textsem.EventMention;
@@ -68,7 +68,7 @@ public class PreserveCertainEventTimeRel
continue;
}
- Set<TemporalUnit> units = DurationTimeUnitFeatureExtractor.normalize(timeText);
+ Set<TemporalUnit> units = Utils.normalize(timeText);
if(textToDistribution.containsKey(eventText) && units != null) {
// there is duration information and we are able to get time units, so keep this
continue;
@@ -91,7 +91,7 @@ public class PreserveCertainEventTimeRel
// finally remove time expressions (that didn't participate in relations) that have no data
for(TimeMention mention : Lists.newArrayList(JCasUtil.select(goldView, TimeMention.class))) {
String timeText = mention.getCoveredText().toLowerCase();
- Set<TemporalUnit> units = DurationTimeUnitFeatureExtractor.normalize(timeText);
+ Set<TemporalUnit> units = Utils.normalize(timeText);
if(units != null) {
// these are the kind we keep
continue;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventsInGold.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventsInGold.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventsInGold.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/PreserveCertainEventsInGold.java Thu Mar 13 15:23:37 2014
@@ -4,7 +4,7 @@ import java.io.File;
import java.io.IOException;
import java.util.Map;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
+import org.apache.ctakes.temporal.ae.feature.duration.Utils;
import org.apache.ctakes.typesystem.type.textsem.EventMention;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CASException;
@@ -29,7 +29,7 @@ public class PreserveCertainEventsInGold
File durationLookup = new File("/Users/Dima/Boston/Thyme/Duration/Output/Duration/distribution.txt");
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationDistributionFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationDistributionFeatureExtractor.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationDistributionFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationDistributionFeatureExtractor.java Thu Mar 13 15:23:37 2014
@@ -21,7 +21,6 @@ package org.apache.ctakes.temporal.ae.fe
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -33,7 +32,6 @@ import org.cleartk.classifier.feature.ex
import com.google.common.base.Charsets;
import com.google.common.io.Files;
-import com.google.common.io.LineProcessor;
public class DurationDistributionFeatureExtractor implements SimpleFeatureExtractor {
@@ -46,7 +44,7 @@ public class DurationDistributionFeature
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return features;
@@ -63,33 +61,4 @@ public class DurationDistributionFeature
return features;
}
-
- public static class Callback implements LineProcessor <Map<String, Map<String, Float>>> {
-
- // map event text to its duration distribution
- private Map<String, Map<String, Float>> textToDistribution;
-
- public Callback() {
- textToDistribution = new HashMap<String, Map<String, Float>>();
- }
-
- public boolean processLine(String line) throws IOException {
-
- String[] elements = line.split(", "); // e.g. pain, second:0.000, minute:0.005, hour:0.099, ...
- Map<String, Float> distribution = new HashMap<String, Float>();
-
- for(int durationBinNumber = 1; durationBinNumber < elements.length; durationBinNumber++) {
- String[] durationAndValue = elements[durationBinNumber].split(":"); // e.g. "day:0.475"
- distribution.put(durationAndValue[0], Float.parseFloat(durationAndValue[1]));
- }
-
- textToDistribution.put(elements[0], distribution);
- return true;
- }
-
- public Map<String, Map<String, Float>> getResult() {
-
- return textToDistribution;
- }
- }
}
\ No newline at end of file
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventEventFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventEventFeatureExtractor.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventEventFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventEventFeatureExtractor.java Thu Mar 13 15:23:37 2014
@@ -25,7 +25,6 @@ import java.util.List;
import java.util.Map;
import org.apache.ctakes.relationextractor.ae.features.RelationFeaturesExtractor;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.jcas.JCas;
@@ -47,7 +46,7 @@ public class DurationEventEventFeatureEx
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return features;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventTimeFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventTimeFeatureExtractor.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventTimeFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationEventTimeFeatureExtractor.java Thu Mar 13 15:23:37 2014
@@ -25,7 +25,6 @@ import java.util.List;
import java.util.Map;
import org.apache.ctakes.relationextractor.ae.features.RelationFeaturesExtractor;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.jcas.JCas;
@@ -47,7 +46,7 @@ public class DurationEventTimeFeatureExt
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return features;
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationExpectationFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationExpectationFeatureExtractor.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationExpectationFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationExpectationFeatureExtractor.java Thu Mar 13 15:23:37 2014
@@ -24,7 +24,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
import org.cleartk.classifier.Feature;
@@ -32,7 +31,6 @@ import org.cleartk.classifier.feature.ex
import org.cleartk.classifier.feature.extractor.simple.SimpleFeatureExtractor;
import com.google.common.base.Charsets;
-import com.google.common.collect.ImmutableMap;
import com.google.common.io.Files;
public class DurationExpectationFeatureExtractor implements SimpleFeatureExtractor {
@@ -46,7 +44,7 @@ public class DurationExpectationFeatureE
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return features;
@@ -56,34 +54,10 @@ public class DurationExpectationFeatureE
if(eventDistribution == null) {
features.add(new Feature("no_duration_info"));
} else {
- float expectation = expectedDuration(eventDistribution);
+ float expectation = Utils.expectedDuration(eventDistribution);
features.add(new Feature("expected_duration", expectation));
}
return features;
}
-
- /**
- * Compute expected duration in seconds. Normalize by number of seconds in a year.
- */
- public static float expectedDuration(Map<String, Float> distribution) {
-
- // unit of time -> duration in seconds
- final Map<String, Integer> converter = ImmutableMap.<String, Integer>builder()
- .put("second", 1)
- .put("minute", 60)
- .put("hour", 60 * 60)
- .put("day", 60 * 60 * 24)
- .put("week", 60 * 60 * 24 * 7)
- .put("month", 60 * 60 * 24 * 30)
- .put("year", 60 * 60 * 24 * 365)
- .build();
-
- float expectation = 0f;
- for(String unit : distribution.keySet()) {
- expectation = expectation + (converter.get(unit) * distribution.get(unit));
- }
-
- return expectation / converter.get("year");
- }
}
\ No newline at end of file
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationTimeUnitFeatureExtractor.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationTimeUnitFeatureExtractor.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationTimeUnitFeatureExtractor.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/DurationTimeUnitFeatureExtractor.java Thu Mar 13 15:23:37 2014
@@ -18,32 +18,20 @@
*/
package org.apache.ctakes.temporal.ae.feature.duration;
-import info.bethard.timenorm.Period;
-import info.bethard.timenorm.PeriodSet;
-import info.bethard.timenorm.Temporal;
-import info.bethard.timenorm.TemporalExpressionParser;
-import info.bethard.timenorm.TimeSpan;
-import info.bethard.timenorm.TimeSpanSet;
-
import java.io.File;
import java.io.IOException;
-import java.net.URL;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ctakes.relationextractor.ae.features.RelationFeaturesExtractor;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationDistributionFeatureExtractor.Callback;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.jcas.JCas;
import org.cleartk.classifier.Feature;
-import org.threeten.bp.temporal.TemporalField;
import org.threeten.bp.temporal.TemporalUnit;
import scala.collection.immutable.Set;
-import scala.util.Try;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
@@ -65,73 +53,25 @@ public class DurationTimeUnitFeatureExtr
File durationLookup = new File("/Users/dima/Boston/Thyme/Duration/Output/Duration/distribution.txt");
Map<String, Map<String, Float>> textToDistribution = null;
try {
- textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Callback());
+ textToDistribution = Files.readLines(durationLookup, Charsets.UTF_8, new Utils.Callback());
} catch(IOException e) {
e.printStackTrace();
return features;
}
Map<String, Float> eventDistribution = textToDistribution.get(eventText);
- float eventExpectedDuration = DurationExpectationFeatureExtractor.expectedDuration(eventDistribution);
+ float eventExpectedDuration = Utils.expectedDuration(eventDistribution);
- Set<TemporalUnit> units = normalize(timeText);
+ Set<TemporalUnit> units = Utils.normalize(timeText);
scala.collection.Iterator<TemporalUnit> iterator = units.iterator();
while(iterator.hasNext()) {
TemporalUnit unit = iterator.next();
- Map<String, Float> distribution = convertToDistribution(unit.getName());
- float timeExpectedDuration = DurationExpectationFeatureExtractor.expectedDuration(distribution);
+ Map<String, Float> distribution = Utils.convertToDistribution(unit.getName());
+ float timeExpectedDuration = Utils.expectedDuration(distribution);
features.add(new Feature("expected_duration_difference", timeExpectedDuration - eventExpectedDuration));
continue; // ignore multiple time units (almost never happens)
}
return features;
}
-
- public static Set<TemporalUnit> normalize(String timex) {
-
- URL grammarURL = DurationTimeUnitFeatureExtractor.class.getResource("/info/bethard/timenorm/en.grammar");
- TemporalExpressionParser parser = new TemporalExpressionParser(grammarURL);
- TimeSpan anchor = TimeSpan.of(2013, 12, 16);
- Try<Temporal> result = parser.parse(timex, anchor);
-
- Set<TemporalUnit> units = null;
- if (result.isSuccess()) {
- Temporal temporal = result.get();
-
- if (temporal instanceof Period) {
- units = ((Period) temporal).unitAmounts().keySet();
- } else if (temporal instanceof PeriodSet) {
- units = ((PeriodSet) temporal).period().unitAmounts().keySet();
- } else if (temporal instanceof TimeSpan) {
- units = ((TimeSpan) temporal).period().unitAmounts().keySet();
- } else if (temporal instanceof TimeSpanSet) {
- Set<TemporalField> fields = ((TimeSpanSet) temporal).fields().keySet();
- units = null; // fill units by calling .getBaseUnit() on each field
- }
- }
-
- return units;
- }
-
- /**
- * Take a time unit and return a probability distribution
- * in which p(this time unit) = 1 and all others are zero.
- */
- public static Map<String, Float> convertToDistribution(String timeUnit) {
-
- String[] bins = {"second", "minute", "hour", "day", "week", "month", "year"};
- Map<String, Float> distribution = new HashMap<String, Float>();
-
- for(String bin: bins) {
- // convert things like "Hours" to "hour"
- String normalized = timeUnit.substring(0, timeUnit.length() - 1).toLowerCase();
- if(bin.equals(normalized)) {
- distribution.put(bin, 1.0f);
- } else {
- distribution.put(bin, 0.0f);
- }
- }
-
- return distribution;
- }
}
Added: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java?rev=1577196&view=auto
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java (added)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java Thu Mar 13 15:23:37 2014
@@ -0,0 +1,132 @@
+package org.apache.ctakes.temporal.ae.feature.duration;
+
+import info.bethard.timenorm.Period;
+import info.bethard.timenorm.PeriodSet;
+import info.bethard.timenorm.Temporal;
+import info.bethard.timenorm.TemporalExpressionParser;
+import info.bethard.timenorm.TimeSpan;
+import info.bethard.timenorm.TimeSpanSet;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.threeten.bp.temporal.TemporalField;
+import org.threeten.bp.temporal.TemporalUnit;
+
+import scala.collection.immutable.Set;
+import scala.util.Try;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.io.LineProcessor;
+
+/**
+ * Various useful classes and methods for evaluating event duration data.
+ */
+public class Utils {
+
+ /**
+ * Compute expected duration in seconds. Normalize by number of seconds in a year.
+ */
+ public static float expectedDuration(Map<String, Float> distribution) {
+
+ // unit of time -> duration in seconds
+ final Map<String, Integer> converter = ImmutableMap.<String, Integer>builder()
+ .put("second", 1)
+ .put("minute", 60)
+ .put("hour", 60 * 60)
+ .put("day", 60 * 60 * 24)
+ .put("week", 60 * 60 * 24 * 7)
+ .put("month", 60 * 60 * 24 * 30)
+ .put("year", 60 * 60 * 24 * 365)
+ .build();
+
+ float expectation = 0f;
+ for(String unit : distribution.keySet()) {
+ expectation = expectation + (converter.get(unit) * distribution.get(unit));
+ }
+
+ return expectation / converter.get("year");
+ }
+
+ public static Set<TemporalUnit> normalize(String timex) {
+
+ URL grammarURL = DurationTimeUnitFeatureExtractor.class.getResource("/info/bethard/timenorm/en.grammar");
+ TemporalExpressionParser parser = new TemporalExpressionParser(grammarURL);
+ TimeSpan anchor = TimeSpan.of(2013, 12, 16);
+ Try<Temporal> result = parser.parse(timex, anchor);
+
+ Set<TemporalUnit> units = null;
+ if (result.isSuccess()) {
+ Temporal temporal = result.get();
+
+ if (temporal instanceof Period) {
+ units = ((Period) temporal).unitAmounts().keySet();
+ } else if (temporal instanceof PeriodSet) {
+ units = ((PeriodSet) temporal).period().unitAmounts().keySet();
+ } else if (temporal instanceof TimeSpan) {
+ units = ((TimeSpan) temporal).period().unitAmounts().keySet();
+ } else if (temporal instanceof TimeSpanSet) {
+ Set<TemporalField> fields = ((TimeSpanSet) temporal).fields().keySet();
+ units = null; // fill units by calling .getBaseUnit() on each field
+ }
+ }
+
+ return units;
+ }
+
+ /**
+ * Take a time unit and return a probability distribution
+ * in which p(this time unit) = 1 and all others are zero.
+ */
+ public static Map<String, Float> convertToDistribution(String timeUnit) {
+
+ String[] bins = {"second", "minute", "hour", "day", "week", "month", "year"};
+ Map<String, Float> distribution = new HashMap<String, Float>();
+
+ for(String bin: bins) {
+ // convert things like "Hours" to "hour"
+ String normalized = timeUnit.substring(0, timeUnit.length() - 1).toLowerCase();
+ if(bin.equals(normalized)) {
+ distribution.put(bin, 1.0f);
+ } else {
+ distribution.put(bin, 0.0f);
+ }
+ }
+
+ return distribution;
+ }
+
+ /**
+ * Read event duration distributions from file.
+ */
+ public static class Callback implements LineProcessor <Map<String, Map<String, Float>>> {
+
+ // map event text to its duration distribution
+ private Map<String, Map<String, Float>> textToDistribution;
+
+ public Callback() {
+ textToDistribution = new HashMap<String, Map<String, Float>>();
+ }
+
+ public boolean processLine(String line) throws IOException {
+
+ String[] elements = line.split(", "); // e.g. pain, second:0.000, minute:0.005, hour:0.099, ...
+ Map<String, Float> distribution = new HashMap<String, Float>();
+
+ for(int durationBinNumber = 1; durationBinNumber < elements.length; durationBinNumber++) {
+ String[] durationAndValue = elements[durationBinNumber].split(":"); // e.g. "day:0.475"
+ distribution.put(durationAndValue[0], Float.parseFloat(durationAndValue[1]));
+ }
+
+ textToDistribution.put(elements[0], distribution);
+ return true;
+ }
+
+ public Map<String, Map<String, Float>> getResult() {
+
+ return textToDistribution;
+ }
+ }
+}
Propchange: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/ae/feature/duration/Utils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/PrintNormalizedTemporalExpressions.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/PrintNormalizedTemporalExpressions.java?rev=1577196&r1=1577195&r2=1577196&view=diff
==============================================================================
--- ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/PrintNormalizedTemporalExpressions.java (original)
+++ ctakes/trunk/ctakes-temporal/src/main/java/org/apache/ctakes/temporal/data/analysis/PrintNormalizedTemporalExpressions.java Thu Mar 13 15:23:37 2014
@@ -1,6 +1,6 @@
package org.apache.ctakes.temporal.data.analysis;
-import org.apache.ctakes.temporal.ae.feature.duration.DurationTimeUnitFeatureExtractor;
+import org.apache.ctakes.temporal.ae.feature.duration.Utils;
import org.apache.ctakes.typesystem.type.textsem.TimeMention;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.CASException;
@@ -33,7 +33,7 @@ public class PrintNormalizedTemporalExpr
for(TimeMention mention : Lists.newArrayList(JCasUtil.select(goldView, TimeMention.class))) {
String timex = mention.getCoveredText().toLowerCase();
- Set<TemporalUnit> units = DurationTimeUnitFeatureExtractor.normalize(timex);
+ Set<TemporalUnit> units = Utils.normalize(timex);
if(units == null) {
System.out.println(timex + "|" + "n/a");