Sotto il nome di cognitive service si racchiudono una serie di servizi che sfruttano l'intelligenza artificiale per offrire funzionalità utili ad arricchire i nostri applicativi. Sono forniti dalla piattaforma Microsoft Azure perciò si gestiscono e vengono offerti con piani a consumo e, sotto certe soglie, anche gratuitamente.
Tra questi servizi è presente il translator text che, attraverso API REST, ci permette di tradurre contenuti in oltre 60 lingue con una notevole qualità. Sotto i due miglioni di caratteri mensili, inoltre, è gratuito permettendoci di sperimentare o di fornire funzionalità molto utili senza sforzo. Tra le possibilità offerte, oltre a tradurre del testo, c'è anche quella di tradurre markup HTML o markdown, funzionalità molto utile se stiamo fornendo un back office che deve aiutare nel tradurre contenuti.
Per usufruire di questo dobbiamo prima di tutto creare una risorsa Azure di tipo Translator text. Diamo un nome e selezioniamo il pricing tier. Se è il primo account che creiamo possiamo anche selezionare il tier gratuito.
Creata la risorsa è sufficiente appuntarsi la chiave disponibile direttamente dell'overview della stessa.
A questo punto dobbiamo ricorrere alla documentazione, raggiungibile qua https://docs.microsoft.com/en-us/azure/cognitive-services/translator/reference/v3-0-translate, che spiega come effettuare la chiamata REST. In questo script implementiamo la chiamata utilizzando una libreria Refit, disponibile su NuGet, che automatizza il processo di creazione del client.
Installato il pacchetto è sufficiente, infatti, definire un'interfaccia che rispecchi la firma della chiamata, come nell'esempio seguente.
public interface ITranslatorService { [Post("/translate?api-version=3.0&to={to}&from={from}&textType=html&includeAlignment=true")] Task<TranslatorResponse[]> TranslateAsync(string from, string to, [Body] TranslatorRequest[] requests); }
L'attributo Post ci permette di indicare il verb HTTP, ma anche dove posizionare i parametri della funzione all'intero dell'URI. Da notare l'uso del parametro textType per forzare la comprensione dell'HTML. Richiesta e risposta vengono serializzati e deserializzati in JSON, perciò definiamo i modelli che li rappresentano sfruttando gli attributi di JSON.NET.
public partial class TranslatorRequest { [JsonPropertyName("Text")] public string Text { get; set; } } public partial class TranslatorResponse { [JsonPropertyName("translations")] public Translation[] Translations { get; set; } } public partial class Translation { [JsonPropertyName("text")] public string Text { get; set; } [JsonPropertyName("to")] public string To { get; set; } }
Possiamo quindi procedere ad effettuare la chiamata. Per farlo la libreria fornisce un factory method di nome RestService.For per ottenere un'istanza che soddisfi l'interfaccia appena creata. Lo facciamo fornendo un HttpClient configurato con l'URI base e con l'header Ocp-Apim-Subscription-Key valorizzato con la chiave che in precedenza abbiamo recuperato.
// Creazione del client Http var client = new HttpClient(); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "key..."); client.BaseAddress = new Uri("https://api.cognitive.microsofttranslator.com"); // Creazione del proxy ITranslatorService service = RestService.For<ITranslatorService>(client); // Traduco il contenuto var request = new[] { new TranslatorRequest {Text = "<p>Ciao!</p>"}, }; var response = await service.TranslateAsync("IT", "EN", request); // <p>Hi!</p> Console.WriteLine(response[0].Translations[0].Text);
Come si vede dal codice, effettuata la chiamata, che supporta più testi, possiamo leggerne la risposta in base all'indice.
Per maggiori informazioni sulla libreria Refit si rimanda al sito
https://github.com/reactiveui/refit
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Creare gruppi di client per Event Grid MQTT
Migrare una service connection a workload identity federation in Azure DevOps
Miglioramenti nell'accessibilità con Angular CDK
Eseguire attività con Azure Container Jobs
Utilizzare le collection expression in C#
Hosting di componenti WebAssembly in un'applicazione Blazor static
Eseguire attività pianificate con Azure Container Jobs
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare gli snapshot con Azure File shares
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Determinare lo stato di un pod in Kubernetes
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
I più letti di oggi
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Disabilitare automaticamente un workflow di GitHub (parte 2)
- Ottimizzazione dei block template in Angular 17
- Paginare i risultati con QuickGrid in Blazor
- Ed infine anche il calendario :)
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!