public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (turnContext.Activity.Type == ActivityTypes.Message &&
                !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _defaultLocale ?? English;

                List <ModelResult> modelResults = null;

                switch (_internetProtocolPromptType)
                {
                case InternetProtocolPromptType.IpAddress:
                    modelResults = SequenceRecognizer.RecognizeIpAddress(turnContext.Activity.Text, culture);
                    break;

                case InternetProtocolPromptType.Url:
                    modelResults = SequenceRecognizer.RecognizeURL(turnContext.Activity.Text, culture);
                    break;
                }

                if (modelResults?.Count > 0)
                {
                    var value = modelResults[0].Resolution["value"].ToString();
                    turnContext.TurnState.Add("InternetEntities", value);
                }
            }

            await next(cancellationToken);
        }
Esempio n. 2
0
        public void WithoutLazyInitializationAndCulture_CacheWithCulture()
        {
            var recognizer    = new SequenceRecognizer(Culture.English, lazyInitialization: false);
            var internalCache = recognizer.GetInternalCache();

            Assert.IsTrue(internalCache.All(kv => kv.Key.culture == Culture.English));
        }
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (_mediaMiddlewareSettings.IsSocialMediaEnable && turnContext.Activity.Type == ActivityTypes.Message &&
                !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _mediaMiddlewareSettings.Locale;

                List <ModelResult> modelResults = null;

                switch (_mediaMiddlewareSettings.MediaType)
                {
                case SocialMediaType.Mention:
                    modelResults = SequenceRecognizer.RecognizeMention(turnContext.Activity.Text, culture);
                    break;

                case SocialMediaType.Hashtag:
                    modelResults = SequenceRecognizer.RecognizeHashtag(turnContext.Activity.Text, culture);
                    break;
                }

                if (modelResults?.Count > 0)
                {
                    var value = modelResults[0].Resolution["value"].ToString();

                    ObjectPath.SetPathValue(turnContext.TurnState, _mediaMiddlewareSettings.Property, value);
                }
            }

            await next(cancellationToken);
        }
Esempio n. 4
0
        private async Task <DialogTurnResult> ContactConfirmStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var userData = await Services.GetUserProfileAsync(stepContext.Context, cancellationToken);

            var currentEvent = Utilities.CheckEvent(stepContext.Context);

            //Ignore whatever the response was if the user rejected input
            //TODO: Make this a setting per-dealer?
            if (currentEvent != Constants.Event_Reject)
            {
                if (stepContext.Result != null)
                {
                    var phoneDetails = SequenceRecognizer.RecognizePhoneNumber(stepContext.Context.Activity.Text, "en");
                    var emailDetails = SequenceRecognizer.RecognizeEmail(stepContext.Context.Activity.Text, "en");

                    if (phoneDetails.Count > 0)
                    {
                        userData.Details.Phone = phoneDetails.First().Text;
                    }
                    if (emailDetails.Count > 0)
                    {
                        userData.Details.Email = emailDetails.First().Text;
                    }

                    await Services.SetUserProfileAsync(userData, stepContext, cancellationToken);
                }
            }

            return(await stepContext.NextAsync(cancellationToken : cancellationToken));
        }
Esempio n. 5
0
        public void WithInvalidCulture_AlwaysUseEnglish()
        {
            var recognizer  = new SequenceRecognizer();
            var testedModel = recognizer.GetPhoneNumberModel(InvalidCulture);

            TestPhoneNumber(testedModel, controlModel, TestInput);
        }
        protected override Task <InputState> OnRecognizeInputAsync(DialogContext dc, CancellationToken cancellationToken)
        {
            var validateText = dc.State.GetValue <object>(VALUE_PROPERTY);

            if (!(validateText is string))
            {
                return(Task.FromResult(InputState.Invalid));
            }

            var culture = GetCulture(dc);
            var message = validateText.ToString();

            var recognizeGuid = SequenceRecognizer.RecognizeGUID(message, culture);

            if (recognizeGuid == null || recognizeGuid.Count <= 0)
            {
                return(Task.FromResult(InputState.Unrecognized));
            }

            var result = recognizeGuid[0].Resolution["value"].ToString();

            if (ResultProperty != null)
            {
                dc.State.SetValue(ResultProperty.GetValue(dc.State), result);
            }

            return(Task.FromResult(InputState.Valid));
        }
