private void ResolveTimeExpression(ICoreMap annotation, TimeExpression te, SUTime.Time docDate) { SUTime.Temporal temporal = te.GetTemporal(); if (temporal != null) { // TODO: use correct time for anchor try { int flags = timexPatterns.DetermineRelFlags(annotation, te); //int flags = 0; SUTime.Temporal grounded = temporal.Resolve(docDate, flags); if (grounded == null) { logger.Debug("Error resolving " + temporal + ", using docDate=" + docDate); } if (grounded != temporal) { te.origTemporal = temporal; te.SetTemporal(grounded); } } catch (Exception ex) { if (options.verbose) { logger.Warn("Error resolving " + temporal, ex); logger.Warn(ex); } } } }
private static SUTime.Time FindReferenceDate(IList <TimeExpression> timeExpressions) { // Find first full date in this annotation with year, month, and day foreach (TimeExpression te in timeExpressions) { SUTime.Temporal t = te.GetTemporal(); if (t is SUTime.Time) { if (t.IsGrounded()) { return(t.GetTime()); } else { if (t is SUTime.PartialTime) { if (JodaTimeUtils.HasYYYYMMDD(t.GetTime().GetJodaTimePartial())) { return(t.GetTime()); } else { if (JodaTimeUtils.HasYYMMDD(t.GetTime().GetJodaTimePartial())) { return(t.GetTime().Resolve(SUTime.GetCurrentTime()).GetTime()); } } } } } } return(null); }
private SUTime.Temporal AddEndPoints(SUTime.Duration d, SUTime.Time beginTime, SUTime.Time endTime) { SUTime.Temporal t = d; if (d != null && (beginTime != null || endTime != null)) { SUTime.Time b = beginTime; SUTime.Time e = endTime; if (b == SUTime.TimeRefUnknown) { b = new SUTime.RefTime("UNKNOWN"); } else { if (b == SUTime.TimeUnknown) { b = new SUTime.SimpleTime("UNKNOWN"); } } if (e == SUTime.TimeRefUnknown) { e = new SUTime.RefTime("UNKNOWN"); } else { if (e == SUTime.TimeUnknown) { e = new SUTime.SimpleTime("UNKNOWN"); } } t = new SUTime.Range(b, e, d); } return(t); }
public override bool Match(TimeExpression te) { if (te != null) { SUTime.Temporal t = te.GetTemporal(); if (t != null) { return(type.Equals(t.GetTimexType())); } } return(false); }
public override IValue Apply(Env env, IList <IValue> @in) { if (@in.Count > 1) { SUTime.TemporalOp op = (SUTime.TemporalOp)@in[0].Get(); bool allTemporalArgs = true; object[] args = new object[@in.Count - 1]; for (int i = 0; i < args.Length; i++) { IValue v = @in[i + 1]; if (v != null) { args[i] = v.Get(); if (args[i] is MatchedExpression) { IValue v2 = ((MatchedExpression)args[i]).GetValue(); args[i] = (v2 != null) ? v2.Get() : null; } if (args[i] != null && !(args[i] is SUTime.Temporal)) { allTemporalArgs = false; } } } if (allTemporalArgs) { SUTime.Temporal[] temporalArgs = new SUTime.Temporal[args.Length]; for (int i_1 = 0; i_1 < args.Length; i_1++) { temporalArgs[i_1] = (SUTime.Temporal)args[i_1]; } return(new Expressions.PrimitiveValue(null, op.Apply(temporalArgs))); } else { return(new Expressions.PrimitiveValue(null, op.Apply(args))); } } else { throw new ArgumentException("Invalid number of arguments to " + this.name); } }
public virtual bool AddMod() { SUTime.Temporal t = GetTemporal(); if (t != null) { if (t != SUTime.TimeNoneOk) { SetTemporal(t); return(true); } else { return(false); } } else { return(true); } }
private IList <ICoreMap> ToCoreMaps(ICoreMap annotation, IList <TimeExpression> timeExpressions, SUTime.TimeIndex timeIndex) { if (timeExpressions == null) { return(null); } IList <ICoreMap> coreMaps = new List <ICoreMap>(timeExpressions.Count); foreach (TimeExpression te in timeExpressions) { ICoreMap cm = te.GetAnnotation(); SUTime.Temporal temporal = te.GetTemporal(); if (temporal != null) { string origText = annotation.Get(typeof(CoreAnnotations.TextAnnotation)); string text = cm.Get(typeof(CoreAnnotations.TextAnnotation)); if (origText != null) { // Make sure the text is from original (and not from concatenated tokens) ChunkAnnotationUtils.AnnotateChunkText(cm, annotation); text = cm.Get(typeof(CoreAnnotations.TextAnnotation)); } IDictionary <string, string> timexAttributes; try { timexAttributes = temporal.GetTimexAttributes(timeIndex); if (options.includeRange) { SUTime.Temporal rangeTemporal = temporal.GetRange(); if (rangeTemporal != null) { timexAttributes["range"] = rangeTemporal.ToString(); } } } catch (Exception e) { if (options.verbose) { logger.Warn("Failed to get attributes from " + text + ", timeIndex " + timeIndex); logger.Warn(e); } continue; } Timex timex; try { timex = Timex.FromMap(text, timexAttributes); } catch (Exception e) { if (options.verbose) { logger.Warn("Failed to process timex " + text + " with attributes " + timexAttributes); logger.Warn(e); } continue; } System.Diagnostics.Debug.Assert(timex != null); // Timex.fromMap never returns null and if it exceptions, we've already done a continue cm.Set(typeof(TimeAnnotations.TimexAnnotation), timex); coreMaps.Add(cm); } } return(coreMaps); }
public virtual void SetTemporal(SUTime.Temporal temporal) { this.value = new Expressions.PrimitiveValue <SUTime.Temporal>("Temporal", temporal); }
private static void ResolveAndCheckRange(string message, SUTime.Temporal t, SUTime.Time anchor, string expected) { SUTime.Temporal res = t.Resolve(anchor); SUTime.Range range = res.GetRange(); NUnit.Framework.Assert.AreEqual(expected, range.ToISOString(), message); }
public override IValue Apply(Env env, IList <IValue> @in) { if (@in.Count >= 1) { SUTime.Temporal temporal = null; object t = @in[0].Get(); if (t is SUTime.Temporal) { temporal = (SUTime.Temporal)@in[0].Get(); } else { if (t is TimeExpression) { temporal = ((TimeExpression)t).GetTemporal(); } else { throw new ArgumentException("Type mismatch on arg0: Cannot apply " + this + " to " + @in); } } string quant = null; int scale = 1; if (@in.Count >= 2 && @in[1] != null) { object arg1 = @in[1].Get(); if (arg1 is string) { quant = (string)arg1; } else { if (arg1 is IList) { IList <ICoreMap> cms = (IList <ICoreMap>)arg1; quant = ChunkAnnotationUtils.GetTokenText(cms, typeof(CoreAnnotations.TextAnnotation)); if (quant != null) { quant = quant.ToLower(); } } else { throw new ArgumentException("Type mismatch on arg1: Cannot apply " + this + " to " + @in); } } } if (@in.Count >= 3 && @in[2] != null) { Number arg2 = (Number)@in[2].Get(); if (arg2 != null) { scale = arg2; } } SUTime.Duration period = temporal.GetPeriod(); if (period != null && scale != 1) { period = period.MultiplyBy(scale); } return(new Expressions.PrimitiveValue("PeriodicTemporalSet", new SUTime.PeriodicTemporalSet(temporal, period, quant, null))); } else { throw new ArgumentException("Invalid number of arguments to " + this.name); } }
public override IValue Apply(Env env, IList <IValue> @in) { if (@in.Count == 2) { SUTime.Duration d = (SUTime.Duration)@in[0].Get(); if (@in[1].Get() is Number) { int m = ((Number)@in[1].Get()); return(new Expressions.PrimitiveValue("DURATION", d.MultiplyBy(m))); } else { if (@in[1].Get() is string) { Number n = System.Convert.ToInt32((string)@in[1].Get()); if (n != null) { return(new Expressions.PrimitiveValue("DURATION", d.MultiplyBy(n))); } else { return(null); } } else { throw new ArgumentException("Invalid arguments to " + this.name); } } } else { if (@in.Count == 5 || @in.Count == 3) { IList <ICoreMap> durationStartTokens = (IList <ICoreMap>)@in[0].Get(); Number durationStartVal = (durationStartTokens != null) ? durationStartTokens[0].Get(typeof(CoreAnnotations.NumericCompositeValueAnnotation)) : null; IList <ICoreMap> durationEndTokens = (IList <ICoreMap>)@in[1].Get(); Number durationEndVal = (durationEndTokens != null) ? durationEndTokens[0].Get(typeof(CoreAnnotations.NumericCompositeValueAnnotation)) : null; IList <ICoreMap> durationUnitTokens = (IList <ICoreMap>)@in[2].Get(); TimeExpression te = (durationUnitTokens != null) ? durationUnitTokens[0].Get(typeof(TimeExpression.Annotation)) : null; SUTime.Duration durationUnit = (SUTime.Duration)te.GetTemporal(); SUTime.Duration durationStart = (durationStartVal != null) ? durationUnit.MultiplyBy(durationStartVal) : null; SUTime.Duration durationEnd = (durationEndVal != null) ? durationUnit.MultiplyBy(durationEndVal) : null; SUTime.Duration duration = durationStart; if (duration == null) { if (durationEnd != null) { duration = durationEnd; } else { duration = new SUTime.InexactDuration(durationUnit); } } else { if (durationEnd != null) { duration = new SUTime.DurationRange(durationStart, durationEnd); } } SUTime.Time beginTime = (@in.Count > 3) ? (SUTime.Time)@in[3].Get() : null; SUTime.Time endTime = (@in.Count > 4) ? (SUTime.Time)@in[4].Get() : null; SUTime.Temporal temporal = this.AddEndPoints(duration, beginTime, endTime); if (temporal is SUTime.Range) { return(new Expressions.PrimitiveValue("RANGE", temporal)); } else { return(new Expressions.PrimitiveValue("DURATION", temporal)); } } else { throw new ArgumentException("Invalid number of arguments to " + this.name); } } }