Ejemplo n.º 1
0
        public List <ModelResult> Parse(string query, System.DateTime refTime)
        {
            // Preprocess the query
            query = FormatUtility.Preprocess(query);

            var parsedDateTimes = new List <DateTimeParseResult>();

            try {
                var extractResults = Extractor.Extract(query, refTime);

                foreach (var result in extractResults)
                {
                    var parseResult = Parser.Parse(result, refTime);
                    if (parseResult.Value is List <DateTimeParseResult> )
                    {
                        parsedDateTimes.AddRange((List <DateTimeParseResult>)parseResult.Value);
                    }
                    else
                    {
                        parsedDateTimes.Add(parseResult);
                    }
                }
            }
            catch (Exception)
            {
                // Nothing to do. Exceptions in parse should not break users of recognizers.
                // No result.
            }

            return(parsedDateTimes.Select(o => GetModelResult(o)).ToList());
        }
Ejemplo n.º 2
0
        public List <ModelResult> Parse(string query, DateObject refTime)
        {
            // Preprocess the query
            query = FormatUtility.Preprocess(query);

            var parsedDateTimes = new List <DateTimeParseResult>();

            try {
                var extractResults = Extractor.Extract(query, refTime);

                foreach (var result in extractResults)
                {
                    var parseResults = Parser.Parse(result, refTime);

                    if (parseResults.Value is List <DateTimeParseResult> list)
                    {
                        parsedDateTimes.AddRange(list);
                    }
                    else
                    {
                        parsedDateTimes.Add(parseResults);
                    }
                }

                // Filter out ambiguous cases. Naïve approach.
                parsedDateTimes = Parser.FilterResults(query, parsedDateTimes);
            }
            catch (Exception)
            {
                // Nothing to do. Exceptions in parse should not break users of recognizers.
                // No result.
            }

            return(parsedDateTimes.Select(o => GetModelResult(o)).ToList());
        }
Ejemplo n.º 3
0
        public List <ModelResult> Parse(string query, System.DateTime refTime)
        {
            // preprocess the query
            query = FormatUtility.Preprocess(query);
            var extractResults = Extractor.Extract(query, refTime);

            var parseDateTimes = new List <DateTimeParseResult>();

            foreach (var result in extractResults)
            {
                var parseResult = Parser.Parse(result, refTime);
                if (parseResult.Value is List <DateTimeParseResult> )
                {
                    parseDateTimes.AddRange((List <DateTimeParseResult>)parseResult.Value);
                }
                else
                {
                    parseDateTimes.Add(parseResult);
                }
            }

            return(parseDateTimes.Select(o => new ModelResult
            {
                Start = o.Start.Value,
                End = o.Start.Value + o.Length.Value - 1,
                TypeName = o.Type,
                Resolution = o.Value as SortedDictionary <string, object>,
                Text = o.Text
            }).ToList());
        }
Ejemplo n.º 4
0
        public List <ModelResult> Parse(string query)
        {
            // preprocess the query
            query = FormatUtility.Preprocess(query, false);

            List <ModelResult> extractionResults = new List <ModelResult>();

            foreach (var p in ExtractorParserDic)
            {
                var extractor      = p.Key;
                var parser         = p.Value;
                var extractResults = extractor.Extract(query);
                var parseResults   = new List <ParseResult>();

                foreach (var result in extractResults)
                {
                    parseResults.Add(parser.Parse(result));
                }

                var modelResults = parseResults.Select(o => new ModelResult
                {
                    Start      = o.Start.Value,
                    End        = o.Start.Value + o.Length.Value - 1,
                    Resolution = (o.Value is UnitValue) ?
                                 new SortedDictionary <string, object>
                    {
                        { "value", ((UnitValue)o.Value).Number },
                        { "unit", ((UnitValue)o.Value).Unit }
                    }
                          : new SortedDictionary <string, object>
                    {
                        { "value", (string)o.Value }
                    },
                    Text     = o.Text,
                    TypeName = ModelTypeName
                }).ToList();

                foreach (var result in modelResults)
                {
                    bool bAdd = true;

                    foreach (var extractionResult in extractionResults)
                    {
                        if (extractionResult.Start == result.Start && extractionResult.End == result.End)
                        {
                            bAdd = false;
                        }
                    }

                    if (bAdd)
                    {
                        extractionResults.Add(result);
                    }
                }
            }

            return(extractionResults);
        }