Esempio n. 7
0
        public void WithoutLazyInitialization_CacheFull()
        {
            var recognizer    = new SequenceRecognizer(lazyInitialization: false);
            var internalCache = recognizer.GetInternalCache();

            Assert.AreNotEqual(0, internalCache.Count);
        }
Esempio n. 8
0
        public void WithLazyInitialization_CacheEmpty()
        {
            var recognizer    = new SequenceRecognizer(lazyInitialization: true);
            var internalCache = recognizer.GetInternalCache();

            Assert.AreEqual(0, internalCache.Count);
        }
Esempio n. 9
0
        protected override Task <InputState> OnRecognizeInputAsync(DialogContext dc, CancellationToken cancellationToken)
        {
            var validateText = dc.State.GetValue <object>(VALUE_PROPERTY);

            if (!(validateText is string strEmailText))
            {
                return(Task.FromResult(InputState.Invalid));
            }

            var culture = GetCulture(dc);

            var modelResults = SequenceRecognizer.RecognizePhoneNumber(strEmailText, culture);

            if (modelResults == null || modelResults.Count <= 0)
            {
                return(Task.FromResult(InputState.Unrecognized));
            }

            var result = modelResults[0].Resolution["value"].ToString();

            if (ResultProperty != null)
            {
                dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result);
            }

            return(Task.FromResult(InputState.Valid));
        }
Esempio n. 10
0
        public void WithoutTargetCultureAndWithoutCulture_FallbackToEnglishCulture()
        {
            var recognizer  = new SequenceRecognizer();
            var testedModel = recognizer.GetPhoneNumberModel();

            TestPhoneNumber(testedModel, controlModel, TestInput);
        }
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (_internetProtocolMiddlewareSettings.IsInternetProtocolEnable && turnContext.Activity.Type == ActivityTypes.Message &&
                !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _internetProtocolMiddlewareSettings.Locale;

                List <ModelResult> modelResults = null;

                switch (_internetProtocolMiddlewareSettings.InternetProtocolType)
                {
                case InternetProtocolType.IpAddress:
                    modelResults = SequenceRecognizer.RecognizeIpAddress(turnContext.Activity.Text, culture);
                    break;

                case InternetProtocolType.Url:
                    modelResults = SequenceRecognizer.RecognizeURL(turnContext.Activity.Text, culture);
                    break;
                }

                if (modelResults?.Count > 0)
                {
                    var value = modelResults[0].Resolution["value"].ToString();

                    ObjectPath.SetPathValue(turnContext.TurnState, _internetProtocolMiddlewareSettings.Property, value);
                }
            }

            await next(cancellationToken);
        }
Esempio n. 12
0
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (turnContext.Activity.Type == ActivityTypes.Message &&
                !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _defaultLocale ?? English;

                List <ModelResult> modelResults = null;

                switch (_socialPromptType)
                {
                case SocialMediaPromptType.Mention:
                    modelResults = SequenceRecognizer.RecognizeMention(turnContext.Activity.Text, culture);
                    break;

                case SocialMediaPromptType.Hashtag:
                    modelResults = SequenceRecognizer.RecognizeHashtag(turnContext.Activity.Text, culture);
                    break;
                }

                if (modelResults?.Count > 0)
                {
                    var value = modelResults[0].Resolution["value"].ToString();
                    turnContext.TurnState.Add("SocialEntities", value);
                }
            }

            await next(cancellationToken);
        }
        string GetPhoneNumber(string text)
        {
            var entities = SequenceRecognizer.RecognizePhoneNumber(text, Culture.English);

            //entities.Dump();
            foreach (var entity in entities)
            {
                if (entity.TypeName != PhoneNumberKey)
                {
                    break;
                }
                if (entity.Resolution.TryGetValue("score", out object scoreObject))
                {
                    double score = Convert.ToDouble(scoreObject);
                    if (score >= 0.4)
                    {
                        if (entity.Resolution.TryGetValue("value", out object valueObject))
                        {
                            return(FormatPhoneNumber(valueObject));
                        }
                    }
                }
            }
            return("");
        }
