【发布时间】:2021-03-17 10:47:01
【问题描述】:
您好,我正在开发 oscova 来构建一个助手类型的机器人。我跟着 tutorial,一切都很好,但 template mode 没有工作,我想捕获输入 "search xyz" 或 "open xyz" 。搜索或打开之后的所有内容我都想捕捉,以便在互联网上搜索或打开该应用.我创建了一个名为 command 的实体,并在其中提供了 search 和 open 。然后为了捕获其余的输入,我做了一个 custom带有正则表达式的实体 可以捕获 command 之后的所有内容。但是现在当我问“你好吗”时,它也会捕获它并将其发送到我的函数意图。请参阅我的代码并提供帮助
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();
}
}
}
【问题讨论】:
标签: c# unity3d bots entity chatbot