public void NestedPatternOrdinalityTests2() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { "((x) (y))+" } }, } }); string text = "x y x y"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); text = "x x z y y"; results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(0, entities.Count); }
public void PatternParser_OneOfModifierTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { "a (dog|cat|test)" } } } }); string text = "this is a test dog frog"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("a test", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); text = "this is a nottest notdog notfrog"; results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(0, entities.Count); }
public void TestLoadYaml() { LucyDocument lucyModel; using (var streamReader = new StreamReader(File.OpenRead(Path.Combine(@"..", "..", "..", "lucy.yaml")))) { lucyModel = yamlDeserializer.Deserialize <LucyDocument>(streamReader); } var engine = new LucyEngine(lucyModel); string text = "the box is 9 inches by 7."; var results = engine.MatchEntities(text); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "boxSize").ToList(); Assert.AreEqual(1, entities.Count); var entity = entities.Single().Children.First(entity => entity.Type == "twoDimensional"); Assert.AreEqual("twoDimensional", entity.Type); Assert.AreEqual(2, entity.Children.Count); Assert.AreEqual(1, entity.Children.Where(e => e.Type == "number").Count()); Assert.AreEqual(1, entity.Children.Where(e => e.Type == "dimension").Count()); }
public void PatternParser_MergeContigious() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@cold", Patterns = new List <Pattern>() { new string[] { "cold", "ice", "freezing", "frigid" } } }, new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { "I want (@cold)* beer" } } } }); string text = "I want ice cold beer"; var results = engine.MatchEntities(text); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("I want ice cold beer", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); Assert.AreEqual("ice cold", entities[0].Children.First().Text); }
public void TestLoadMacroTest() { LucyDocument lucyModel; using (var streamReader = new StreamReader(File.OpenRead(Path.Combine(@"..", "..", "..", "lucy.yaml")))) { lucyModel = yamlDeserializer.Deserialize <LucyDocument>(streamReader); } var engine = new LucyEngine(lucyModel); string text = "flight from seattle to chicago."; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var trip = results.Where(e => e.Type == "trip").Single(); var departure = trip.Children.Where(e => e.Type == "departure").Single(); var departurePlace = departure.Children.Where(e => e.Type == "placeAndTime").Single(); var departureCity = departurePlace.Children.Where(e => e.Type == "city").Single(); Assert.AreEqual("seattle", departureCity.Resolution); var destination = trip.Children.Where(e => e.Type == "destination").Single(); var desinationPlace = destination.Children.Where(e => e.Type == "placeAndTime").Single(); var destinationCity = desinationPlace.Children.Where(e => e.Type == "city").Single(); Assert.AreEqual("chicago", destinationCity.Resolution); }
public void RegexPatternMatcher() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { "/N[\\dA-Z]{5}/" } } } }); string text = "I fly N185LM and used to fly N87405."; var results = engine.MatchEntities(text); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(2, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("N185LM", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); Assert.AreEqual("N87405", text.Substring(entities[1].Start, entities[1].End - entities[1].Start)); }
public void WildcardSingleTest() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@name", Patterns = new List <Pattern>() { "name is (value:___)" } }, } }); string text = "my name is joe smith and I am cool"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "name").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("name", entities[0].Type); Assert.AreEqual("joe", entities[0].Children.First().Resolution); Assert.AreEqual("name is joe", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void WildcardSinglePrefixTest() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@beer", Patterns = new List <Pattern>() { "(value:___) beer" } }, } }); string text = "like coors beer"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "beer").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("beer", entities[0].Type); Assert.AreEqual("coors", entities[0].Children.First().Resolution); Assert.AreEqual("coors beer", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void IgnoreTokenTests() { var engine = new LucyEngine(new LucyDocument() { Locale = "en", Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Ignore = new List <string>() { "is" }, Patterns = new List <Pattern>() { new Pattern("name (value:___)") } } } }); string text = "my name is joe"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("name is joe", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); Assert.AreEqual("joe", entities[0].Children.First().Resolution); }
public void FuzzyTokenPatternMatcherTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", FuzzyMatch = true, Patterns = new List <Pattern>() { "test" } } } }); string text = "this is a tesst"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("tesst", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void PatternParser_ZeroOrMoreModifierQuantityTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { "a (dog|cat|test)3*" } } } }); var text = "this is a dog dog dog test test test"; var results = engine.MatchEntities(text, null); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("a dog dog dog", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void WildcardDoubleInlineOrdinalTest() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@name", Patterns = new List <Pattern>() { "name is (value:___)+" } }, new EntityDefinition() { Name = "@entity", Patterns = new List <Pattern>() { "end" } }, } }); // stop on token string text = "my name is joe smith and stuff"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "name").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("name", entities[0].Type); Assert.AreEqual("joe smith and stuff", entities[0].Children.First().Resolution); Assert.AreEqual("name is joe smith and stuff", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); // stop on entity text = "my name is joe smith end token"; results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); entities = results.Where(e => e.Type == "name").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("name", entities[0].Type); Assert.AreEqual("joe smith", entities[0].Children.First().Resolution); Assert.AreEqual("name is joe smith", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void CascadingPatternTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@boxsize", Patterns = new List <Pattern>() { "box is @twoDimensional" } }, new EntityDefinition() { Name = "@height", Patterns = new List <Pattern>() { "(@dimension|@number) (height|tall)" } }, new EntityDefinition() { Name = "@width", Patterns = new List <Pattern>() { "(@dimension|@number) (width|wide)" } }, new EntityDefinition() { Name = "@twoDimensional", Patterns = new List <Pattern>() { "(@width|@dimension|@number) (x|by)? (@height|@dimension|@number)", "(@height|@dimension|@number) (x|by)? (@width|@dimension|@number)", } }, } }); string text = "the box is 9 inches by 7."; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "boxsize").ToList(); Assert.AreEqual(1, entities.Count); var entity = entities.Single().Children.Single(); Assert.AreEqual("twoDimensional", entity.Type); Assert.AreEqual(2, entity.Children.Count); Assert.AreEqual(1, entity.Children.Where(e => e.Type == "number").Count()); Assert.AreEqual(1, entity.Children.Where(e => e.Type == "dimension").Count()); }
private void ShowResults() { try { if (lucyModel != this.editor.Document.Text) { LoadModel(); } var text = this.query?.Text?.Trim() ?? string.Empty; if (text.Length > 0) { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); var results = engine.MatchEntities(text, includeInternal: this.showInternal.IsChecked.Value); sw.Stop(); this.tabs.SelectedIndex = 2; this.labelBox.Text = $"{sw.ElapsedMilliseconds} ms\n" + String.Join("\n", results.Select(s => LucyEngine.VisualizeEntity(text, s, showSpans: true, showHierarchy: false))); this.entitiesBox.Text = String.Join("\n", results.Select(s => LucyEngine.VisualizeEntity(text, s, showSpans: false, showHierarchy: true))); //var activity = new Activity(ActivityTypes.Message) { Text = text }; //var tc = new TurnContext(new TestAdapter(), activity); //var dc = new DialogContext(new DialogSet(), tc, new DialogState()); //var recognizerResult = recognizer.RecognizeAsync(dc, activity).Result; //// this.recognizerBox.Text = JsonConvert.SerializeObject(recognizerResult, new JsonSerializerSettings() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }); //this.recognizerBox.Text = new Serializer().Serialize(JObject.FromObject(recognizerResult).ToObject<ExpandoObject>()); } } catch (SemanticErrorException err) { this.error.Content = err.Message; this.error.Visibility = Visibility.Visible; this.editor.ScrollToLine(err.Start.Line); var line = this.editor.Document.GetLineByNumber(err.Start.Line - 1); this.editor.Select(line.Offset, line.Length); } catch (SyntaxErrorException err) { this.error.Content = err.Message; this.error.Visibility = Visibility.Visible; this.editor.ScrollToLine(err.Start.Line); var line = this.editor.Document.GetLineByNumber(err.Start.Line - 1); this.editor.Select(line.Offset, line.Length); } catch (Exception err) { this.error.Content = err.Message; this.error.Visibility = Visibility.Visible; } }
public void TestNoBuiltinsReferenced() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { } }, useAllBuiltIns: false); string text = "this is a http://foo.com?x=13&y=132123 cheese"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); Assert.AreEqual(0, results.Count()); }
public void CreatesTextTokens() { var engine = new LucyEngine(new LucyDocument()); string text = "this is a test"; var results = engine.MatchEntities(text, includeInternal: true); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == TokenPatternMatcher.ENTITYTYPE).ToList(); Assert.AreEqual(4, entities.Count); Assert.AreEqual("this", entities[0].Text); Assert.AreEqual("is", entities[1].Text); Assert.AreEqual("a", entities[2].Text); Assert.AreEqual("test", entities[3].Text); }
public void TestAllBuiltIns() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { // new EntityDefinition() { Name = "@test", Patterns = new List<Pattern>(){ "@url" } }, } }, useAllBuiltIns: true); string text = "this is a http://foo.com?x=13&y=132123 cheese"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); Assert.AreEqual(1, results.Count()); Assert.AreEqual("http://foo.com?x=13&y=132123", results[0].Text); }
public void MergeNestedChildren() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@PizzaOrder", Patterns = new List <Pattern>() { "(@Topping)* (@AddToppings)* " } }, new EntityDefinition() { Name = "@AddToppings", Patterns = new List <Pattern>() { "(@ToppingQuantifier)* (@Topping)+" } }, new EntityDefinition() { Name = "@ToppingQuantifier", Patterns = new List <Pattern>() { "extra" } }, new EntityDefinition() { Name = "@Topping", Patterns = new List <Pattern>() { "Cheese" } }, } }); string text = "extra cheese"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); Assert.AreEqual(1, results[0].Children.Count()); }
public void TestExternalEntities() { var engine = new LucyEngine(new LucyDocument() { ExternalEntities = new List <string>() { "url" }, Entities = new List <EntityDefinition>() { } }, useAllBuiltIns: false); string text = "this is a http://foo.com?x=13&y=132123 cheese"; var results = engine.MatchEntities(text, null); Assert.AreEqual(1, results.Count()); Assert.AreEqual("http://foo.com?x=13&y=132123", results[0].Text); }
public void WildcardMatcherWithOptionalTokenTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test1", Patterns = new List <Pattern>() { "test1" } }, new EntityDefinition() { Name = "@test2", Patterns = new List <Pattern>() { "test2" } }, new EntityDefinition() { Name = "@test3", Patterns = new List <Pattern>() { "start (@test1|@test2|label:___)* end (label:___)* " } }, } }); string text = "start test1 cool end more stuff"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test3").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test1", entities.First().Children.First().Text); Assert.AreEqual("cool", entities.First().Children.Skip(1).First().Text); Assert.AreEqual("more stuff", entities.First().Children.Skip(2).First().Text); }
public void WildcardNamedTests() { var engine = new LucyEngine(new LucyDocument() { Macros = new Dictionary <string, string>() { { "$is", "(is|equals)" }, }, Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@size", Patterns = new List <Pattern>() { "small" } }, new EntityDefinition() { Name = "@drink", Patterns = new List <Pattern>() { "a (@size)? (label:___)* cocktail" } }, } }); string text = "a clyde mills cocktail."; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "drink").ToList(); Assert.AreEqual(1, entities.Count); var entity = entities.Single().Children.Single(); Assert.AreEqual("label", entity.Type); Assert.AreEqual("clyde mills", entity.Resolution); }
public void TokenPatternMatcherWithEntityTests() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test1", Patterns = new List <Pattern>() { "test1" } }, new EntityDefinition() { Name = "@test2", Patterns = new List <Pattern>() { "test2" } }, new EntityDefinition() { Name = "@test3", Patterns = new List <Pattern>() { "@test1 @test2" } }, } }); string text = "nomatch test1 test2 nomatch"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test3").ToList(); Assert.AreEqual(1, entities.Count); Assert.AreEqual("test1 test2", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); }
public void CanonicalValuesTest() { var engine = new LucyEngine(new LucyDocument() { Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@test", Patterns = new List <Pattern>() { new string[] { "LAX", "los angeles" }, new string[] { "DSM", "(des moines)~" }, new string[] { "SEA", "seattle" }, new string[] { "OHR", "o'hare", "ohare" }, new string[] { "MID", "midway" }, } } } }); string text = "flight from seattle to dez moiynes"; var results = engine.MatchEntities(text, null); Trace.TraceInformation("\n" + LucyEngine.VisualEntities(text, results)); var entities = results.Where(e => e.Type == "test").ToList(); Assert.AreEqual(2, entities.Count); Assert.AreEqual("test", entities[0].Type); Assert.AreEqual("DSM", entities[0].Resolution); Assert.AreEqual("dez moiynes", text.Substring(entities[0].Start, entities[0].End - entities[0].Start)); Assert.AreEqual("test", entities[1].Type); Assert.AreEqual("SEA", entities[1].Resolution); Assert.AreEqual("seattle", text.Substring(entities[1].Start, entities[1].End - entities[1].Start)); }
public void RunPerfTests() { StringBuilder sb = new StringBuilder(); var model = new LucyDocument() { Macros = new Dictionary <string, string>() { { "$name", "(name|nom de plum|handle)" }, { "$is", "(is|equals)?" } }, Entities = new List <EntityDefinition>() { new EntityDefinition() { Name = "@name", Patterns = new List <Pattern>() { "$name $is ___" } }, new EntityDefinition() { Name = "@boxsize", Patterns = new List <Pattern>() { "box $is @twoDimensions" } }, new EntityDefinition() { Name = "@height", Patterns = new List <Pattern>() { "(@dimension|@number) (height|tall)" } }, new EntityDefinition() { Name = "@width", Patterns = new List <Pattern>() { "(@dimension|@number) (width|wide)" } }, new EntityDefinition() { Name = "@twoDimensions", Patterns = new List <Pattern>() { "(@width|@dimension|@number) (x|by)? (@height|@dimension|@number)", "(@height|@dimension|@number) (x|by)? (@width|@dimension|@number)", } }, } }; Stopwatch sw = new Stopwatch(); sw.Start(); var engine = new LucyEngine(model); sw.Stop(); sb.AppendLine($"loading: {sw.Elapsed}"); sw.Reset(); string text = "the box is 9 inches by 7."; sw.Restart(); var results = engine.MatchEntities(text); sw.Stop(); sb.AppendLine($"single cold match: {sw.Elapsed}"); sw.Reset(); sw.Restart(); results = engine.MatchEntities(text, null); sw.Stop(); sb.AppendLine($"single warm match: {sw.Elapsed}"); sw.Reset(); sw.Restart(); var count = 1000; for (int i = 0; i < count; i++) { results = engine.MatchEntities(text); } sw.Stop(); sb.AppendLine($"{count} utterances: {sw.Elapsed} {(float)sw.ElapsedMilliseconds/count} ms per match "); sw.Reset(); Trace.TraceInformation(sb.ToString()); //File.WriteAllText(@"c:\scratch\timing.txt", sb.ToString()); }
public override async Task <RecognizerResult> RecognizeAsync(DialogContext dialogContext, Activity activity, CancellationToken cancellationToken = default, Dictionary <string, string> telemetryProperties = null, Dictionary <string, double> telemetryMetrics = null) { if (this._engine == null) { if (this.Model == null) { var resourceExplorer = dialogContext.Context.TurnState.Get <ResourceExplorer>() ?? throw new ArgumentException("No resource Explorer was found in dialog context"); resourceExplorer.AddResourceType("yaml"); var modelId = ResourceId.GetValue(dialogContext.State); var modelResource = resourceExplorer.GetResource(modelId) ?? throw new ArgumentException($"{modelId} not found"); var yamlOrJson = await modelResource.ReadTextAsync(); this._engine = new LucyEngine(yamlOrJson); } else { this._engine = new LucyEngine(this.Model); } } List <LucyEntity> externalEntities = new List <LucyEntity>(); if (ExternalEntityRecognizer != null) { var results = await ExternalEntityRecognizer.RecognizeAsync(dialogContext, activity, cancellationToken, telemetryProperties, telemetryMetrics).ConfigureAwait(false); externalEntities = GetEntitiesFromObject(activity, results.Entities).ToList(); } var recognizerResult = new RecognizerResult(); var lucyEntities = _engine.MatchEntities(activity.Text ?? string.Empty, externalEntities); recognizerResult.Entities = GetRecognizerEntities(lucyEntities); var intents = this.Intents.GetValue(dialogContext.State) ?? new List <string>(); if (intents.Any()) { foreach (var lucyEntity in lucyEntities.Where(entity => intents.Contains(entity.Type))) { recognizerResult.Intents.Add(lucyEntity.Type, new IntentScore() { Score = lucyEntity.Score }); } } else if (recognizerResult.Entities.Count > externalEntities.Count + 1) { recognizerResult.Intents.Add(MatchedIntent, new IntentScore() { Score = lucyEntities.Max(e => e.Score) }); } if (!recognizerResult.Intents.Any()) { recognizerResult.Intents.Add(NoneIntent, new IntentScore { Score = 1.0f }); } await dialogContext.Context.TraceActivityAsync(nameof(LucyRecognizer), JObject.FromObject(recognizerResult), "RecognizerResult", "Lucy RecognizerResult", cancellationToken).ConfigureAwait(false); this.TrackRecognizerResult(dialogContext, "LucyRecognizerResult", this.FillRecognizerResultTelemetryProperties(recognizerResult, telemetryProperties), telemetryMetrics); return(recognizerResult); }
async Task OnTextChanged(string value) { try { var yaml = await yamlEditor.GetValue(); var text = value.Trim() ?? string.Empty; IEnumerable <LucyEntity> results = null; if (text.Length == 0) { return; } #if embedded if (lucyModel != yaml) { LoadModel(yaml); } var sw = new System.Diagnostics.Stopwatch(); sw.Start(); results = engine.MatchEntities(text); sw.Stop(); this.Elapsed = $"{sw.Elapsed.TotalMilliseconds} ms"; #else var sw = new System.Diagnostics.Stopwatch(); sw.Start(); var result = await Http.PostAsJsonAsync("entities", new EntitiesRequest { yaml = yaml, text = text }); sw.Stop(); // this.Elapsed = $"Network: {sw.Elapsed.TotalMilliseconds} ms"; var entityResponse = JsonConvert.DeserializeObject <EntitiesResponse>(await result.Content.ReadAsStringAsync()); this.Elapsed = $"{entityResponse.elapsed} ms"; if (!String.IsNullOrEmpty(entityResponse.message)) { this.Error = entityResponse.message; this.alertBox.Show(); } else { this.alertBox.Hide(); } results = entityResponse.entities; #endif this.TopResultVisible = true; this.AllResultsVisible = false; this.TopResult = LucyEngine.VisualEntities(text, results); this.EntityResults = String.Join("\n\n", results.Select(entity => LucyEngine.VisualizeEntity(text, entity))); } catch (SemanticErrorException err) { this.Error = err.Message; this.alertBox.Show(); //this.editor.ScrollToLine(err.Start.Line); //var line = this.editor.Document.GetLineByNumber(err.Start.Line - 1); //this.editor.Select(line.Offset, line.Length); } catch (SyntaxErrorException err) { this.Error = err.Message; this.alertBox.Show(); //this.error.Visibility = Visibility.Visible; //this.editor.ScrollToLine(err.Start.Line); //var line = this.editor.Document.GetLineByNumber(err.Start.Line - 1); //this.editor.Select(line.Offset, line.Length); } catch (Exception err) { this.Error = err.Message; this.alertBox.Show(); //this.error.Content = err.Message; //this.error.Visibility = Visibility.Visible; } }