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); }
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); }
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)); }
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)); }
public void WithoutLazyInitialization_CacheFull() { var recognizer = new SequenceRecognizer(lazyInitialization: false); var internalCache = recognizer.GetInternalCache(); Assert.AreNotEqual(0, internalCache.Count); }
public void WithLazyInitialization_CacheEmpty() { var recognizer = new SequenceRecognizer(lazyInitialization: true); var internalCache = recognizer.GetInternalCache(); Assert.AreEqual(0, internalCache.Count); }
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)); }
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); }
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(""); }
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"]); }
/// <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); }
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); }
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(""); }
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)) { }
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()); }