Esempio n. 14
0
        public void RecognizePhoneNumber()
        {
            var input = "My phone number is 1 (877) 609-2233.";

            var actual = SequenceRecognizer.RecognizePhoneNumber(input, Culture.English);

            Assert.AreEqual("phonenumber", actual[0].TypeName);
            Assert.AreEqual("1 (877) 609-2233", actual[0].Text);
            Assert.AreEqual("1 (877) 609-2233", actual[0].Resolution["value"]);
        }
Esempio n. 15
0
        /// <summary>
        /// Parse query with all recognizers
        /// </summary>
        private static IEnumerable <ModelResult> ParseAll(string query, string culture)
        {
            return(MergeResults(
                       // Number recognizer will find any number from the input
                       // E.g "I have two apples" will return "2".
                       NumberRecognizer.RecognizeNumber(query, culture),

                       // Ordinal number recognizer will find any ordinal number
                       // E.g "eleventh" will return "11".
                       NumberRecognizer.RecognizeOrdinal(query, culture),

                       // Percentage recognizer will find any number presented as percentage
                       // E.g "one hundred percents" will return "100%"
                       NumberRecognizer.RecognizePercentage(query, culture),

                       // Number Range recognizer will find any cardinal or ordinal number range
                       // E.g. "between 2 and 5" will return "(2,5)"
                       NumberRecognizer.RecognizeNumberRange(query, culture),

                       // Age recognizer will find any age number presented
                       // E.g "After ninety five years of age, perspectives change" will return "95 Year"
                       NumberWithUnitRecognizer.RecognizeAge(query, culture),

                       // Currency recognizer will find any currency presented
                       // E.g "Interest expense in the 1988 third quarter was $ 75.3 million" will return "75300000 Dollar"
                       NumberWithUnitRecognizer.RecognizeCurrency(query, culture),

                       // Dimension recognizer will find any dimension presented
                       // E.g "The six-mile trip to my airport hotel that had taken 20 minutes earlier in the day took more than three hours." will return "6 Mile"
                       NumberWithUnitRecognizer.RecognizeDimension(query, culture),

                       // Temperature recognizer will find any temperature presented
                       // E.g "Set the temperature to 30 degrees celsius" will return "30 C"
                       NumberWithUnitRecognizer.RecognizeTemperature(query, culture),

                       // Datetime recognizer This model will find any Date even if its write in coloquial language
                       // E.g "I'll go back 8pm today" will return "2017-10-04 20:00:00"
                       DateTimeRecognizer.RecognizeDateTime(query, culture),

                       // PhoneNumber recognizer will find any phone number presented
                       // E.g "My phone number is ( 19 ) 38294427."
                       SequenceRecognizer.RecognizePhoneNumber(query, culture),

                       // Add IP recognizer - This recognizer will find any Ipv4/Ipv6 presented
                       // E.g "My Ip is 8.8.8.8"
                       SequenceRecognizer.RecognizeIpAddress(query, culture),

                       // Add Boolean recognizer - This model will find yes/no like responses, including emoji -
                       // E.g "yup, I need that" will return "True"
                       ChoiceRecognizer.RecognizeBoolean(query, culture)
                       ));
        }
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (turnContext.Activity.Type == ActivityTypes.Message &&
                !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _defaultLocale ?? English;

                var recognizeEmail = SequenceRecognizer.RecognizeEmail(turnContext.Activity.Text, culture);
                if (recognizeEmail?.Count > 0)
                {
                    var value = recognizeEmail[0].Resolution["value"].ToString();
                    turnContext.TurnState.Add("EmailEntities", value);
                }
            }

            await next(cancellationToken);
        }
        protected override Task <InputState> OnRecognizeInputAsync(DialogContext dc, CancellationToken cancellationToken)
        {
            var validateText = dc.State.GetValue <object>(VALUE_PROPERTY);

            if (!(validateText is string))
            {
                return(Task.FromResult(InputState.Invalid));
            }

            var culture = GetCulture(dc);
            List <ModelResult> results;

            var message = validateText.ToString();

            switch (ProtocolType.GetValue(dc.State))
            {
            case InternetProtocolInputType.IpAddress:
                results = SequenceRecognizer.RecognizeIpAddress(message, culture);
                break;

            case InternetProtocolInputType.Url:
                results = SequenceRecognizer.RecognizeURL(message, culture);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (results == null || results.Count <= 0)
            {
                return(Task.FromResult(InputState.Unrecognized));
            }

            var result = results[0].Resolution["value"].ToString();

            if (ResultProperty != null)
            {
                dc.State.SetValue(ResultProperty.GetValue(dc.State), result);
            }

            return(Task.FromResult(InputState.Valid));
        }
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next,
                                      CancellationToken cancellationToken = new CancellationToken())
        {
            if (_emailMiddlewareSettings.IsEmailEnable && turnContext.Activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(turnContext.Activity.Text))
            {
                var culture = turnContext.Activity.Locale ?? _emailMiddlewareSettings.Locale;

                var recognizeEmail = SequenceRecognizer.RecognizeEmail(turnContext.Activity.Text, culture);
                if (recognizeEmail?.Count > 0)
                {
                    var value = recognizeEmail[0].Resolution["value"].ToString();

                    if (!string.IsNullOrEmpty(value))
                    {
                        ObjectPath.SetPathValue(turnContext.TurnState, _emailMiddlewareSettings.Property, value);
                    }
                }
            }
            await next(cancellationToken);
        }
