【问题标题】:FormRecognizer C# SDK not returning all data, treats Dynamic Tables as Document FieldFormRecognizer C# SDK 不返回所有数据,将动态表视为文档字段
【发布时间】:2023-01-20 06:16:58
【问题描述】:

我创建了一个自定义模型,它在 Form Recognizer Studio 中运行良好,在“文档”下的 JSON 输出中,它提供了我标记的字段的所有数据点以及我标记的动态类型表的所有数据点。

问题是来自 C# SDK 的“结果”不包含像上面 JSON 输出那样的表数据,使用相同的模型和样本。

AnalyzeDocumentOperation operation = await client.StartAnalyzeDocumentAsync(modelID, streamContent);    
await operation.WaitForCompletionAsync();    
AnalyzeResult result = operation.Value;

可以在下面看到它毫无问题地抓住了字段

但是如果您查看下面的 TimeSheetDynamic,它是空的,这与 JSON 数据不同,JSON 数据将所有数据点都放在一个数组中。

我如何访问数据?

谢谢。

【问题讨论】:

    标签: microsoft-cognitive azure-cognitive-services azure-form-recognizer


    【解决方案1】:

    您使用的是什么版本?需要使用的API版本为2.1及以上才能识别动态内容。

    https://learn.microsoft.com/en-us/azure/applied-ai-services/form-recognizer/whats-new?tabs=csharp

    【讨论】:

    • 我使用的是最新版本的 API,远高于 2.1,所以它与 API 版本无关,我假设他们忘记了或在待办事项列表中将动态数据加载编码到返回模型中......??仅供参考,安装的版本是 4.0.0-beta.3
    【解决方案2】:

    我按照下面的 GitHub 示例访问非公共成员。感谢 Vinod 提供样品。

     if (document.Fields.TryGetValue("Items", out DocumentField? itemsField))
                {
                    if (itemsField.ValueType == DocumentFieldType.List)
                    {
                        foreach (DocumentField itemField in itemsField.AsList())
                        {
                            Console.WriteLine("Item:");
    
                            if (itemField.ValueType == DocumentFieldType.Dictionary)
                            {
                                IReadOnlyDictionary<string, DocumentField> itemFields = itemField.AsDictionary();
    
                                if (itemFields.TryGetValue("Description", out DocumentField? itemDescriptionField))
                                {
                                    if (itemDescriptionField.ValueType == DocumentFieldType.String)
                                    {
                                        string itemDescription = itemDescriptionField.AsString();
    
                                        Console.WriteLine($"  Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
                                    }
                                }
    
                                if (itemFields.TryGetValue("Amount", out DocumentField? itemAmountField))
                                {
                                    if (itemAmountField.ValueType == DocumentFieldType.Double)
                                    {
                                        double itemAmount = itemAmountField.AsDouble();
    
                                        Console.WriteLine($"  Amount: '{itemAmount}', with confidence {itemAmountField.Confidence}");
                                    }
                                }
                            }
                        }
                    }
                }
    

    Sample Code GitHub Link

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多