Tradução de textos com Azure Cognitive Services e C#

Neste artigo vou discutir sobre o Azure Cognitive Services, mais especificamente sobre o seu serviço Translator, que oferece funcionalidade de tradução de textos em diversos idiomas.

Finalmente, após a parte teórica, eu mostro a implementação de um exemplo prático utilizando C# e interagindo com o serviço Translator, realizando a tradução de texto em português para inglês.

Vamos lá?

Sobre o Azure Cognitive Services

Antes de falar sobre o serviço Translator, é importante entender em que contexto ele está contido: o Azure Cognitive Services.

O Azure Cognitive Services é um conjunto de serviços que disponibilizam funcionalidades relacionadas a inteligência artificial a disposição através de uma API simples,

Com uma chamada de API é possível identificar imagens e sons, realizar traduções a partir de textos e falas, analisar sentimento em textos, entre outros serviços.

O uso padrão desses serviços é através de criação de recurso correspondente na plataforma Azure, e em seguida a obtenção da chave e endpoint para a realização da chamada de API. É isso.

O serviço a ser utilizado neste artigo é o Translator.

Sobre o Translator

O Translator (ou Tradutor) faz parte do Azure Cognitive Services, e é um serviço de tradução acessível por API REST. O seu recurso específico que utilizaremos neste artigo é o de tradução de texto.

Ele tem suporte aos seguintes métodos:

  • Listagem de idiomas
  • Tradução
  • Transliteração
  • Detecção
  • Pesquisa em dicionário
  • Exemplo de dicionário

A disponibilidade desses métodos depende do idioma em que se está trabalhando.

Por exemplo, a tradução de texto do Translator tem suporte por volta de 100 idiomas.

Demo

O exemplo a ser construído tem alguns passos, e vou apresentá-los a seguir.

Criação do recurso Translator no Azure

O primeiro passo é criar o recurso Translator, parte do Azure Cognitive Services, na plataforma de nuvem Azure.

Para isto, basta realizar o login no Portal do Azure, e clicar em Criar um novo recurso.

Digite “Translator”, e realize a busca. O resultado deve ser semelhante à imagem abaixo.

Resultado de busca de recurso no Portal do Azure

Selecione a primeira opção “Translator”, e será carregada a página de detalhes do recurso. Clique em Criar.

Página de detalhes de Translator

Em seguida, será necessário preencher algumas informações, como:

  • Assinatura
  • Grupo de Recursos
  • Região do grupo de recursos (se estiver criando um Grupo de Recursos novo)
  • Região
  • Nome
  • Tipo de preço

Na imagem abaixo mostro as configurações que utilizei.

Após o preenchimento, clicar em “Revisar + criar”, e então em “Criar”.

Com o recurso criado, navegue para ele e acesse o item de menu “Chaves e Ponto de extremidade” que está na categoria “Gerenciamento de Recursos”, e conseguirá ter acesso a Chave e também ao endpoint disponibilizado para tradução de textos. Guarde bem eles porque vamos utilizar na próxima fase.

Escrevendo a aplicação

A aplicação criada é um Console Application, criado pelo comando dotnet new console.

Para a deserialização do resultado da tradução pela API do Translator, utilizo a classe abaixo.

using System.Collections.Generic;

namespace TranslatorAzure.Models
{
    public class TranslationResult
    {
        public List<Translation> Translations { get; set; }
    }

    public class Translation
    {
        public string Text { get; set; }
        public string To { get; set; }
    }
}

No classe Program do arquivo Program.cs especifico primeiro as constantes que serão utilizadas:

  • REGION: região do serviço do Translator
  • BASE_TRANSLATOR_URL: URL base do serviço do translator, extraído anteriormente
  • API_URL: URL que contém especificação da API utilizada
  • TRANSLATOR_KEY: chave do Translator, extraída anteriormente

O resultado está logo abaixo.

const string REGION = "brazilsouth";
const string BASE_TRANSLATOR_URL = "https://api.cognitive.microsofttranslator.com/";
const string API_URL = "translate?api-version=3.0&to=en";
const string TRANSLATOR_KEY = "AQUI_ESTA_SUA_CHAVE_DO_TRANSLATOR";

Em seguida, crio um método que será responsável por realizar a requisição HTTP para a API do Translator. Para isso, eu utilizo a biblioteca Flurl.Http, que pode ser instalada pelo comando dotnet add package Flurl.Http

static async Task<string> GetTranslationFromPtToEn(string textInPortuguese) {
            var fullTranslatorUrl = BASE_TRANSLATOR_URL + API_URL;

            var body = new object[] { new { Text = textInPortuguese } };

            var result = await fullTranslatorUrl
                .WithHeader("Ocp-Apim-Subscription-Key", TRANSLATOR_KEY)
                .WithHeader("Ocp-Apim-Subscription-Region", REGION)
                .PostJsonAsync(body)
                .ReceiveJson<TranslationResult[]>();

            return result[0].Translations.First().Text;
        }

Note que envio uma matriz de objetos (mesmo que contendo somente um), assim como recebo uma matriz de resultados.

Os Headers Ocp-Apim-Subscription-Key e Ocp-Apim-Subscription-Region contém, respectivamente, a chave e região do serviço Translator.

Com este método implementado, vamos a fase final, que é implementar nosso fluxo de tradução do Português para o Inglês. Por utilizar um método assíncrono, precisei transformar o retorno do Main de void para Task.

static async Task Main(string[] args)
        {
            Console.WriteLine("-------Serviço de tradução do Português para Inglês-------");
            string text;

            w hile (true) {
                Console.WriteLine("Digite um texto em português ou '0' para encerrar.");
                text = Console.ReadLine();

                i f (text == "0")
                    break;

                var translation = await GetTranslationFromPtToEn(text);

                Console.WriteLine($"A tradução para o inglês é: {translation}");
            }    
        }

Com a implementação completa, executo o projeto com o comando dotnet run, e logo abaixo está um exemplo da execução da aplicação.

O código-fonte completo pode ser encontrado aqui.

Conclusão

Foi visto neste artigo informações sobre o Azure Cognitive Services e o seu serviço Translator, assim como criar este recurso na plataforma Azure e, finalmente, criar uma aplicação que execute traduções do Português para o Inglês utilizando a linguagem C# e aplicação Console.