Exemple #1
0
        public List <ExtractResult> Extract(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(MatchSimpleCases(text));
            tokens.AddRange(MergeTwoTimePoints(text, reference));
            tokens.AddRange(MatchTimeOfDay(text));

            // Handle pure number cases like "from 6 to 7" cannot be extracted as time ranges under Calendar Mode
            if ((this.config.Options & DateTimeOptions.CalendarMode) != 0)
            {
                tokens.AddRange(MatchPureNumberCases(text));
            }

            var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            // TODO: Fix to solve german morgen (morning) / morgen (tomorrow) ambiguity. To be removed after the first version of DateTimeV2 in German is in production.
            timePeriodErs = GermanMorgenWorkaround(text, timePeriodErs);

            return(timePeriodErs);
        }
        public List <ExtractResult> Extract(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            // Date and time Extractions should be extracted from the text only once, and shared in the methods below, passed by value
            var dateErs = config.SingleDateExtractor.Extract(text, reference);
            var timeErs = config.SingleTimeExtractor.Extract(text, reference);

            tokens.AddRange(MatchSimpleCases(text, reference));
            tokens.AddRange(MergeTwoTimePoints(text, reference, new List <ExtractResult>(dateErs), new List <ExtractResult>(timeErs)));
            tokens.AddRange(MatchDuration(text, reference));
            tokens.AddRange(MatchTimeOfDay(text, reference, new List <ExtractResult>(dateErs)));
            tokens.AddRange(MatchRelativeUnit(text));
            tokens.AddRange(MatchDateWithPeriodPrefix(text, reference, new List <ExtractResult>(dateErs)));
            tokens.AddRange(MergeDateWithTimePeriodSuffix(text, new List <ExtractResult>(dateErs), new List <ExtractResult>(timeErs)));

            var ers = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                ers = TimeZoneUtility.MergeTimeZones(ers, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            return(ers);
        }
        private List <ExtractResult> ExtractImpl(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(MatchSimpleCases(text));
            tokens.AddRange(MergeTwoTimePoints(text, reference));
            tokens.AddRange(MatchTimeOfDay(text));

            // Handle pure number cases like "from 6 to 7" cannot be extracted as time ranges under Calendar Mode
            if ((this.config.Options & DateTimeOptions.CalendarMode) != 0)
            {
                tokens.AddRange(MatchPureNumberCases(text));
            }

            var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            // Filter ambiguous extractions e.g. 'morgen' in German and Dutch
            timePeriodErs = this.config.ApplyPotentialPeriodAmbiguityHotfix(text, timePeriodErs);

            return(timePeriodErs);
        }
        public List <ExtractResult> Extract(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(MatchSimpleCases(text));
            tokens.AddRange(MergeTwoTimePoints(text, reference));
            tokens.AddRange(MatchTimeOfDay(text));

            var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            return(timePeriodErs);
        }
        public virtual List <ExtractResult> Extract(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(BasicRegexMatch(text));
            tokens.AddRange(AtRegexMatch(text));
            tokens.AddRange(BeforeAfterRegexMatch(text));
            tokens.AddRange(SpecialCasesRegexMatch(text, reference));

            var timeErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timeErs = TimeZoneUtility.MergeTimeZones(timeErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            return(timeErs);
        }
Exemple #6
0
        public virtual List <ExtractResult> ExtractImpl(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(BasicRegexMatch(text));
            tokens.AddRange(AtRegexMatch(text));
            tokens.AddRange(BeforeAfterRegexMatch(text));
            tokens.AddRange(SpecialCasesRegexMatch(text, reference));

            var timeErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timeErs = TimeZoneUtility.MergeTimeZones(timeErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            // Remove common ambiguous cases
            timeErs = ExtractResultExtension.FilterAmbiguity(timeErs, text, this.config.AmbiguityFiltersDict);

            return(timeErs);
        }
Exemple #7
0
        public List <ExtractResult> Extract(string text, DateObject reference)
        {
            var tokens = new List <Token>();

            tokens.AddRange(MatchSimpleCases(text));
            tokens.AddRange(MergeTwoTimePoints(text, reference));
            tokens.AddRange(MatchTimeOfDay(text));

            // Handle pure number cases like "from 6 to 7" cannot be extracted as time ranges under Calendar Mode
            if ((this.config.Options & DateTimeOptions.CalendarMode) != 0)
            {
                tokens.AddRange(MatchPureNumberCases(text));
            }

            var timePeriodErs = Token.MergeAllTokens(tokens, text, ExtractorName);

            if ((this.config.Options & DateTimeOptions.EnablePreview) != 0)
            {
                timePeriodErs = TimeZoneUtility.MergeTimeZones(timePeriodErs, config.TimeZoneExtractor.Extract(text, reference), text);
            }

            return(timePeriodErs);
        }