【问题标题】:Oscova custom entities issueOscova 自定义实体问题
【发布时间】:2021-03-17 10:47:01
【问题描述】:

您好,我正在开发 oscova 来构建一个助手类型的机器人。我跟着 tutorial,一切都很好,但 template mode 没有工作,我想捕获输入 "search xyz""open xyz"搜索或打开之后的所有内容我都想捕捉,以便在互联网上搜索或打开该应用.我创建了一个名为 command 的实体,并在其中提供了 searchopen 。然后为了捕获其余的输入,我做了一个 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


    【解决方案1】:

    使用@query 然后用[Entity ("query")] 显式将其标记为实体是无效的。当您使用 @ 指定实体名称时,该实体必须由 entity recognizer 定义。

    如果你想捕捉一些任意文本,你应该在一些具体的词之后使用@sys.text 实体

    简单示例

    Open App @Sys.Text - 将匹配打开应用记事本

    【讨论】:

    • 你能举一个@sys.text的例子吗?
    • @TahaHussain 为您添加了一个示例。
    猜你喜欢
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多