#c# #unity3d #bots #entity #chatbot
#c# #unity3d #боты #сущность #чат-бот
Вопрос:
привет, я работаю над oscova для создания бота-помощника.Я следовал этому руководству, и все было отлично, но режим шаблона не работал, и я хочу захватить ввод «поиск xyz» или «открыть xyz». Все, что после поиска или открытия я хочу захватить, чтобы я мог искать его в Интернете или открывать это приложение.Я создал объекты с командой name и дал в ней поиск и открытие.Затем, чтобы захватить остальные входные данные, я создал пользовательский объект с регулярным выражением, который фиксирует все после команды. Но теперь, когда я спрашиваю «как дела», он тоже фиксирует это и отправляет его в мою функцию intent .Посмотрите мой код и помогите, пожалуйста
public class searchEntity : IEntity
{
public searchEntity() { Type = "query"; }
public string Type { get; set; }
public string Value { get; set; }
public int Index { get; set; }
}
public class queryRecognizer : IEntityRecognizer
{
public string EntityType => "query";
public EntityCollection Parse(Request request)
{
var regex = new Regex(@"s[|a-zA-Z|s]*");
var entities = new EntityCollection();
foreach (Match match in regex.Matches(request.NormalizedText))
{
var entity = new searchEntity
{
Value = match.Value,
Index = match.Index
};
Debug.Log(entity.Value);
entities.Add(entity);
}
return entities;
}
}
### Здесь я использую эти объекты###
public class BotFunctions : Dialog
{
[Expression(" {open} @query")]
[Expression("{youtube} @query ")]
[Expression("{search} @query ")]
[Expression("please {open} @query")]
[Expression("please{youtube} @query ")]
[Expression("please{search} @query ")]
[Expression("{youtube} @query please ")]
[Expression("{open} @query please")]
[Expression("{search} @query please ")]
[Expression("{ar gallery}")]
[Expression("{ar cinema}")]
[Expression("{screenshot}")]
[Entity("command")]
[Entity("query")]
public void userfunction(Context context, Result result)
{
var searchQuery = result.Entities.OfType("command");
var funtionQuery = result.Entities.OfType("query");
string word1;
if (searchQuery.Value.ToLower() == "open")
{
result.SendResponse("Opening app");
word1 = funtionQuery.Value.Trim();
OpenApplications(word1);
}
else if (searchQuery.Value.ToLower() == "search")
{
result.SendResponse("starting search");
word1 = funtionQuery.Value.Replace(' ', ' ');
word1 = word1.Substring(1);
Debug.Log(word1);
SearchInternet(word1);
}
else if (searchQuery.Value.ToLower() == "youtube")
{
result.SendResponse("starting youtube search");
word1 = funtionQuery.Value.Replace(' ', ' ');
word1 = word1.Substring(1);
Debug.Log(word1);
searchyoutube(word1);
}
else if (searchQuery.Value.ToLower() == "ar gallery")
{
result.SendResponse("starting AR Gallery");
OpenARGallery();
}
else if (searchQuery.Value.ToLower() == "ar cinema")
{
result.SendResponse("starting AR Cinema");
OpenARCinema();
}
else if (searchQuery.Value.ToLower() == "screenshot")
{
result.SendResponse("Taking ScreenShot");
TakeScreenShot();
}
}
}
Ответ №1:
Недопустимо использовать @query
и затем явно помечать его как объект с [Entity ("query")]
помощью. Когда вы указываете имя объекта с помощью @, этот объект должен быть определен средством распознавания объектов.
Если вы пытаетесь захватить некоторый произвольный текст, вам следует использовать объект @sys.text после некоторых конкретных слов
Простой пример
Open App @Sys.Text
— Будет соответствовать open app notepad
Комментарии:
1. можете ли вы привести пример @sys.text с каким-либо конкретным словом?
2. @TahaHussain добавил для вас пример.