Libreria client di Azure Analisi del testo per JavaScript - versione 5.1.0

Azure TextAnalytics è un servizio basato sul cloud che offre un'elaborazione avanzata del linguaggio naturale sul testo non elaborato e include sei funzioni principali:

Nota: Questo SDK è destinato all'API del servizio di azure Analisi del testo versione 3.1.0.

  • Rilevamento lingua
  • Analisi del sentiment
  • Estrazione frasi chiave
  • Riconoscimento di entità denominate
  • Riconoscimento delle informazioni personali
  • Riconoscimento delle entità collegate
  • Analisi sanitaria
  • Supportare più azioni per documento

Usare la libreria client per:

  • Rilevare il testo di input della lingua in cui è scritto.
  • Determinare quali clienti pensano al marchio o all'argomento analizzando il testo non elaborato per indizi sul sentiment positivo o negativo.
  • Estrae automaticamente frasi chiave per identificare rapidamente i punti principali.
  • Identificare e classificare le entità nel testo come persone, luoghi, organizzazioni, data/ora, quantità, percentuali, valute, specifiche dell'assistenza sanitaria e altro ancora.
  • Eseguire più attività precedenti contemporaneamente.

Collegamenti principali:

Introduzione

Ambienti attualmente supportati

Per altre informazioni, vedere i criteri di supporto.

Prerequisiti

Se si usa l'interfaccia della riga di comando di Azure, sostituire <your-resource-group-name> e <your-resource-name> con i propri nomi univoci:

az cognitiveservices account create --kind TextAnalytics --resource-group <your-resource-group-name> --name <your-resource-name> --sku <your-sku-name> --location <your-location>

Installare il pacchetto @azure/ai-text-analytics

Installare la libreria client di Azure Analisi del testo per JavaScript con npm:

npm install @azure/ai-text-analytics

Creare e autenticare un oggetto TextAnalyticsClient

Per creare un oggetto client per accedere all'API Analisi del testo, sarà necessario disporre della endpoint risorsa Analisi del testo e di un credentialoggetto . Il client Analisi del testo può usare le credenziali di Azure Active Directory o le credenziali della chiave API per l'autenticazione.

È possibile trovare l'endpoint per la risorsa di analisi del testo nel portale di Azure o usando il frammento di interfaccia della riga di comando di Azure seguente:

az cognitiveservices account show --name <your-resource-name> --resource-group <your-resource-group-name> --query "endpoint"

Uso di una chiave API

Usare il portale di Azure per passare alla risorsa Analisi del testo e recuperare una chiave API oppure usare il frammento di interfaccia della riga di comando di Azure seguente:

Nota: A volte la chiave API viene definita "chiave di sottoscrizione" o "chiave API di sottoscrizione".

az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>

Dopo avere una chiave API e un endpoint, è possibile usare la classe per autenticare il AzureKeyCredential client come indicato di seguito:

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

Uso di credenziali di Azure Active Directory

L'autenticazione della chiave API client viene usata nella maggior parte degli esempi, ma è anche possibile eseguire l'autenticazione con Azure Active Directory usando la libreria di identità di Azure. Per usare il provider DefaultAzureCredential illustrato di seguito o altri provider di credenziali forniti con Azure SDK, installare il @azure/identity pacchetto:

npm install @azure/identity

Sarà anche necessario registrare una nuova applicazione AAD e concedere l'accesso a Analisi del testo assegnando il "Cognitive Services User" ruolo all'entità servizio (nota: altri ruoli "Owner" come non concederanno le autorizzazioni necessarie, "Cognitive Services User" sarà sufficiente eseguire solo gli esempi e il codice di esempio).

Impostare i valori dell'ID client, dell'ID tenant e del segreto client dell'applicazione AAD come variabili di ambiente: AZURE_CLIENT_ID, AZURE_TENANT_IDAZURE_CLIENT_SECRET.

const { TextAnalyticsClient } = require("@azure/ai-text-analytics");
const { DefaultAzureCredential } = require("@azure/identity");

const client = new TextAnalyticsClient("<endpoint>", new DefaultAzureCredential());

Concetti chiave

TextAnalyticsClient

