Microsoft Cognitive API文档大小限制为10240字节

时间:2016-11-17 22:17:20

标签: json vb.net post webrequest microsoft-cognitive

当向API提交关键短语的文档时,返回的JSON响应会出现错误“请求中的文档太大而无法处理。将文档大小限制为:10240字节。”

根据https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-text-analytics-quick-start,“可提交的单个文档的最大大小为10KB,提交输入的最大总大小为1MB。一次通话中不得提交超过1,000个文档。”

有问题的文件是一个长度为7713的字符串。使用Encoding.UTF8.GetBytes()的字节长度是7763.

提交的整个byteArray长度为7965。

较小的字符串工作正常,但任何大于3000的字符串似乎都有这个问题。下面是用VB.NET编写的代码:

    ' Create a JSONInput object containing the data to submit
    Dim myJsonObject As New JSONInput
    Dim input1 As New JSONText
    input1.id = "1"
    input1.text = text
    myJsonObject.documents.Add(input1)

    ' Translate the JSONInput object to a serialized JSON string
    Dim jss As New JavaScriptSerializer()
    Dim jsonString As String = jss.Serialize(myJsonObject)

    ' Windows Cognitive Services URL
    Dim request As System.Net.WebRequest = System.Net.WebRequest.Create("https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases")

    ' Set the Method property of the request to POST.
    request.Method = "POST"

    ' Add a header with the account key.
    request.Headers.Add("Ocp-Apim-Subscription-Key", accountKey_TextAnalytics)

    ' Create POST data and convert it to a byte array.
    Dim postData As String = jsonString
    Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)

    ' Set the ContentType property of the WebRequest.
    request.ContentType = "application/json"

    ' Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length

    ' Get the request stream.
    Dim dataStream As System.IO.Stream = request.GetRequestStream()

    ' Write the data to the request stream.
    dataStream.Write(byteArray, 0, byteArray.Length)

    ' Close the Stream object.
    dataStream.Close()

    ' Get the response.
    Dim response As System.Net.WebResponse = request.GetResponse()

    ' Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream()

    ' Open the stream using a StreamReader for easy access.
    Dim reader As New System.IO.StreamReader(dataStream)

    ' Read the content.
    Dim responseFromServer As String = reader.ReadToEnd()

    ' Display the content.
    Console.WriteLine(responseFromServer)

    ' Clean up the streams.
    reader.Close()
    dataStream.Close()
    response.Close()

    ' Deserialize the json data
    jss = New JavaScriptSerializer()
    Dim jsonData = jss.Deserialize(Of Object)(responseFromServer)

    ' List of key phrases to be returned
    Dim phrases As New List(Of String)
    For Each item As String In jsonData("documents")(0)("keyPhrases")
        phrases.Add(item)
    Next

    Return phrases

我的问题是,我可能在这里做错了,我收到的消息是我的文档超出了10240字节的大小限制,但看来我POST的数据远低于该限制。

1 个答案:

答案 0 :(得分:0)

如上所述,请确保指定UTF-8编码。