Azure KeyPhrase API有时返回400

问题描述 投票:0回答:2

我使用Azure KeyPhrase API获得了混合结果 - 有时成功(我的意思是200结果)和其他我得到400个错误请求。为了测试服务,我将在他们的NoSQL服务上从Azure PDF发送内容。

文档说每个文档最多可达5k个字符。为了排除这一点,(我从5k开始)我将每个限制为最多1k个字符。

如何才能获得有关失败原因的更多信息?我已经检查了Portal,但那里没有太多细节。

我正在使用这个端点:https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases

一些样本失败:

  • {“documents”:[{“language”:“en”,“id”:1,“text”:“David Chappell在Microsoft Azure上了解NoSQL,由Microsoft Corporation赞助版权所有©2014 Chappell&Associates”}}}
  • {“documents”:[{“language”:“en”,“id”:1,“text”:“3关系技术几十年来一直是处理数据的主要方法。通常使用结构化查询语言(SQL)访问关系数据库是非常有用的。正如它们的受欢迎程度所暗示的那样,它们可以应用于许多不同的情况。但是关系技术并不总是最好的方法。假设你需要处理非常大量的数据,例如,太多扩展关系技术以跨多个服务器(物理或虚拟)进行有效工作可能具有挑战性。或者假设您的应用程序使用的数据不适合关系系统,例如JavaScript Object Notation(JSON)文档将数据存储到关系表中是可能的,但是明确设计用于处理这类信息的存储技术可能更简单。已经创建了NoSQL技术来解决这些问题。顾名思义,t他的标签包含各种存储“}]}

**添加了我的快速/脏poc代码***

List<string> sendRequest(object data)
    {
        string url = "https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases";
        string key = "api-code-here";
        string hdr = "Ocp-Apim-Subscription-Key";
        var wc = new WebClient();
        wc.Headers.Add(hdr, key);
        wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");

        TextAnalyticsResult results = null;

        string json = JsonConvert.SerializeObject(data);
        try
        {
            var bytes = Encoding.Default.GetBytes(json);
            var d2 = wc.UploadData(url, bytes);
            var dataString = Encoding.Default.GetString(d2);
            results = JsonConvert.DeserializeObject<TextAnalyticsResult>(dataString);                
        }
        catch (Exception ex)
        {
            var s = ex.Message;
        }
        System.Threading.Thread.Sleep(125);

        if (results != null && results.documents != null)
            return results.documents.SelectMany(x => x.keyPhrases).ToList();
        else
            return new List<string>();
    }

被称为:

foreach (var k in vals)
        {
            data.documents.Clear();
            int countSpaces = k.Count(Char.IsWhiteSpace);
            if (countSpaces > 3)
            {
                if (k.Length > maxLen)
                {
                    var v = k;
                    while (v.Length > maxLen)
                    {
                        var tmp = v.Substring(0, maxLen);
                        var idx = tmp.LastIndexOf(" ");
                        tmp = tmp.Substring(0, idx).Trim();
                        data.documents.Add(new
                        {
                            language = "en",
                            id = data.documents.Count() + 1,
                            text = tmp
                        });
                        v = v.Substring(idx + 1).Trim();

                        phrases.AddRange(sendRequest(data));
                        data.documents.Clear();
                    }

                    data.documents.Add(new
                    {
                        language = "en",
                        id = data.documents.Count() + 1,
                        text = v
                    });
                    phrases.AddRange(sendRequest(data));
                    data.documents.Clear();
                }
                else
                {
                    data.documents.Add(new
                    {
                        language = "en",
                        id = 1,
                        text = k
                    });

                    phrases.AddRange(sendRequest(data));
                    data.documents.Clear();
                };
            }             
        }
c# azure microsoft-cognitive azure-cognitive-services text-analytics-api
2个回答
1
投票

尝试更改此行

var bytes = Encoding.Default.GetBytes(json);

var bytes = Encoding.UTF8.GetBytes(json);

3
投票

我使用您指示有错误的文档样本手动创建了一些请求,并且服务正确处理了它们并返回了关键短语。因此编码问题看起来很可能。

将来,您还可以查看服务返回的内部错误。通常,您会在下面的响应示例中看到更多详细信息。

{
  "code": "BadRequest",
  "message": "Invalid request",
  "innerError": {
    "code": "InvalidRequestContent",
    "message": "Request contains duplicated Ids. Make sure each document has a unique Id."
  }
}

此外,还有一个用于Text Analytics的.NET SDK,可以帮助简化调用服务的过程。 https://github.com/Azure/azure-rest-api-specs/tree/current/specification/cognitiveservices/data-plane/TextAnalytics

© www.soinside.com 2019 - 2024. All rights reserved.