Azure认知服务:PII的异步文本分析,将最大允许字符大小限制为5120,而实际上应该是125,000

8e2ybdfx  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(126)

我正在使用azure-ai-textanalytics(版本5.2.7)库来检测我拥有的一些文本内容中的PII。根据Azure文档,使用异步处理时允许的最大字符数是125,000个字符。https://learn.microsoft.com/en-us/azure/cognitive-services/language-service/concepts/data-limits

使用下面的Azure库,我是如何构建异步客户端的:

private static TextAnalyticsAsyncClient createTextClient() {
        if (textAnalyticsClient == null) {
            textAnalyticsClient = new TextAnalyticsClientBuilder()
                    .credential(new AzureKeyCredential(AzureKeyVaultConnector.readKeyValue("languageResourceKey")))
                    .endpoint(AzureKeyVaultConnector.readKeyValue("languageResourceEndPoint"))
                    .buildAsyncClient();
        }
        return textAnalyticsClient;
    }

我使用下面的行提交要处理的文档:

RecognizePiiEntitiesResultCollection piiEntityCollection = createTextClient().recognizePiiEntitiesBatch(documents,"en",requestOptions).block();

当我用一个大约7000个字符的字符串进行测试时,我得到以下错误:

A document within the request was too large to be processed. Limit document size to: 5120 text elements. For additional details on the data limitations see https://aka.ms/text-analytics-data-limits

为什么它仍然试图限制我允许的最大字符大小为5120?既然我用的是异步客户端,那不应该是125,000吗?任何帮助都很感激。
我喜欢使用azure-ai-textanalytics库并实现这一点,而不是直接进行http调用(不使用azure库)。

kxkpmulp

kxkpmulp1#

基于您给出的场景,我使用文档中提供的this示例异步请求代码复制了代码和输出。
您遇到的问题是因为125,000个字符的限制是针对异步请求中所有提交文档的字符总数,而不是针对单个文档。异步处理时,单个文档的最大字符数仍为5,120个字符
对于PII检测,您可以请求的上限为5个文档,以您共享的documentation为单位。因此,对于PII检测,每个请求的字符限制总数为:二万五千六百
例如,如果您的请求包含2个文档(5120个字符)和3个文档(),则输出将生成2个文档的结果(长度低于限制)。
输出:https://i.imgur.com/OUmrwvk.png
所有5个文件必须小于5120个字符限制,以获得完整的结果。

**若要处理较大的文档(大于5120个字符),您可以在将其发送到API之前将其分解为较小的文本块。**以下是一个示例代码片段,用于创建具有单个较大文档/文本的文档列表:

在Python中

def  split_string(string):
 #Splits a string into multiple strings, each of which is no more than 5120 characters long.
 strings = []
 for  i  in  range(0, len(string), 5120):
     strings.append(string[i:min(len(string), i + 5120)]) 
 return  strings

在Java中

// Split the string into multiple strings, each of which is no more than 5120 characters long. 
List<String> strings = new List<String>(); 
for (int i = 0; i < originalString.length(); i += 5120) { 
strings.add(originalString.substring(i, Math.min(originalString.length(), i + 5120))); }

相关问题