从列表实体中获取规范形式

Get canonical form from list entity

我有一个使用 Microsoft Bot Framework 的机器人,使用 LUIS API,我在其中有一个封闭列表实体。 当我的机器人捕捉到该实体的意图时,我想以编程方式获得其规范形式的价值。但我似乎所能做的就是获取用户键入的值,即找到的同义词。

foreach (var entity in result.Entities)
{
   await context.PostAsync($"{entity.Type}: {entity.Entity}");
}

我相信您要查找的是 Entities.Resolution 中包含的词典 字典 具体来说,您将在 Entities.Resolution.Values;

中找到的字符串数组

这个documentation应该对你有帮助

使用您的代码示例:

foreach (var entity in result.Entities)
{
   await context.PostAsync($"{entity.Resolution.Values}");
}

找到了一种方法,使用评论并扩展了 JasonSowers 的答案,不得不翻阅字典并使用了几次转换,但最终还是解决了:

foreach (var entity in result.Entities)
{
   var dict = entity.Resolution.Values.GetEnumerator();
   dict.MoveNext();
   var valuesList = (List<object>)dict.Current;
   var canonicalForm = (string)valuesList[0];

   await context.PostAsync($"{canonicalForm}");
}
    protected string GetCanonicalValue(string entityName, LuisResult intentContext)
    {
        List<EntityRecommendation> intentList = intentContext.Entities.Where(x => x.Type.Equals(entityName)).ToList();
        string canonicalForm = string.Empty;
        foreach (EntityRecommendation entity in intentList)
        {
            IEnumerator<object> dict = entity.Resolution.Values.GetEnumerator();
            dict.MoveNext();
            List<object> valuesList = (List<object>)dict.Current;
            canonicalForm = (string)valuesList[0];
        }
        return canonicalForm;
    }