TextAnalyticsClientè l'interfaccia primaria per gli sviluppatori che usano la libreria client Analisi del testo. Esplorare i metodi in questo oggetto client per comprendere le diverse funzionalità del servizio Analisi del testo a cui è possibile accedere.

Input

Un documento rappresenta una singola unità di input da analizzare dai modelli predittivi nel servizio Analisi del testo. Operazioni su TextAnalyticsClient come eseguire una raccolta di input da analizzare come batch. I metodi di operazione hanno overload che consentono agli input di essere rappresentati come stringhe o come oggetti con metadati collegati.

Ad esempio, ogni documento può essere passato come stringa in una matrice, ad esempio.

const documents = [
  "I hated the movie. It was so slow!",
  "The movie made it into my top ten favorites.",
  "What a great movie!"
];

oppure, se si vuole passare un documento id per elemento o languagecountryHint/, può essere fornito come elenco di o DetectLanguageInput a seconda dell'operazione;TextDocumentInput

const textDocumentInputs = [
  { id: "1", language: "en", text: "I hated the movie. It was so slow!" },
  { id: "2", language: "en", text: "The movie made it into my top ten favorites." },
  { id: "3", language: "en", text: "What a great movie!" }
];

Vedere limitazioni del servizio per l'input, inclusi i limiti di lunghezza del documento, le dimensioni massime del batch e le codifiche di testo supportate.

Valore restituito

Il valore restituito corrispondente a un singolo documento è un risultato positivo o un oggetto errore. Ogni TextAnalyticsClient metodo restituisce una matrice eterogenea di risultati ed errori che corrispondono agli input per indice. Un input di testo e il relativo risultato avranno lo stesso indice nelle raccolte di input e risultato. La raccolta può anche includere informazioni sul batch di input e su come è stato elaborato nel statistics campo.

Un risultato, ad esempio AnalyzeSentimentResult, è il risultato di un'operazione di Analisi del testo, contenente una stima o stime su un singolo input di testo. Il tipo di risultato di un'operazione può anche includere facoltativamente informazioni sul documento di input e su come è stato elaborato.

L'oggetto error , , TextAnalyticsErrorResultindica che il servizio ha rilevato un errore durante l'elaborazione del documento e contiene informazioni sull'errore.

Gestione degli errori del documento

Nella raccolta restituita da un'operazione gli errori vengono distinti dalle risposte riuscite in base alla presenza della error proprietà, che contiene l'oggetto interno TextAnalyticsError se si è verificato un errore. Per gli oggetti risultato riusciti, questa proprietà è sempreundefined.

Ad esempio, per filtrare tutti gli errori, è possibile usare quanto segue filter:

const results = await client.analyzeSentiment(documents);
const onlySuccessful = results.filter((result) => result.error === undefined);

Nota: gli utenti di TypeScript possono trarre vantaggio da una migliore verifica dei tipi di oggetti risultato e errore se compilerOptions.strictNullChecks è impostato su true nella tsconfig.json configurazione. Ad esempio:

const [result] = await client.analyzeSentiment(["Hello world!"]);

if (result.error !== undefined) {
  // In this if block, TypeScript will be sure that the type of `result` is
  // `TextAnalyticsError` if compilerOptions.strictNullChecks is enabled in
  // the tsconfig.json

  console.log(result.error);
}

Questa funzionalità è stata introdotta in TypeScript 3.2, pertanto gli utenti di TypeScript 3.1 devono eseguire il cast dei valori dei risultati nella variante di esito positivo corrispondente come indicato di seguito:

const [result] = await client.detectLanguage(["Hello world!"]);

if (result.error === undefined) {
  const { primaryLanguage } = result as DetectLanguageSuccessResult;
}

Esempio

Analizzare il sentiment

Analizzare il sentiment del testo per determinare se è positivo, negativo, neutrale o misto, inclusa l'analisi del sentiment per frase e i punteggi di attendibilità.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "I did not like the restaurant. The food was too spicy.",
  "The restaurant was decorated beautifully. The atmosphere was unlike any other restaurant I've been to.",
  "The food was yummy. :)"
];

