Esempio n. 1
0
        public static CustomEntitiesDefinition GetEntitiesDefinition(
            int maximumFuziness  = 0,
            bool caseSensitive   = false,
            bool accentSensitive = false,
            params string[] words)
        {
            var targetCustomEntities = new List <CustomEntity>();

            foreach (var word in words)
            {
                var entity = new CustomEntity(
                    name: word,
                    description: $"description of {word}",
                    type: $"type of {word}",
                    subtype: $"subtype of {word}",
                    id: $"id of {word}",
                    caseSensitive: caseSensitive,
                    accentSensitive: accentSensitive,
                    fuzzyEditDistance: maximumFuziness,
                    defaultCaseSensitive: false,
                    defaultAccentSensitive: false,
                    defaultFuzzyEditDistance: 0,
                    aliases: null);
                targetCustomEntities.Add(entity);
            }

            var entitiesDefinition = new CustomEntitiesDefinition(targetCustomEntities);

            return(entitiesDefinition);
        }
        public static async Task <IActionResult> RunCustomEntityLookup(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
            ILogger log,
            ExecutionContext executionContext)
        {
            log.LogInformation("Custom Entity Search function: C# HTTP trigger function processed a request.");

            if (_impl == null || executionContext.FunctionName == "unitTestFunction")
            {
                _impl = new CustomEntityLookupImplementation(CustomEntitiesDefinition.ParseCustomEntityDefinition(EntityDefinitionLocation));
            }

            IEnumerable <WebApiRequestRecord> requestRecords = WebApiSkillHelpers.GetRequestRecords(req);

            if (requestRecords == null)
            {
                return(new BadRequestObjectResult($"{executionContext.FunctionName} - Invalid request record array."));
            }

            WebApiSkillResponse response = WebApiSkillHelpers.ProcessRequestRecords(executionContext.FunctionName, requestRecords,
                                                                                    (inRecord, outRecord) =>
            {
                if (!inRecord.Data.ContainsKey("text") || inRecord.Data["text"] == null)
                {
                    outRecord.Errors.Add(new WebApiErrorWarningContract {
                        Message = "Cannot process record without the given key 'text' with a string value"
                    });
                    return(outRecord);
                }

                string text = inRecord.Data["text"] as string;

                var foundEntities = _impl.GetCustomLookupResult(text, System.Threading.CancellationToken.None);

                outRecord.Data["entities"] = foundEntities;
                return(outRecord);
            });

            return(new OkObjectResult(response));
        }
        public CustomEntityLookupImplementation(CustomEntitiesDefinition entityDefinitions)
        {
            _targetEntities = entityDefinitions;
            _selections     = new HashSet <CustomEntitySelection>();

            foreach (var tce in _targetEntities.TargetCustomEntities)
            {
                var entitySelection = new CustomEntitySelection(tce);
                _selections.Add(entitySelection);

                if (tce.Aliases?.Any() == true)
                {
                    foreach (var alias in tce.Aliases)
                    {
                        var aliasSelection = new CustomEntitySelection(tce, alias);

                        if (!_selections.Contains(aliasSelection))
                        {
                            _selections.Add(aliasSelection);
                        }
                    }
                }
            }
        }