Container: Traduzir o texto

Traduzir o texto.

URL da solicitação

Envie uma solicitação POST para:

POST http://localhost:{port}/translate?api-version=3.0&&from={from}&to={to}

Solicitação de exemplo

curl -x POST "https:localhost:5000/translate?api-version=3.0&from=en&to=es" -H "Content-Type: application/json" -d "[{
'Text': 'I would really like to drive your car.'}]"

Exemplo de resposta

[
  {
    "translations": [
      {
        "text": "Realmente me gustaría conducir su coche.",
        "to": "es"
      }
    ]
  }
]

Parâmetros da solicitação

Os parâmetros de solicitação passados na cadeia de caracteres de consulta são:

Parâmetros obrigatórios

Parâmetro de consulta Descrição Condição
api-version Versão da API solicitada pelo cliente. O valor precisa ser 3.0. Parâmetro obrigatório
de Especifica o idioma do texto de entrada. Parâmetro obrigatório
até Especifica o idioma do texto de saída. Por exemplo, use to=de para traduzir para alemão.
É possível traduzir para vários idiomas simultaneamente, repetindo o parâmetro na cadeia de caracteres de consulta. Por exemplo, use to=de&to=it para traduzir para alemão e italiano.
Parâmetro obrigatório

Parâmetros opcionais

Parâmetro de consulta Descrição
textType Parâmetro opcional.
Define se o texto que está sendo traduzido é texto sem formatação ou texto HTML. Qualquer HTML precisa ser um elemento bem formado e completo. Os valores possíveis são: plain (padrão) ou html.
includeSentenceLength Parâmetro opcional.
Especifica se deve incluir limites de sentença para o texto de entrada e o texto traduzido. Os valores possíveis são: true ou false (padrão).

Cabeçalhos da solicitação

Cabeçalhos Descrição Condição
Cabeçalhos de autenticação Consulteas opções disponíveis para autenticação. Cabeçalho de solicitação obrigatório
Content-Type Especifica o tipo de conteúdo da carga.
O valor aceito é application/json; charset=UTF-8.
Cabeçalho de solicitação obrigatório
Content-Length O tamanho do corpo da solicitação. Opcional
X-ClientTraceId Um GUID gerado pelo cliente para identificar exclusivamente a solicitação. É possível omitir esse cabeçalho se incluir a ID de rastreamento na cadeia de caracteres de consulta usando um parâmetro de consulta nomeado ClientTraceId. Opcional

Corpo da solicitação

O corpo da solicitação é uma matriz JSON. Cada elemento da matriz é um objeto JSON com uma propriedade de cadeia nomeada Text, que representa a cadeia de caracteres a ser traduzida.

[
    {"Text":"I would really like to drive your car around the block a few times."}
]

As seguintes limitações se aplicam:

  • A matriz pode ter no máximo 100 elementos.
  • Todo o texto incluído na solicitação não pode exceder 10 mil caracteres, incluindo espaços.

Corpo da resposta

Uma resposta com êxito é uma matriz JSON com um resultado para cada cadeia de caracteres na matriz de entrada. Um objeto de resultado inclui as seguintes propriedades:

  • translations: uma matriz de resultados de tradução. O tamanho da matriz corresponde ao número de idiomas de destino especificados por meio do parâmetro de consulta to. Cada elemento na matriz inclui:

  • to: uma cadeia de caracteres representando o código de idioma do idioma de destino.

  • text: uma cadeia de caracteres dando o texto traduzido.

  • sentLen: um objeto retornando limites de sentença nos textos de entrada e saída.

  • srcSentLen: uma matriz inteira representando os comprimentos das sentenças no texto de entrada. O comprimento da matriz é o número de sentenças, e os valores são o comprimento de cada sentença.

  • transSentLen: uma matriz de inteiros representando os comprimentos das sentenças no texto traduzido. O comprimento da matriz é o número de sentenças, e os valores são o comprimento de cada sentença.

    Limites de sentença serão incluídos somente quando o parâmetro de solicitação includeSentenceLength for true.

    • sourceText: um objeto com uma única propriedade de cadeia de caracteres nomeada text, que fornece o texto de entrada no script padrão do idioma de origem. sourceText a propriedade está presente apenas quando a entrada é expressa em um script que não é o script usual para o idioma. Por exemplo, se a entrada fosse árabe gravada em script de latim, sourceText.text seria o mesmo texto árabe convertido em script de árabe.

Cabeçalhos de resposta

Cabeçalhos Descrição
X-RequestId Valor gerado pelo serviço para identificar a solicitação e usado para fins de solução de problemas.
Sistema-MT-X Especifica o tipo de sistema usado para tradução para cada idioma de destino solicitado para tradução. O valor é uma lista separada por vírgulas de cadeia de caracteres. Cada cadeia de caracteres indica um tipo:

