C# LUIS buitin datetime.v2实体无法分析daterange类型的值

C# LUIS buitin datetime.v2实体无法分析daterange类型的值,c#,botframework,azure-language-understanding,C#,Botframework,Azure Language Understanding,我已经使用预构建的datetime.v2实体来处理LUIS中所有与datetime相关的内容 我有这样一句话:2017年3月至6月 在实体中,LUI的预期输出应为: "resolution": { "values": [ { "timex": "XXXX-03", "type": "daterange", "start": "2017-03-01", "end":

我已经使用预构建的datetime.v2实体来处理LUIS中所有与datetime相关的内容

我有这样一句话:
2017年3月至6月

在实体中,LUI的预期输出应为:

"resolution": {
        "values": [
          {
            "timex": "XXXX-03",
            "type": "daterange",
            "start": "2017-03-01",
            "end": "2017-06-01"
          }
        ]
      }

但当我询问路易斯时,我得到的是:

{
  "query": "march to june 2017",
  "topScoringIntent": {
    "intent": "TestIntent",
    "score": 1.0
  },
  "intents": [
    {
      "intent": "TestIntent",
      "score": 1.0
    },
    {
      "intent": "None",
      "score": 0.05487651
    }
  ],
  "entities": [
    {
      "entity": "march",
      "type": "builtin.datetimeV2.daterange",
      "startIndex": 0,
      "endIndex": 4,
      "resolution": {
        "values": [
          {
            "timex": "XXXX-03",
            "type": "daterange",
            "start": "2017-03-01",
            "end": "2017-04-01"
          },
          {
            "timex": "XXXX-03",
            "type": "daterange",
            "start": "2018-03-01",
            "end": "2018-04-01"
          }
        ]
      }
    },
    {
      "entity": "june 2017",
      "type": "builtin.datetimeV2.daterange",
      "startIndex": 9,
      "endIndex": 17,
      "resolution": {
        "values": [
          {
            "timex": "2017-06",
            "type": "daterange",
            "start": "2017-06-01",
            "end": "2017-07-01"
          }
        ]
      }
    }
  ]
}

我编写了以下C#代码,用于查询我的LUIS intent中的日期范围

        [LuisIntent("TestIntent")]
        public async Task TestIntentHandler(IDialogContext context, LuisResult result)
        {
            EntityRecommendation dateTimeEntity, dateRangeEntity;
            if(result.TryFindEntity("builtin.datetimeV2.date", out dateTimeEntity))
            {
               var s = dateTimeEntity.Resolution.Values.Select(x => x).OfType<List<object>>().SelectMany(i => i).ToList();
            }
            if(result.TryFindEntity("builtin.datetimeV2.daterange", out dateRangeEntity))
            {
                var s = dateRangeEntity.Resolution.Values.Select(x => x).OfType<List<object>>().SelectMany(i => i).FirstOrDefault();
                var type = s.GetType();
            }
        }
[LuisIntent(“测试内容”)]
公共异步任务TestIntentHandler(IDialogContext上下文,LuisResult结果)
{
EntityRecommendation dateTimeEntity、dateRangeEntity;
if(result.TryFindEntity(“内置日期时间v2.date”,out日期时间实体))
{
var s=dateTimeEntity.Resolution.Values.Select(x=>x).OfType().SelectMany(i=>i.ToList();
}
if(result.tryfindentitity(“builtin.datetimeV2.daterange”,out-dateRangeEntity))
{
var s=dateRangeEntity.Resolution.Values.Select(x=>x).OfType().SelectMany(i=>i.FirstOrDefault();
var type=s.GetType();
}
}

有谁能告诉我如何使用预构建的datetime.v2类型的实体查询LUIS中的上述月份范围吗。

我可以复制我这边的问题,但在我看来,3月(3月1日至3月31日)是日期范围,6月(6月1日至6月30日)是日期范围,这很容易被认为是两个日期范围(就像LUIS那样)。在中,它为我们提供了一个示例日期范围5月2日至5月5日,如果可能,请指定开始月份和结束月份的日期,例如2017年3月1日至6月1日

此外,我检查了
TryFindEntity
的源代码,发现它将nullFirstOrDefault实体分配给
EntityRecommendation实体
,因此您的
日期范围实体
将是第一个实体,即使LUIS返回两个实体(2017年3月6月). 如果您在查询2017年3月至6月期间要提取两个实体,请直接操作
LuisResult result
,不要调用
TryFindEntity
方法

TryFindEntity
的源代码:

//Microsoft.Bot.Builder.Luis.Extensions
公共静态bool TryFindEntity(此LuisResult结果、字符串类型、out EntityRecommendation实体)
{
IList expr_14=结果实体;
实体=((expr_14!=null)?expr_14.FirstOrDefault((EntityRecommendation e)=>e.Type==Type):null);
返回实体!=null;
}
// Microsoft.Bot.Builder.Luis.Extensions
public static bool TryFindEntity(this LuisResult result, string type, out EntityRecommendation entity)
{
    IList<EntityRecommendation> expr_14 = result.Entities;
    entity = ((expr_14 != null) ? expr_14.FirstOrDefault((EntityRecommendation e) => e.Type == type) : null);
    return entity != null;
}