Partilhar via


Utilizar APIs de Tradução de Documentos de forma programática

A tradução de documentos é uma funcionalidade baseada na cloud do serviço Azure Translator . Você pode usar a API de tradução de documentos para traduzir de forma assíncrona documentos inteiros em idiomas suportados e vários formatos de arquivo , preservando a estrutura do documento de origem e a formatação do texto. Neste guia de instruções, você aprenderá a usar APIs de tradução de documentos com uma linguagem de programação de sua escolha e a API REST HTTP.

Pré-requisitos

Nota

A tradução de documentos é suportada no Plano de Serviço Padrão S1 e nos Planos de Desconto por Volume C2, C3, C4 e D3. VejaPreços das Ferramentas de Fundição—Tradutor.

Para começar, precisa do seguinte:

  • Uma conta ativa do Azure. Se não tiver uma, pode criar uma conta gratuita

  • Uma conta de Armazenamento de Blobs do Azure. Você também precisa criar contêineres em sua conta de Armazenamento de Blob do Azure para seus arquivos de origem e de destino:

    • Recipiente de origem. Este contentor é onde carrega os seus ficheiros para tradução (obrigatório).
    • Recipiente de destino. Este contêiner é onde seus arquivos traduzidos são armazenados (obrigatório).
  • Um recurso de tradutor:

    Preencha os campos de detalhes do projeto e da instância do Translator da seguinte maneira:

    1. Subscrição. Selecione uma das suas subscrições do Azure disponíveis.

    2. Grupo de Recursos. Você pode criar um novo grupo de recursos ou adicionar seu recurso a um grupo de recursos existente que compartilha o mesmo ciclo de vida, permissões e políticas.

    3. Região de Recursos. Escolha Global , a menos que sua empresa ou aplicativo exija uma região específica. Se você estiver planejando usar uma identidade gerenciada atribuída ao sistema para autenticação, escolha uma região geográfica como West US.

    4. Nome. Introduza o nome que escolheu para o seu recurso. O nome escolhido deve ser exclusivo no Azure.

      Nota

      A tradução de documentos requer um endpoint de domínio personalizado. O valor que o utilizador insere no campo Nome é o parâmetro de domínio customizado para o seu endpoint.

    5. Escalão de preço. A tradução de documentos não é suportada no nível gratuito. Para experimentar o serviço, selecione Standard S1.

    6. Selecione Rever + Criar.

    7. Revise os termos de serviço e selecione Criar para implantar seu recurso.

    8. Após a implantação bem-sucedida do recurso, selecione Ir para o recurso para recuperar a chave e o endpoint.

Recupere a sua chave e o endpoint de domínio personalizado

  • Os pedidos ao Tradutor requerem uma chave de apenas leitura e um endpoint personalizado para autenticar o acesso. O ponto de extremidade do domínio personalizado é uma URL formatada com o nome do seu recurso, o nome do host e subdiretórios do serviço Tradutor, estando disponível no portal do Azure.
  1. Se você criou um novo recurso, depois que ele for implantado, selecione Ir para recurso. Se você tiver um recurso de tradução de documentos existente, navegue diretamente para a página do recurso.

  2. No trilho esquerdo, sob Gestão de Recursos, selecione Chaves e Ponto de Extremidade.

  3. Copie e cole o seu key e document translation endpoint em um local conveniente, como o Bloco de Notas da Microsoft. Só é necessária uma chave para fazer uma chamada à API.

  4. Você insere key e document translation endpoint nos exemplos de código para autenticar a sua solicitação ao serviço de tradução de documentos.

    Captura de ecrã a mostrar o campo obter a sua chave no portal do Azure.

Obtenha a sua chave

Os pedidos ao Tradutor requerem uma chave de apenas leitura para autenticar o acesso.

  1. Se você criou um novo recurso, depois que ele for implantado, selecione Ir para recurso. Se você tiver um recurso de tradução de documentos existente, navegue diretamente para a página do recurso.
  2. No trilho esquerdo, sob Gestão de Recursos, selecione Chaves e Ponto de Extremidade.
  3. Copie e cole sua chave em um local conveniente, como o Bloco de Notas da Microsoft.
  4. Cole no exemplo de código para autenticar a sua solicitação no serviço de tradução de documentos.

Imagem do campo obter sua chave no portal do Azure.