Esempio n. 19
0
        private async Task <bool> ValidateContactAsync(PromptValidatorContext <string> promptContext, CancellationToken cancellationToken)
        {
            var userData = await Services.GetUserProfileAsync(promptContext.Context, cancellationToken);

            var pendingEvent = Utilities.CheckEvent(promptContext.Context);

            if (pendingEvent == Constants.Event_Reject)
            {
                var canSkip = userData.Details.Phone != null || userData.Details.Email != null;
                if (!canSkip)
                {
                    await promptContext.Context.SendActivityAsync("I'm sorry, but I need some contact information to go forward.\r\nPlease provide an email or phone numebr.");
                }
                return(canSkip);
            }

            var phoneDetails = SequenceRecognizer.RecognizePhoneNumber(promptContext.Context.Activity.Text, "en");
            var emailDetails = SequenceRecognizer.RecognizeEmail(promptContext.Context.Activity.Text, "en");

            return(phoneDetails.Count != 0 || emailDetails.Count != 0);
        }
Esempio n. 20
0
        protected override Task <InputState> OnRecognizeInputAsync(DialogContext dc, CancellationToken cancellationToken)
        {
            var validateText = dc.State.GetValue <object>(VALUE_PROPERTY);

            if (!(validateText is string strEmailText))
            {
                return(Task.FromResult(InputState.Invalid));
            }

            var culture = GetCulture(dc);
            List <ModelResult> modelResult = null;

            switch (this.MediaType.GetValue(dc.State))
            {
            case SocialMediaInputType.Mention:
                modelResult = SequenceRecognizer.RecognizeMention(validateText.ToString(), culture);
                break;

            case SocialMediaInputType.Hashtag:
                modelResult = SequenceRecognizer.RecognizeHashtag(validateText.ToString(), culture);
                break;

            default:
                return(Task.FromResult(InputState.Invalid));
            }

            if (modelResult == null || modelResult.Count <= 0)
            {
                return(Task.FromResult(InputState.Unrecognized));
            }

            var result = modelResult[0].Resolution["value"].ToString();

            if (ResultProperty != null)
            {
                dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result);
            }

            return(Task.FromResult(InputState.Valid));
        }
        string GetEmail(string text)
        {
            var entities = SequenceRecognizer.RecognizeEmail(text, Culture.English);

            //entities.Dump();
            foreach (var entity in entities)
            {
                if (entity.TypeName != EmailKey)
                {
                    break;
                }
                if (entity.Resolution.TryGetValue("value", out object valueObject))
                {
                    string valueString = valueObject.ToString();
                    if (valueString.Contains("microsoft"))
                    {
                        return(valueObject.ToString());
                    }
                }
            }
            return("");
        }
