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);
     }
 }
コード例 #6
0
 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);
        }
コード例 #8
0
 public virtual void SetTemporal(SUTime.Temporal temporal)
 {
     this.value = new Expressions.PrimitiveValue <SUTime.Temporal>("Temporal", temporal);
 }
コード例 #9
0
 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);
         }
     }
 }