Criar contêineres de Armazenamento de Blob do Azure

Você precisa criar contêineres em sua conta de Armazenamento de Blob do Azure para arquivos de origem e de destino.

  • Recipiente de origem. Este contentor é onde carrega os seus ficheiros para tradução (obrigatório).
  • Recipiente de destino. Este contêiner é onde seus arquivos traduzidos são armazenados (obrigatório).

Nota

A tradução de documentos suporta glossários como blobs em recipientes de destino (não recipientes de glossário separados). Se você quiser incluir um glossário personalizado, adicione-o ao contêiner de destino e inclua o glossaryUrl com a solicitação. Se o par de idiomas de tradução não estiver presente no glossário, o glossário não será aplicado. ConsulteTraduzir documentos usando um glossário personalizado

Criar tokens de acesso SAS para tradução de documentos

O sourceUrl , targetUrl e opcional glossaryUrl deve incluir um token SAS (Assinatura de Acesso Compartilhado), anexado como uma cadeia de caracteres de consulta. O identificador pode ser atribuído ao seu contentor ou a blobs específicos. ConsulteCriar tokens SAS para o processo de tradução de documentos.

  • Seu contêiner ou blob de origem deve designar acesso de leitura e acesso de lista.
  • O seu contêiner ou blob de destino deve designar acesso de gravação e acesso de lista.
  • Seu blob de glossário deve designar acesso de leitura e acesso de listagem.

Gorjeta

  • Se você estiver traduzindo vários arquivos (blobs) em uma operação, delegue o acesso SAS no nível do contêiner.
  • Se estiver a traduzir um único ficheiro (blob) numa operação, delegate o acesso SAS ao nível do blob.
  • Como alternativa aos tokens SAS, você pode usar uma identidade gerenciada atribuída ao sistema para autenticação.

Pedidos HTTP

Um pedido de tradução por lote assíncrono é submetido ao endpoint do seu Tradutor através de um pedido POST. Se for bem-sucedido, o método POST retorna um código de 202 Accepted resposta e o serviço cria uma solicitação em lote. Os documentos traduzidos estão listados no contêiner de destino.

Para informações detalhadas sobre os limites de pedidos do Azure Translator, consulteLimites de pedidos de tradução de documentos.

Cabeçalhos de HTTP

Os cabeçalhos a seguir estão incluídos em cada solicitação de API de tradução de documentos:

Cabeçalho de HTTP Descrição
Ocp-Apim-Subscription-Key Obrigatório: O valor é a chave Azure para o seu recurso Tradutor ou Microsoft Foundry.
Tipo de Conteúdo Obrigatório: especifica o tipo de conteúdo da carga útil. Os valores aceitos são application/json ou charset=UTF-8.

Propriedades do corpo da solicitação POST

  • O URL da solicitação POST é POST https://<NAME-OF-YOUR-RESOURCE>.cognitiveservices.azure.com/translator/text/batch/v1.1/batches.
  • O corpo da solicitação POST é um objeto JSON chamado inputs.
  • O objeto inputs contém tanto os endereços do contentor sourceURL como do contentor targetURL para os seus pares de idiomas de origem e de destino.
  • As cadeias de caracteres prefix e suffix são sensíveis a maiúsculas e minúsculas para filtrar documentos no caminho de origem para tradução. O prefix campo é frequentemente usado para delinear subpastas para tradução. O suffix campo é mais frequentemente usado para extensões de arquivo.
  • Um valor para o glossaries campo (opcional) é aplicado quando o documento está sendo traduzido.
  • O targetUrl para cada língua de chegada deve ser único.

Nota

Se um arquivo com o mesmo nome já existir no destino, o trabalho falhará.

Traduzir todos os documentos em um contêiner

{
    "inputs": [
        {
            "source": {
                "sourceUrl": "{sourceSASUrl}"
            },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "fr"
                }
            ]
        }
    ]
}

Traduzir um documento específico em um contêiner

  • Especifique "storageType": "File".
  • Se você não estiver usando uma identidade gerenciada atribuída pelo sistema para autenticação, certifique-se de ter criado a URL de origem & tokens SAS para o blob/documento específico (não para o contêiner).
  • Certifique-se de especificar o nome do arquivo de destino como parte da URL de destino – embora o token SAS ainda seja para o contêiner.
  • Esta solicitação de exemplo retorna um único documento traduzido em dois idiomas de destino.
{
    "inputs": [
        {
            "storageType": "File",
            "source": {
                "sourceUrl": "{sourceSASUrl}"
            },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "es"
                },
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "de"
                }
            ]
        }
    ]
}

