示例#1
0
        public IntentExpression ToIntentExpression(IntentExpression expression = null)
        {
            if (expression == null)
            {
                expression = new IntentExpression
                {
                    Id   = Guid.NewGuid().ToString(),
                    Data = Data.Select(x => x.ToIntentExpressionPart()).ToList()
                };
            }

            return(expression);
        }
示例#2
0
        private void ImportIntentUserSays(Intent intent, List <SebisIntent> sentences)
        {
            intent.UserSays = new List <IntentExpression>();

            var userSays = sentences.Where(x => x.Name == intent.Name).ToList();

            userSays.ForEach(say =>
            {
                var expression = new IntentExpression();

                say.Entities = say.Entities.OrderBy(x => x.Start).ToList();

                int pos = 0;
                say.Entities.ForEach(x =>
                {
                    ConvertWordPosToCharPos(say.Text, x, pos);
                    pos = x.End + 1;
                });

                expression.Data = new List <IntentExpressionPart>();

                pos = 0;
                for (int entityIdx = 0; entityIdx < say.Entities.Count; entityIdx++)
                {
                    var entity = say.Entities[entityIdx];

                    // previous
                    if (entity.Start > 0)
                    {
                        expression.Data.Add(new IntentExpressionPart
                        {
                            Text  = say.Text.Substring(pos, entity.Start - pos),
                            Start = pos
                        });
                    }

                    // self
                    expression.Data.Add(new IntentExpressionPart
                    {
                        Alias = entity.Entity,
                        Meta  = entity.Entity,
                        Text  = say.Text.Substring(entity.Start, entity.Value.Length),
                        Start = entity.Start
                    });

                    pos = entity.End + 1;

                    if (pos < say.Text.Length && entityIdx == say.Entities.Count - 1)
                    {
                        // end
                        expression.Data.Add(new IntentExpressionPart
                        {
                            Text  = say.Text.Substring(pos),
                            Start = pos
                        });
                    }
                }

                int second = 0;
                expression.Data.ForEach(x => x.UpdatedTime = DateTime.UtcNow.AddSeconds(second++));

                intent.UserSays.Add(expression);
            });
        }