Ejemplo n.º 5
0
        public List <ModelResult> Parse(string query, System.DateTime refTime)
        {
            // Preprocess the query
            query = FormatUtility.Preprocess(query);

            var parsedDateTimes = new List <DateTimeParseResult>();

            try {
                var extractResults = Extractor.Extract(query, refTime);

                foreach (var result in extractResults)
                {
                    var parseResult = Parser.Parse(result, refTime);
                    if (parseResult.Value is List <DateTimeParseResult> )
                    {
                        parsedDateTimes.AddRange((List <DateTimeParseResult>)parseResult.Value);
                    }
                    else
                    {
                        parsedDateTimes.Add(parseResult);
                    }
                }
            }
            catch (Exception)
            {
                // Nothing to do. Exceptions in parse should not break users of recognizers.
                // No result.
            }

            return(parsedDateTimes.Select(o => new ModelResult
            {
                Start = o.Start.Value,
                End = o.Start.Value + o.Length.Value - 1,
                TypeName = o.Type,
                Resolution = o.Value as SortedDictionary <string, object>,
                Text = o.Text,
                ParentText = GetParentText(o)
            }).ToList());
        }
        public List <ModelResult> Parse(string query)
        {
            // Preprocess the query
            query = FormatUtility.Preprocess(query, false);

            List <ModelResult> extractionResults = new List <ModelResult>();

            try
            {
                foreach (var p in ExtractorParserDic)
                {
                    var extractor = p.Key;
                    var parser    = p.Value;

                    var extractedResults = extractor.Extract(query);

                    var parsedResults = new List <ParseResult>();

                    foreach (var result in extractedResults)
                    {
                        var parseResult = parser.Parse(result);
                        if (parseResult.Value is List <ParseResult> )
                        {
                            parsedResults.AddRange((List <ParseResult>)parseResult.Value);
                        }
                        else
                        {
                            parsedResults.Add(parseResult);
                        }
                    }

                    var modelResults = parsedResults.Select(o => new ModelResult
                    {
                        Start      = o.Start.Value,
                        End        = o.Start.Value + o.Length.Value - 1,
                        Resolution = (o.Value is UnitValue) ? new SortedDictionary <string, object>
                        {
                            { ResolutionKey.Value, ((UnitValue)o.Value).Number },
                            { ResolutionKey.Unit, ((UnitValue)o.Value).Unit }
                        }
                            : (o.Value is CurrencyUnitValue) ? new SortedDictionary <string, object>
                        {
                            { ResolutionKey.Value, ((CurrencyUnitValue)o.Value).Number },
                            { ResolutionKey.Unit, ((CurrencyUnitValue)o.Value).Unit },
                            { ResolutionKey.IsoCurrency, ((CurrencyUnitValue)o.Value).IsoCurrency }
                        } : new SortedDictionary <string, object>
                        {
                            { ResolutionKey.Value, (string)o.Value }
                        },
                        Text     = o.Text,
                        TypeName = ModelTypeName
                    }).ToList();

                    foreach (var result in modelResults)
                    {
                        bool bAdd = true;

                        foreach (var extractionResult in extractionResults)
                        {
                            if (extractionResult.Start == result.Start && extractionResult.End == result.End)
                            {
                                bAdd = false;
                            }
                        }

                        if (bAdd)
                        {
                            extractionResults.Add(result);
                        }
                    }
                }
            }
            catch (Exception)
            {
                // Nothing to do. Exceptions in parse should not break users of recognizers.
                // No result.
            }

            return(extractionResults);
        }