Traduzir imagens em ficheiros de documentos Word (.docx)

Nota

  • Este recurso é opcional e deve ser ativado para cada solicitação de tradução.
  • A ativação desse recurso incorrerá em custos adicionais com base no uso. Para mais informações, consulteAzure Vision nos preços do Foundry Tools
  • Atualmente, esse recurso está disponível apenas com a API de tradução de documentos em lote.
  • O formato de ficheiro suportado é .docx apenas.
  • É necessário um recurso Foundry (não o recurso Tradutor independente) para usar esta funcionalidade.

Solicitar configuração

  • Use o parâmetro opcional translateTextWithinImage no options campo

    • Tipo de dados: Booleano (true ou false)
    • A configuração booleana padrão é false. Defina a opção para true para ativar a tradução de imagens em texto.
  • Aqui está um exemplo de solicitação JSON:

    {
      "inputs": [
        {
          "source": {
            "sourceUrl": "<SAS-URL>",
            "language": "en"
          },
          "targets": [
            {
              "targetUrl": "<SAS-URL>",
              "language": "ta"
            }
          ]
        }
      ],
      "options": {
        "experimental": false,
        "translateTextWithinImage": true
      }
    }
    
  • Detalhes da resposta. Quando o recurso está ativado, as informações de processamento de imagem adicionadas são incluídas na resposta:

    • totalImageScansSucceeded. O número de digitalizações de imagens traduzidas com sucesso.

    • totalImageScansFailed. O número de varreduras de imagem que falharam no processamento.

  • Eis uma resposta JSON de exemplo:

      {
          "id": "1a2b0c23-45d6-789-a123-a456fdaf7890",
          "createdDateTimeUtc": "2024-11-13T22:06:58.2789197Z",
          "lastActionDateTimeUtc": "2024-11-13T22:07:14.1608283Z",
          "status": "Running",
          "summary": {
              "total": 1,
              "failed": 0,
              "success": 0,
              "inProgress": 1,
              "notYetStarted": 0,
              "cancelled": 0,
              "totalCharacterCharged": 1355,
              "totalImageScansSucceeded": 2,
              "totalImageScansFailed": 0
          }
      }
    

Traduzir documentos usando um glossário personalizado

{
    "inputs": [
        {
            "source": {
                "sourceUrl": "{sourceSASUrl}"
             },
            "targets": [
                {
                    "targetUrl": "{targetSASUrl}",
                    "language": "es",
                    "glossaries": [
                        {
                            "glossaryUrl": "{glossaryUrl/en-es.xlf}",
                            "format": "xliff"
                        }
                    ]
                }
            ]
        }
    ]
}

Use o código para enviar solicitações de tradução de documentos

Configurar a sua plataforma de codificação

  • Criar um projeto novo.
  • Substitua Program.cs pelo exemplo de código C#.
  • Defina os valores do endpoint, chave e URL do contêiner em Program.cs.
  • Adicione o pacote Newtonsoft.Json usando a CLI do .NET para processar dados JSON.
  • Execute o programa a partir do diretório do projeto.

Importante

Para os exemplos de código, codifice o URL da Assinatura de Acesso Compartilhado (SAS) onde indicado. Lembre-se de remover o URL SAS do seu código quando terminar e nunca publicá-lo publicamente. Para produção, use uma maneira segura de armazenar e acessar suas credenciais, como o Azure Managed Identity. Para obter mais informações, consulte Segurança do Armazenamento do Azure.

Talvez seja necessário atualizar os seguintes campos, dependendo da operação:

  • endpoint
  • basePath
  • key
  • sourceURL
  • targetURL
  • glossaryURL
  • id (ID do trabalho)

Localizar o valor id

  • Você pode encontrar o trabalho id no valor URL do cabeçalho start-batch-translation de resposta do método POSTOperation-Location. A cadeia alfanumérica que segue o /document/ parâmetro é o trabalho idda operação:
Cabeçalho da resposta URL de resposta
Local de Operação {document-translation-endpoint}/translator/document/9dce0aa9-78dc-41ba-8cae-2e2f3c2ff8ec?api-version={date}

Iniciar a tradução em lote assíncrona


    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    using System.Text;


    class Program
    {

        static readonly string route = "?api-version={date}";

        private static readonly string basePath = "{your-document-translation-endpoint}/translator/document/batches";

        private static readonly string key = "{your-api-key}";

        static readonly string json = ("{\"inputs\": [{\"source\": {\"sourceUrl\": \"https://YOUR-SOURCE-URL-WITH-READ-LIST-ACCESS-SAS\",\"storageSource\": \"AzureBlob\",\"language\": \"en\"}, \"targets\": [{\"targetUrl\": \"https://YOUR-TARGET-URL-WITH-WRITE-LIST-ACCESS-SAS\",\"storageSource\": \"AzureBlob\",\"category\": \"general\",\"language\": \"es\"}]}]}");

        static async Task Main(string[] args)
        {
            using HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {

                StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(basePath + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);
                request.Content = content;

                HttpResponseMessage  response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine($"Status code: {response.StatusCode}");
                    Console.WriteLine();
                    Console.WriteLine($"Response Headers:");
                    Console.WriteLine(response.Headers);
                }
                else
                    Console.Write("Error");

            }

        }

    }

Obter formatos de documento suportados

Recupere uma lista de formatos de arquivo suportados. Se for bem-sucedido, esse método retornará um código de 200 OK resposta.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string basePath = "{your-document-translation-endpoint}/translator/document/formats";

    static readonly string route = "?api-version={date}&type=document";

    private static readonly string key = "{your-api-key}";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(basePath + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

Obter status para um trabalho de tradução

Obtenha o status atual de um único trabalho e um resumo de todos os trabalhos em uma solicitação de tradução de documentos. Se for bem-sucedido, esse método retornará um código de 200 OK resposta.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string basePath = "{your-document-translation-endpoint}/translator/document/batches/{id}";

    static readonly string route = "?api-version={date}";

    private static readonly string key = "{your-api-key}";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(basePath + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
    }
}

Obter o status de um documento específico

Breve visão geral

Recupere o status de um documento específico em uma solicitação de tradução de documento. Se for bem-sucedido, esse método retornará um código de 200 OK resposta.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string basePath = "{document-translation-endpoint}/translator/document/batches/{id}/documents/{documentId}";

    static readonly string route = "?api-version={date}";

    private static readonly string key = "{your-api-key}";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Get;
                request.RequestUri = new Uri(basePath + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

Eliminar tarefa

Breve visão geral

Cancelar a tarefa atualmente em processamento ou na fila. Apenas os documentos cuja tradução não foi iniciada são cancelados.


using System;
using System.Net.Http;
using System.Threading.Tasks;


class Program
{


    private static readonly string basePath = "{your-document-translation-endpoint}/translator/document/batches/{id}";

    static readonly string route = "?api-version={date}";

    private static readonly string key = "{your-api-key}";

    static async Task Main(string[] args)
    {

        HttpClient client = new HttpClient();
            using HttpRequestMessage request = new HttpRequestMessage();
            {
                request.Method = HttpMethod.Delete;
                request.RequestUri = new Uri(basePath + route);
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);


                HttpResponseMessage response = await client.SendAsync(request);
                string result = response.Content.ReadAsStringAsync().Result;

                Console.WriteLine($"Status code: {response.StatusCode}");
                Console.WriteLine($"Response Headers: {response.Headers}");
                Console.WriteLine();
                Console.WriteLine(result);
            }
}

Códigos de status HTTP comuns

Código de estado de HTTP Descrição Motivo possível
200 OK O pedido foi bem-sucedido.
400 Pedido Incorreto Um parâmetro necessário está ausente, vazio ou nulo. Ou, o valor passado para um parâmetro obrigatório ou opcional é inválido. Um problema comum é um cabeçalho demasiado longo.
401 Não autorizado O pedido não está autorizado. Verifique se a sua chave ou token está válido e na região correta.
429 Demasiados pedidos Você excedeu a cota ou a taxa de solicitações permitidas para sua assinatura.
502 Gateway Inválido Problema de rede ou do lado do servidor. Também pode indicar cabeçalhos inválidos.

Mais informações

Próximos passos