Neste artigo veremos como ter acesso a funcionalidade de análise de sentimento em uma aplicação ASP.NET Core, de maneira simples e prática.
O que são Azure Cognitive Services
Serviços de nuvem da Microsoft que disponibiliza recursos de inteligência artificial e machine learning para construção de aplicações “inteligentes”. Eles podem ser acessados por APIs REST, e por SDKs disponíveis em diversas linguagens.
Existem serviços das categorias:
- Visão
- Fala
- Linguagem
- Decisão
Vamos focar aqui neste artigo na categoria Linguagem, especificamente nos recursos de Análise de Sentimento.
O que é Análise de Sentimento
Análise de sentimento é uma técnica que permite extrair informações quanto ao sentimento de um texto. A métrica utilizada no resultado da análise é um score que vai de 0 a 1 para os 3 tipos de sentimento: Negativo, Neutro, e Positivo.
Os resultados são disponibilizados a nível do documento e também de sentença.
Vamos para a parte mais prática?
Criar um recurso de Análise de Texto
No portal do Azure, busque por “Language” na caixa de busca global, e selecione “Criar language”.
Na tela seguinte, selecione “Continue to create your resource”.
- Assinatura
- Grupo de recursos
- Região
- Nome da instância
- Tipo de preço
Eu selecionei o tipo de preço Free F0, camada gratuita, e o restante fica a sua preferência.
Selecione “Examinar + criar”, revise as informações na nova tela e selecione “Criar”.
Aguarde a implantação do recurso, e selecione “Ir para o recurso”.
Na tela de detalhes do recurso, selecione a opção “Chaves e Ponto de extremidade” no menu lateral, e então em “Mostrar as Chaves”. Salve a CHAVE 1 em um lugar seguro, já que utilizaremos posteriormente no momento de integrar. Também salve o Ponto de extremidade.
Com nosso recurso criado, e a chave salva, vamos para a nossa API.
Configurando nossa API
Primeiramente, precisamos instalar o pacote Azure.AI.TextAnalytics através da interface do Gerenciador de Pacotes NuGet ou via comando do .NET CLI abaixo.
dotnet add package Azure.AI.TextAnalytics
Com o pacote instalado, é necessário adicionar o Ponto de extremidade e a chave que obtemos na seção anterior do artigo, e armazenar em nossas configurações. Isso pode ser feito via .NET Secrets, diretamente no appsettings.json (não se deve subir código em um repositório Git com essa informação), ou variável de ambiente.
Eu vou utilizar o appsettings.json para simplificar, mas fica a seu critério e cuidado.
"TextApi": {
"Key": "<minha-chave>",
"Endpoint": "<meu-ponto-de-extremidade"
}
Com isso feito, vou apresentar logo abaixo o código de dois Models que eu utilizarei neste artigo: um modelo de entrada para o texto a ser analisado, e um modelo de saída para o resultado da análise de sentimento.
Modelo de entrada (Input Model)
public class SentimentAnalysisInputModel
{
public string Text { get; set; }
}
Modelo de saída (View Model)
public class SentimentAnalysisViewModel
{
public SentimentAnalysisViewModel(string text, TextSentiment sentiment, double positive, double neutral, double negative)
{
Text = text;
Sentiment = sentiment.ToString();
Positive = positive;
Neutral = neutral;
Negative = negative;
}
public string Text { get; private set; }
public string Sentiment { get; private set; }
public double Positive { get; private set; }
public double Neutral { get; private set; }
public double Negative { get; private set; }
}
Finalmente, logo abaixo está o código do nosso Controller e Action.
[ApiController]
[Route("api/text-analyzer")]
public class TextAnalyzerController : ControllerBase
{
private readonly TextAnalyticsClient _textAnalyticsClient;
public TextAnalyzerController(IConfiguration configuration)
{
var textApiKey = configuration.GetSection("TextApi:Key").Value;
var credentials = new AzureKeyCredential(textApiKey);
var endpoint = new Uri(configuration.GetSection("TextApi:Endpoint").Value);
_textAnalyticsClient = new TextAnalyticsClient(endpoint, credentials);
}
[HttpPost("sentiment-analysis")]
public async Task<IActionResult> SentimentAnalysis(SentimentAnalysisInputModel model) {
var result = await _textAnalyticsClient.AnalyzeSentimentAsync(model.Text);
var documentSentiment = result.Value;
var sentimentAnalysis = new SentimentAnalysisViewModel(
model.Text,
documentSentiment.Sentiment,
documentSentiment.ConfidenceScores.Positive,
documentSentiment.ConfidenceScores.Neutral,
documentSentiment.ConfidenceScores.Negative
);
return Ok(sentimentAnalysis);
}
}
Alguns pontos sobre o código acima:
- Note a construção do objeto de tipo TextAnalyticsClient. Ele vai ser utilizado para a execução da análise de sentimento usando o serviço Language do Azure Cognitive Services, e necessita de um objeto de tipo Uri inicializado com o ponto de extremidade, e o AzureCredentials, que é instanciado através da chave;
- O objeto de tipo DocumentSentiment (armazenado na variável documentSentiment) contém os dados que precisamos para obter o resultado da análise de sentimento. A propriedade Sentiment é um enum de tipo TextSentiment;
- Algo bem interessante é que o DocumentSentiment tem uma propriedade Sentences que permite acessar o texto e análise de sentimento das sentenças individuais;
- O idioma é detectado a partir do texto enviado, mas é possível especificá-lo adicionando um segundo parâmetro na chamada do método AnalyzeSentimentAsync.
Testando a API
Para testar a aplicação eu vou utilizar o Swagger.
Farei 3 testes: 1 com predominância de cada um sentimento entre os disponíveis (Positive, Neutral, Negative).
O primeiro texto que será analisado é positivo.
Logo abaixo está a resposta da API de análise de sentimento.
Veja que não tem ambiguidade aqui. O score para Positive é 1, e para os outros dois é 0.
Vamos para o neutro agora.
Não existe um sentimento aparente aqui, sendo simplesmente a descrição de um conceito / tecnologia / plataforma.
Logo abaixo podemos ver a resposta de nossa API.
Ao contrário do teste de Positive, veja que ele é predominantemente Neutral, e também que tem, mesmo em pequeno valor, um score para os outros 2 sentimentos.
Finalmente, vamos utilizar um texto com sentimento negativo.
E a resposta, como esperada, é predominantemente de sentimento Negative!
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o Método .NET Direto ao Ponto, minha plataforma com mais de 800 videoaulas, com cursos cobrindo temas relacionados a linguagem C# e Programação Orientada a Objetos, APIs REST com ASP NET Core, Microsserviços com ASP NET Core, HTML, CSS e JavaScript, Desenvolvimento Front-end com Angular, Desenvolvimento Front-end com React, JavaScript Intermediário, TypeScript, Formação Arquitetura de Software, Microsoft Azure, Agile, SQL, e muito mais.
Inclui comunidade de centenas de alunos, suporte por ela, plataforma e e-mail, atualizações regulares e muito mais.
Clique aqui para ter mais informações e garantir sua vaga
Conclusão
Neste artigo vemos como é simples e prático ter acesso a capacidades incríveis como análise de sentimento, sem precisar conhecer a fundo tópicos como aprendizado de máquina e inteligência artificial.
Com isso, conseguimos adicionar capacidades modernas e inovadoras em nossas aplicações, rapidamente.