▪ Personalizado - a solicitação inclui um sistema personalizado e, no mínimo, um sistema personalizado foi usado durante a tradução.
▪ Equipe – Todas as outras solicitações

Códigos de status de resposta

Se ocorrer um erro, a solicitação também retornará uma resposta de erro JSON. O código de erro é um número de 6 dígitos que combina o código de status HTTP de 3 dígitos seguido por um número de 3 dígitos para categorizar ainda mais o erro. Códigos de erros comuns que podem ser encontrados na página de referência do Tradutor v3.

Exemplos de código: traduzir o texto

Observação

  • Cada exemplo é executado no localhost que você especificou com o docker run comando.
  • Enquanto o contêiner está em execução, localhost aponta para o próprio contêiner.
  • Você não precisa usar localhost:5000o . Você pode usar qualquer porta que ainda não esteja em uso no ambiente do host.

Traduzir uma única entrada

Este exemplo mostra como traduzir uma única sentença de inglês para chinês simplificado.

curl -X POST "http://localhost:{port}/translate?api-version=3.0&from=en&to=zh-Hans" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}]"

O corpo da resposta é:

[
    {
        "translations":[
            {"text":"你好, 你叫什么名字?","to":"zh-Hans"}
        ]
    }
]

A matriz translations inclui um elemento, que fornece a tradução da única parte do texto na entrada.

Ponto de extremidade do Query Azure AI Translator (texto)

Aqui está um exemplo de solicitação HTTP cURL usando localhost:5000 que você especificou com o docker run comando:

  curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-HANS"
    -H "Content-Type: application/json" -d "[{'Text':'Hello, what is your name?'}]"

Observação

Se você tentar a solicitação cURL POST antes que o contêiner esteja pronto, você acabará recebendo uma resposta de Serviço temporariamente indisponível. Aguarde até que o contêiner esteja pronto e tente novamente.

Traduzir o texto usando Swagger API

Inglês ↔ Alemão

  1. Navegue até a página Swagger: http://localhost:5000/swagger/index.html
  2. Selecione POST /translate
  3. Selecione Experimentar
  4. Insira o parâmetro de como en
  5. Insira o parâmetro para como de
  6. Insira o parâmetro de versão de API como 3.0
  7. Em textos, substitua string pelo JSON a seguir
  [
        {
            "text": "hello, how are you"
        }
  ]

Selecione Executar, as traduções resultantes serão geradas no Corpo da Resposta. Você deverá ver a seguinte resposta:

"translations": [
      {
          "text": "hallo, wie geht es dir",
          "to": "de"
      }
    ]

Traduzir texto com Python

Inglês ↔ Francês

import requests, json

url = 'http://localhost:5000/translate?api-version=3.0&from=en&to=fr'
headers = { 'Content-Type': 'application/json' }
body = [{ 'text': 'Hello, how are you' }]

request = requests.post(url, headers=headers, json=body)
response = request.json()

print(json.dumps(
    response,
    sort_keys=True,
     indent=4,
     ensure_ascii=False,
     separators=(',', ': ')))

Traduzir texto com o aplicativo de console C#/.NET

Inglês ↔ Espanhol

Inicialize o Visual Studio e crie um novo aplicativo de Console. Edite o *.csproj arquivo para adicionar o <LangVersion>7.1</LangVersion> nó — especifico C# 7.1. Adicione o pacote Newtoonsoft.Json NuGet versão 11.0.2.

Em Program.cs substitua todo o código existente pelo seguinte script:

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

namespace TranslateContainer
{
    class Program
    {
        const string ApiHostEndpoint = "http://localhost:5000";
        const string TranslateApi = "/translate?api-version=3.0&from=en&to=es";

        static async Task Main(string[] args)
        {
            var textToTranslate = "Sunny day in Seattle";
            var result = await TranslateTextAsync(textToTranslate);

            Console.WriteLine(result);
            Console.ReadLine();
        }

        static async Task<string> TranslateTextAsync(string textToTranslate)
        {
            var body = new object[] { new { Text = textToTranslate } };
            var requestBody = JsonConvert.SerializeObject(body);

            var client = new HttpClient();
            using (var request =
                new HttpRequestMessage
                {
                    Method = HttpMethod.Post,
                    RequestUri = new Uri($"{ApiHostEndpoint}{TranslateApi}"),
                    Content = new StringContent(requestBody, Encoding.UTF8, "application/json")
                })
            {
                // Send the request and await a response.
                var response = await client.SendAsync(request);

                return await response.Content.ReadAsStringAsync();
            }
        }
    }
}

Definição da palavra multiple strings

Traduzir várias cadeias de caracteres de uma vez é simplesmente uma questão de especificar uma matriz de cadeia de caracteres no corpo da solicitação.

curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}, {'Text':'I am fine, thank you.'}]"

A resposta contém a tradução de todas as partes do texto na mesma ordem que na solicitação. O corpo da resposta é:

[
    {
        "translations":[
            {"text":"你好, 你叫什么名字?","to":"zh-Hans"}
        ]
    },
    {
        "translations":[
            {"text":"我很好,谢谢你。","to":"zh-Hans"}
        ]
    }
]

Traduzir para vários idiomas

Este exemplo mostra como traduzir a mesma entrada para vários idiomas em uma solicitação.

curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans&to=de" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}]"

O corpo da resposta é:

[
    {
        "translations":[
            {"text":"你好, 你叫什么名字?","to":"zh-Hans"},
            {"text":"Hallo, was ist dein Name?","to":"de"}
        ]
    }
]

Traduzir conteúdo com marcação e especificar conteúdo traduzido

É comum traduzir conteúdo que inclui marcação, como conteúdo de uma página HTML ou conteúdo de um documento XML. Inclua o parâmetro de consulta textType=html ao traduzir conteúdo com marcas. Além disso, às vezes é útil excluir conteúdo específico da tradução. É possível usar o atributo class=notranslate para especificar o conteúdo que deve permanecer no idioma original. No exemplo a seguir, o conteúdo dentro do primeiro elemento div não será traduzido, enquanto o conteúdo no segundo elemento div será.

<div class="notranslate">This will not be translated.</div>
<div>This will be translated. </div>

Veja uma solicitação de exemplo para ilustrar.

curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=zh-Hans&textType=html" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'<div class=\"notranslate\">This will not be translated.</div><div>This will be translated.</div>'}]"

A resposta é:

[
    {
        "translations":[
            {"text":"<div class=\"notranslate\">This will not be translated.</div><div>这将被翻译。</div>","to":"zh-Hans"}
        ]
    }
]

Traduzir com dicionário dinâmico

Se você já souber a tradução que deseja aplicar a uma palavra ou frase, poderá fornecê-la como marcação dentro da solicitação. O dicionário dinâmico só é seguro para nomes próprios, como nomes de pessoas e nomes de produtos.

A marcação para fornecer usa a seguinte sintaxe.

<mstrans:dictionary translation="translation of phrase">phrase</mstrans:dictionary>

Por exemplo, considere a frase em inglês "A palavra wordomatic é uma entrada de dicionário." Para preservar a palavra wordomatic na tradução, envie a solicitação:

curl -X POST "http://localhost:5000/translate?api-version=3.0&from=en&to=de" -H "Ocp-Apim-Subscription-Key: <client-secret>" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'The word <mstrans:dictionary translation=\"wordomatic\">word or phrase</mstrans:dictionary> is a dictionary entry.'}]"

O resultado é:

[
    {
        "translations":[
            {"text":"Das Wort \"wordomatic\" ist ein Wörterbucheintrag.","to":"de"}
        ]
    }
]

Esse recurso funciona da mesma maneira com textType=text ou com textType=html. O recurso deve ser usado com moderação. A maneira apropriada e muito melhor de personalizar a tradução é usando o Tradutor Personalizado. O Tradutor Personalizado faz uso total das probabilidades de estatística e contexto. Se você criou dados de treinamento que mostram seu trabalho ou frase no contexto, obtém melhores resultados. Saiba mais sobre o Tradutor Personalizado.

Limites de solicitações

Cada solicitação de tradução é limitada a 10 mil caracteres, em todos os idiomas de destino para os quais será feita a tradução. Por exemplo, o envio de uma solicitação de tradução de 3.000 caracteres para traduzir para três idiomas diferentes resulta em um tamanho de solicitação de 3000x3 = 9.000 caracteres, que atendem ao limite da solicitação. Você é cobrado por personagem, não pelo número de solicitações. Recomendamos o envio de solicitações mais curtas.

A tabela a seguir lista os limites de elemento e de caracteres de matriz para a operação de tradução do Tradutor.

Operação Tamanho máximo do elemento de matriz Número máximo de elementos de matriz Tamanho máximo da solicitação (caracteres)
translate 10.000 100 10.000

Usar a composição do docker: Tradutor com contêineres de suporte

A composição do Docker é uma ferramenta que permite configurar aplicativos de vários contêineres usando um único arquivo YAML normalmente chamado compose.yaml. Use o comando docker compose up para iniciar seu aplicativo de contêiner e o comando docker compose down para parar e remover seus contêineres.

Caso tenha instalado a CLI do Docker Desktop, ela inclui o Docker Compose e seus pré-requisitos. Caso não tenha o Docker Desktop, confira a Visão geral da instalação do Docker Compose.

