using Bot.Rasa.Entities;
using Bot.Rasa.Intents;
using Bot.Rasa.Models;
using EntityFrameworkCore.BootKit;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Bot.Rasa.Agents
{
public static class AgentExtension
{
///
/// Get agent header row from Agent table
///
///
///
///
public static Agent Agent(this Database dc, string agentId)
{
return dc.Table().Find(agentId);
}
public static String CreateEntity(this Agent agent, Entity entity, Database dc)
{
return entity.Id;
}
public static RasaTrainingData GrabCorpus(this Agent agent, Database dc, List ctx)
{
var trainingData = new RasaTrainingData
{
UserSays = new List()
};
var intents = dc.Table()
.Include(x => x.Contexts)
.Include(x => x.UserSays).ThenInclude(say => say.Data).ToList();
var contexts = ctx.OrderBy(x => x.Name).Select(x => x.Name.ToLower()).ToList();
// search all potential intents which input context included in contexts
intents = intents.Where(it =>
{
if (contexts.Count == 0)
{
return it.Contexts.Count() == 0;
}
else
{
return it.Contexts.Count() > 0 && it.Contexts.Count(x => contexts.Contains(x.Name.ToLower())) == it.Contexts.Count;
}
}).OrderByDescending(x => x.Contexts.Count).ToList();
intents.ForEach(intent =>
{
trainingData.UserSays.AddRange(intent.UserSays
.Select(exp => new UserSay
{
Intent = intent.Name,
Text = String.Join("", exp.Data.OrderBy(x => x.UpdatedTime).Select(x => x.Text))
}));
});
return trainingData;
}
}
}