async function main() {
  const results = await client.analyzeSentiment(documents);

  for (const result of results) {
    if (result.error === undefined) {
      console.log("Overall sentiment:", result.sentiment);
      console.log("Scores:", result.confidenceScores);
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Per ottenere informazioni più granulari sulle opinioni relative agli aspetti di un prodotto/servizio, noto anche come Analisi del sentiment basato su aspetti nell'elaborazione del linguaggio naturale (NLP), vedere un esempio sull'analisi del sentiment con il data mining di opinione qui.

Riconoscere le entità

Riconoscere e classificare le entità nel testo come persone, luoghi, organizzazioni, date/ore, quantità, valute e così via.

language è facoltativo. Se non è specificato, verrà usato il modello inglese predefinito.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle.",
  "Jeff bought three dozen eggs because there was a 50% discount."
];

async function main() {
  const results = await client.recognizeEntities(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Recognized entities for input", result.id, "--");
      for (const entity of result.entities) {
        console.log(entity.text, ":", entity.category, "(Score:", entity.confidenceScore, ")");
      }
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Riconoscere le entità PII

Esiste un endpoint e un'operazione separati per riconoscere le informazioni personali (PII) nel testo, ad esempio numeri di sicurezza sociale, informazioni sul conto bancario, numeri di carta di credito e così via. L'utilizzo è molto simile al riconoscimento delle entità standard precedente:

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");
const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));
const documents = [
  "The employee's SSN is 555-55-5555.",
  "The employee's phone number is (555) 555-5555."
];
async function main() {
  const results = await client.recognizePiiEntities(documents, "en");
  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Recognized PII entities for input", result.id, "--");
      for (const entity of result.entities) {
        console.log(entity.text, ":", entity.category, "(Score:", entity.confidenceScore, ")");
      }
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}
main();

Riconoscere le entità collegate

Un'entità "Collegata" è una che esiste in un knowledge base (ad esempio Wikipedia). L'operazione recognizeLinkedEntities può disambiguare le entità determinando quale voce in un knowledge base probabilmente fanno riferimento (ad esempio, in un pezzo di testo, la parola "Mars" fa riferimento al pianeta o al dio romano della guerra). Le entità collegate contengono URL associati alla knowledge base che fornisce la definizione dell'entità.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "Easter Island, a Chilean territory, is a remote volcanic island in Polynesia.",
  "I use Azure Functions to develop my product."
];

async function main() {
  const results = await client.recognizeLinkedEntities(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Recognized linked entities for input", result.id, "--");
      for (const entity of result.entities) {
        console.log(entity.name, "(URL:", entity.url, ", Source:", entity.dataSource, ")");
        for (const match of entity.matches) {
          console.log(
            "  Occurrence:",
            '"' + match.text + '"',
            "(Score:",
            match.confidenceScore,
            ")"
          );
        }
      }
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Estrarre frasi chiave

L'estrazione di frasi chiave identifica i punti di discussione principali in un documento. Ad esempio, dato il testo di input "Il cibo era delizioso e il personale era meraviglioso", il servizio restituisce "cibo" e "personale meraviglioso".

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Redmond is a city in King County, Washington, United States, located 15 miles east of Seattle.",
  "I need to take my cat to the veterinarian.",
  "I will travel to South America in the summer."
];

async function main() {
  const results = await client.extractKeyPhrases(documents, "en");

  for (const result of results) {
    if (result.error === undefined) {
      console.log(" -- Extracted key phrases for input", result.id, "--");
      console.log(result.keyPhrases);
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Rilevare la lingua

Determinare la lingua di un pezzo di testo.

Il countryHint parametro è facoltativo, ma può aiutare il servizio a fornire un output corretto se il paese di origine è noto. Se specificato, deve essere impostato su un codice paese ISO-3166 Alfa-2 a due lettere, ad esempio "us" per il Stati Uniti o "jp" per il Giappone o sul valore "none". Se il parametro non viene specificato, verrà usato il modello predefinito "us" (Stati Uniti). Se non si conosce il paese di origine del documento, il parametro "none" deve essere usato e il servizio Analisi del testo applicherà un modello ottimizzato per un paese sconosciuto di origine.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "This is written in English.",
  "Il documento scritto in italiano.",
  "Dies ist in deutscher Sprache verfasst."
];

async function main() {
  const results = await client.detectLanguage(documents, "none");

  for (const result of results) {
    if (result.error === undefined) {
      const { primaryLanguage } = result;
      console.log(
        "Input #",
        result.id,
        "identified as",
        primaryLanguage.name,
        "( ISO6391:",
        primaryLanguage.iso6391Name,
        ", Score:",
        primaryLanguage.confidenceScore,
        ")"
      );
    } else {
      console.error("Encountered an error:", result.error);
    }
  }
}

main();

Analizzare le entità sanitarie

L'analisi sanitaria identifica le entità sanitarie. Ad esempio, dato il testo di input "Prescritto 100mg ibuprofen, preso due volte ogni giorno", il servizio restituisce "100mg" classificato come Dosaggio, "ibuprofen" come Nome farmaco e "due volte ogni giorno" come Frequenza.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Prescribed 100mg ibuprofen, taken twice daily.",
  "Patient does not suffer from high blood pressure."
];

async function main() {
  const poller = await client.beginAnalyzeHealthcareEntities(documents);
  const results = await poller.pollUntilDone();

  for await (const result of results) {
    console.log(`- Document ${result.id}`);
    if (!result.error) {
      console.log("\tRecognized Entities:");
      for (const entity of result.entities) {
        console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
      }
    } else console.error("\tError:", result.error);
  }
}

main();

Analizza azioni

Analizzare le azioni consente l'applicazione di più analisi (azioni denominate) contemporaneamente.

const { TextAnalyticsClient, AzureKeyCredential } = require("@azure/ai-text-analytics");

const client = new TextAnalyticsClient("<endpoint>", new AzureKeyCredential("<API key>"));

const documents = [
  "Microsoft was founded by Bill Gates and Paul Allen.",
  "The employee's SSN is 555-55-5555.",
  "Easter Island, a Chilean territory, is a remote volcanic island in Polynesia.",
  "I use Azure Functions to develop my product."
];

async function main() {
  const actions = {
    recognizeEntitiesActions: [{ modelVersion: "latest" }],
    recognizePiiEntitiesActions: [{ modelVersion: "latest" }],
    extractKeyPhrasesActions: [{ modelVersion: "latest" }]
  };
  const poller = await client.beginAnalyzeActions(documents, actions);
  const resultPages = await poller.pollUntilDone();
  for await (const page of resultPages) {
    const keyPhrasesAction = page.extractKeyPhrasesResults[0];
    if (!keyPhrasesAction.error) {
      for (const doc of keyPhrasesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tKey phrases:");
          for (const phrase of doc.keyPhrases) {
            console.log(`\t- ${phrase}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }

    const entitiesAction = page.recognizeEntitiesResults[0];
    if (!entitiesAction.error) {
      for (const doc of entitiesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tEntities:");
          for (const entity of doc.entities) {
            console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }

    const piiEntitiesAction = page.recognizePiiEntitiesResults[0];
    if (!piiEntitiesAction.error) {
      for (const doc of piiEntitiesAction.results) {
        console.log(`- Document ${doc.id}`);
        if (!doc.error) {
          console.log("\tPii Entities:");
          for (const entity of doc.entities) {
            console.log(`\t- Entity ${entity.text} of type ${entity.category}`);
          }
        } else {
          console.error("\tError:", doc.error);
        }
      }
    }
  }
}

main();

Risoluzione dei problemi

Registrazione

L'abilitazione della registrazione consente di individuare informazioni utili sugli errori. Per visualizzare un log di richieste e risposte HTTP, impostare la variabile di ambiente AZURE_LOG_LEVEL su info. In alternativa, la registrazione può essere abilitata in fase di esecuzione chiamando setLogLevel in @azure/logger:

import { setLogLevel } from "@azure/logger";

setLogLevel("info");

Per istruzioni più dettagliate su come abilitare i log, è possibile esaminare la documentazione del pacchetto @azure/logger.

Passaggi successivi

Per esempi dettagliati su come usare questa libreria, vedere la directory degli esempi .

Contributo

Per contribuire a questa libreria, leggere la guida ai contributi per altre informazioni su come compilare e testare il codice.

Impression