A tabela a seguir lista os contêineres de suporte necessários para suas operações de tradução de texto e documento. O contêiner do Tradutor envia informações de cobrança para o Azure por meio do recurso do Tradutor de IA do Azure na sua conta do Azure.

Operação Solicitação consulta Tipo de documento Contêineres de suporte
• Tradução de texto
• Tradução de documento
from especificado. Documentos do Office Nenhum
• Tradução de texto
• Tradução de documento
from não especificado. Requer a detecção automática de idioma para determinar o idioma de origem. Documentos do Office ✔️ Análise de texto:contêiner de idioma
• Tradução de texto
• Tradução de documento
from especificado. Documentos PDF verificados ✔️ Vision: ler contêiner
• Tradução de texto
• Tradução de documento
from não especificado, exigindo a detecção automática do idioma para determinar o idioma de origem. Documentos PDF verificados ✔️ Análise de texto:contêiner de idioma

✔️ Vision: ler contêiner
Imagens e marcas de contêiner

As imagens de contêiner dos serviços de IA do Azure podem ser encontradas no catálogo do Registro de Artefato da Microsoft. A tabela a seguir lista o local de imagem totalmente qualificado para a tradução de texto e documento:

Contêiner Local da imagem Observações
Tradutor: Tradução de texto mcr.microsoft.com/azure-cognitive-services/translator/text-translation:latest Você pode exibir a lista completa das marcas de versão da Tradução de texto dos serviços de IA do Azure no MCR.
Tradutor: Tradução de documentos TODO TODO
Análise de texto: idioma mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest Você pode exibir a lista completa das marcas de versão do Idioma da Análise de Texto de serviços de IA do Azure no MCR.
Visão: leitura mcr.microsoft.com/azure-cognitive-services/vision/read:latest Você pode exibir a lista completa das marcas de versão da Leitura da Pesquisa Visual Computacional dos serviços de IA do Azure OCR no MCR.

Criar o aplicativo

  1. Usando seu editor ou IDE preferencial, crie um novo diretório para seu aplicativo chamado container-environment ou use um nome de sua escolha.

  2. Criar um novo arquivo YAML chamado compose.yaml. As extensões .yml ou .yaml podem ser usadas para o arquivo compose.

  3. Copie e cole o exemplo de código YAML a seguir em seu arquivo compose.yaml. Substitua {TRANSLATOR_KEY} e {TRANSLATOR_ENDPOINT_URI} pelos valores da chave e do ponto de extremidade da instância do Tradutor do portal do Azure. Certifique-se de usar o document translation endpointarquivo .

  4. O nome de nível superior (azure-ai-translator, azure-ai-language, azure-ai-read) é o parâmetro que você especifica.

  5. O container_name é um parâmetro opcional que define um nome para o contêiner quando ele é executado, em vez de deixar docker compose gerar um nome.

    services:
      azure-ai-translator:
        container_name: azure-ai-translator
        image: mcr.microsoft.com/product/azure-cognitive-services/translator/text-translation:latest
        environment:
            - EULA=accept
            - billing={TRANSLATOR_ENDPOINT_URI}
            - apiKey={TRANSLATOR_KEY}
            - AzureAiLanguageHost=http://azure-ai-language:5000
            - AzureAiReadHost=http://azure-ai-read:5000
        ports:
              - "5000:5000"
        azure-ai-language:
          container_name: azure-ai-language
          image:  mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest
          environment:
              - EULA=accept
              - billing={TRANSLATOR_ENDPOINT_URI}
              - apiKey={TRANSLATOR_KEY}
        azure-ai-read:
          container_name: azure-ai-read
          image:  mcr.microsoft.com/azure-cognitive-services/vision/read:latest
          environment:
              - EULA=accept
              - billing={TRANSLATOR_ENDPOINT_URI}
              - apiKey={TRANSLATOR_KEY}
    
  6. Abra um terminal navegue até a pasta container-environment e inicie os contêineres com o seguinte comando docker-compose:

    docker compose up
    
  7. Para parar o contêiner, use o seguinte comando:

    docker compose down
    

    Dica

    docker compose Comandos:

    • docker compose pause pausa a execução de contêineres.
    • docker compose unpause {your-container-name} retoma os contêineres pausados.
    • docker compose restart reinicia todos os contêineres parados e em execução com todas as alterações anteriores intactas. Se você fizer alterações na configuração compose.yaml, elas não serão atualizadas com o comando docker compose restart. Você precisa usar o comando docker compose up para refletir atualizações e alterações no arquivo compose.yaml.
    • docker compose ps -a lista todos os contêineres, incluindo aqueles que estão parados.
    • docker compose exec permite executar comandos para desanexar ou definir variáveis de ambiente em um contêiner em execução.

    Para obter mais informações, confirareferência da CLI do Docker.

Próximas etapas