Esempio n. 22
0
        private static IEnumerable <ModelResult> ParseAll(string query, string culture)
        {
            return(MergeResults(
                       // Number recognizer will find any number from the input
                       NumberRecognizer.RecognizeNumber(query, culture),

                       // Ordinal number recognizer will find any ordinal number
                       NumberRecognizer.RecognizeOrdinal(query, culture),

                       // Percentage recognizer will find any number presented as percentage
                       NumberRecognizer.RecognizePercentage(query, culture),

                       // Number Range recognizer will find any cardinal or ordinal number range
                       NumberRecognizer.RecognizeNumberRange(query, culture),

                       // Age recognizer will find any age number presented
                       NumberWithUnitRecognizer.RecognizeAge(query, culture),

                       // Currency recognizer will find any currency presented
                       NumberWithUnitRecognizer.RecognizeCurrency(query, culture),

                       // Dimension recognizer will find any dimension presented
                       NumberWithUnitRecognizer.RecognizeDimension(query, culture),

                       // Temperature recognizer will find any temperature presented
                       NumberWithUnitRecognizer.RecognizeTemperature(query, culture),

                       // Datetime recognizer This model will find any Date even if its write in coloquial language
                       DateTimeRecognizer.RecognizeDateTime(query, culture),

                       // PhoneNumber recognizer will find any phone number presented
                       SequenceRecognizer.RecognizePhoneNumber(query, culture),

                       // Add IP recognizer - This recognizer will find any Ipv4/Ipv6 presented
                       SequenceRecognizer.RecognizeIpAddress(query, culture)
                       ));
        }
 public EmailExtractor() : base((query, culture) => SequenceRecognizer.RecognizeEmail(query?.ToLowerInvariant(), culture))
 {
 }
Esempio n. 24
0
        public void Initialization()
        {
            var recognizer = new SequenceRecognizer();

            recognizer.GetInternalCache().Clear();
        }
 protected override List <ModelResult> Recognize(string text, string culture)
 {
     return(SequenceRecognizer.RecognizeMention(text, culture));
 }
        public void InitializationWithIntOption_ResolveOptionsEnum()
        {
            var recognizer = new SequenceRecognizer(EnglishCulture, 0);

            Assert.IsTrue(recognizer.Options.HasFlag(SequenceOptions.None));
        }
        public void InitializationNonLazy_CanGetModel()
        {
            var recognizer = new SequenceRecognizer(EnglishCulture, SequenceOptions.None, lazyInitialization: false);

            Assert.AreEqual(recognizer.GetPhoneNumberModel(), recognizer.GetPhoneNumberModel(EnglishCulture));
        }
        public void WithoutTargetCultureAndWithoutCulture_FallbackToEnglishCulture()
        {
            var recognizer = new SequenceRecognizer();

            Assert.AreEqual(recognizer.GetPhoneNumberModel(), recognizer.GetPhoneNumberModel(EnglishCulture));
        }
        public void WithInvalidCultureAsTarget_AlwaysUseEnglish()
        {
            var recognizer = new SequenceRecognizer(InvalidCulture);

            Assert.AreEqual(recognizer.GetPhoneNumberModel(), recognizer.GetPhoneNumberModel(EnglishCulture));
        }
        public void WithInvalidCulture_UseTargetCulture()
        {
            var recognizer = new SequenceRecognizer(EnglishCulture);

            Assert.AreEqual(recognizer.GetPhoneNumberModel(InvalidCulture), recognizer.GetPhoneNumberModel());
        }