Como detectar o idioma do texto usando o serviço Azure AI Language
Aprenda a detectar o idioma de um texto usando o serviço Azure AI Language, incluindo provisionamento, payloads da API e exemplos com o SDK em C# usando TextAnalyticsClient.
O serviço Azure AI Language oferece aos desenvolvedores uma API para técnicas comuns de análise de texto, como detectar o idioma do texto, fazer análise de sentimento, extração de frases-chave e reconhecimento e vinculação de entidades nomeadas.
Provisionamento
O primeiro passo para analisar texto com o Azure AI Language é provisionar um recurso Language service no Azure. Para fins de teste, você pode usar o nível gratuito F0, que tem um limite de 5000 transações por mês.
Além dos limites do nível, você também precisa considerar os limites de requisição:
- é possível enviar no máximo 1000 documentos por requisição
- e cada documento pode ter no máximo 5120 caracteres
Depois que o recurso for criado, navegue até Keys and Endpoint para obter a URL do endpoint e a chave de autorização (qualquer uma das duas funciona). Vamos precisar delas mais adiante, quando começarmos a fazer chamadas à API.
API de detecção de idioma
A API de detecção de idioma recebe um ou mais documentos de texto e, para cada um deles, retorna o idioma detectado junto com uma pontuação de confiança. Isso é útil ao lidar com textos arbitrários, quando você não sabe qual é o idioma do conteúdo e isso pode ter um papel importante em análises ou ações subsequentes. Por exemplo, em um cenário de chatbot, você pode usar essa informação para atender o usuário no idioma dele.
Cada documento de entrada é composto pelo seu conteúdo text e por um id único (único no contexto desta requisição). Você também pode informar um countryHint para cada documento de entrada para melhorar o desempenho da predição.
Vamos olhar um exemplo de payload JSON:
{
"kind": "LanguageDetection",
"parameters": {
"modelVersion": "latest"
},
"analysisInput": {
"documents": [
{
"id": "1",
"text": "Good morning",
"countryHint": "US"
},
{
"id": "2",
"text": "Hello, je m'appelle Marius!"
}
]
}
}
Para cada documento de entrada, receberemos de volta o idioma detectado (name e iso6391Name) junto com uma pontuação de confiança e uma lista de avisos (se houver).
{
"kind": "LanguageDetectionResults",
"results": {
"documents": [
{
"detectedLanguage": {
"confidenceScore": 1,
"iso6391Name": "en",
"name": "English"
},
"id": "1",
"warnings": []
},
{
"detectedLanguage": {
"confidenceScore": 0.98,
"iso6391Name": "fr",
"name": "French"
},
"id": "2",
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-10-01"
}
}
Caso o serviço não consiga entender o texto de entrada, o idioma será (Unknown), com um confidenceScore de 0.
Testando
Para testar a API de detecção de idioma, crie uma nova aplicação de console e instale o pacote NuGet Azure.AI.TextAnalytics. Depois que o pacote estiver instalado, começamos criando uma instância de TextAnalyticsClient.
using Azure.AI.TextAnalytics;
using Azure;
var aiClient = new TextAnalyticsClient(
new Uri("https://my-service.cognitiveservices.azure.com/"),
new AzureKeyCredential("98c1961504db412c9fd36d15984c9d9e"));
Lembre-se de substituir o endpoint e a chave de autorização pelos dados obtidos na página Keys and Endpoint do seu próprio recurso. Feito isso, você está pronto para chamar o serviço.
O TextAnalyticsClient fornece dois métodos para detectar o idioma:
DetectLanguageAsync, que funciona para um único trecho de texto e tem um parâmetro opcional para ocountryHintDetectLanguageBatchAsync, que funciona com múltiplos documentos, aceitando strings ou instâncias deDetectLanguageInput
Vamos pegá-los um a um. Primeiro, detectando o idioma de um único trecho de texto:
var response = await aiClient.DetectLanguageAsync("Hello, world!");
var detectedLanguage = response.Value;
DetectLanguageAsync retorna um Task<Response<DetectedLanguage>>, então, para chegar ao DetectedLanguage em si, precisamos acessar .Value no resultado da tarefa. A resposta será assim:
{
"Name": "English",
"Iso6391Name": "en",
"ConfidenceScore": 1,
"Warnings": []
}
Agora um cenário mais complexo, em que, como no exemplo de payload JSON acima, enviamos múltiplos documentos com identificadores únicos associados e, para um deles, também fornecemos um CountryHint. O código fica assim:
var inputDocuments = new DetectLanguageInput[]
{
new("1", "Good morning") { CountryHint = "US" },
new("2", "Hello, je m'appelle Marius!"),
};
var detectedLanguages = (await aiClient.DetectLanguageBatchAsync(inputDocuments)).Value;
detectedLanguages é do tipo DetectLanguageResultCollection, que na verdade é uma ReadOnlyCollection com algumas informações adicionais por cima (estatísticas sobre o lote de documentos e como ele foi processado pelo serviço, além da versão do modelo do serviço Language usada para a operação).
[
{
"PrimaryLanguage": {
"Name": "English",
"Iso6391Name": "en",
"ConfidenceScore": 1,
"Warnings": []
},
"Id": "1"
},
{
"PrimaryLanguage": {
"Name": "French",
"Iso6391Name": "fr",
"ConfidenceScore": 0.98,
"Warnings": []
},
"Id": "2"
}
] 
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.