Azure Textanalys-klientbibliotek för JavaScript – version 5.1.0

Azure TextAnalytics är en molnbaserad tjänst som tillhandahåller avancerad bearbetning av naturligt språk över råtext och innehåller sex huvudfunktioner:

Observera: Denna SDK riktar sig till Azure Textanalys-tjänstens API-version 3.1.0.

  • Språkidentifiering
  • Attitydanalys
  • Extrahering av nyckelfraser
  • Igenkänning av namngiven enhet
  • Erkännande av personligt identifierbar information
  • Igenkänning av länkad entitet
  • Hälso- och sjukvårdsanalys
  • Stöd för flera åtgärder per dokument

Använd klientbiblioteket för att:

  • Identifiera vilken språkinmatningstext som skrivs i.
  • Fastställ vad kunderna tycker om ditt varumärke eller ämne genom att analysera råtext för att få ledtrådar om positiv eller negativ attityd.
  • Extrahera automatiskt nyckelfraser för att snabbt identifiera huvudpoängerna.
  • Identifiera och kategorisera entiteter i din text som personer, platser, organisationer, datum/tid, kvantiteter, procenttal, valutor, hälso- och sjukvårdsspecifika med mera.
  • Utför flera av ovanstående uppgifter samtidigt.

Nyckellänkar:

Komma igång

Miljöer som stöds för närvarande

Mer information finns i vår supportpolicy .

Förutsättningar

Om du använder Azure CLI ersätter <your-resource-group-name> du och <your-resource-name> med dina egna unika namn:

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

Installera @azure/ai-text-analytics-paketet

Installera Azure Textanalys-klientbiblioteket för JavaScript med npm:

npm install @azure/ai-text-analytics

Skapa och autentisera en TextAnalyticsClient

Om du vill skapa ett klientobjekt för att få åtkomst till Textanalys-API:et endpoint behöver du för din Textanalys resurs och en credential. Den Textanalys klienten kan använda antingen Azure Active Directory-autentiseringsuppgifter eller en API-nyckelautentiseringsuppgift för att autentisera.

Du hittar slutpunkten för textanalysresursen antingen i Azure-portalen eller med hjälp av Azure CLI-kodfragmentet nedan:

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

Använda en API-nyckel

Använd Azure-portalen för att bläddra till din Textanalys resurs och hämta en API-nyckel, eller använd Azure CLI-kodfragmentet nedan:

Observera: Ibland kallas API-nyckeln för en "prenumerationsnyckel" eller "prenumerations-API-nyckel".

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

När du har en API-nyckel och slutpunkt kan du använda klassen för att autentisera AzureKeyCredential klienten på följande sätt:

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

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

Använda en Azure Active Directory-autentiseringsuppgift

Nyckelautentisering med klient-API används i de flesta av exemplen, men du kan också autentisera med Azure Active Directory med hjälp av Azure Identity-biblioteket. Om du vill använda DefaultAzureCredential-providern som visas nedan eller andra leverantörer av autentiseringsuppgifter som medföljer Azure SDK installerar @azure/identity du paketet:

npm install @azure/identity

Du måste också registrera ett nytt AAD-program och bevilja åtkomst till Textanalys genom att tilldela "Cognitive Services User" rollen till tjänstens huvudnamn (obs! Andra roller som "Owner" inte beviljar nödvändiga behörigheter räcker bara "Cognitive Services User" för att köra exemplen och exempelkoden).

Ange värdena för klient-ID, klient-ID och klienthemlighet för AAD-programmet som miljövariabler: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET.

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

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

Viktiga begrepp

TextAnalyticsClient

TextAnalyticsClientär det primära gränssnittet för utvecklare som använder Textanalys-klientbiblioteket. Utforska metoderna i det här klientobjektet för att förstå de olika funktionerna i Textanalys-tjänsten som du kan komma åt.

Indata

Ett dokument representerar en enda indataenhet som ska analyseras av förutsägelsemodellerna i Textanalys-tjänsten. Åtgärder vid TextAnalyticsClient tar en samling indata som ska analyseras som en batch. Åtgärdsmetoderna har överlagringar som gör att indata kan representeras som strängar eller som objekt med kopplade metadata.

Varje dokument kan till exempel skickas som en sträng i en matris, t.ex.

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

eller, om du vill skicka in ett dokument id per objekt eller languagecountryHint/, kan de anges som en lista över TextDocumentInput eller DetectLanguageInput beroende på åtgärden;

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!" }
];

Se tjänstbegränsningar för indata, inklusive dokumentlängdsgränser, maximal batchstorlek och textkodningar som stöds.

Returvärde

Returvärdet som motsvarar ett enskilt dokument är antingen ett lyckat resultat eller ett felobjekt. Varje TextAnalyticsClient metod returnerar en heterogen matris med resultat och fel som motsvarar indata per index. En textinmatning och dess resultat har samma index i indata- och resultatsamlingarna. Samlingen kan även innehålla information om indatabatchen och hur den bearbetades i fältet statistics .

Ett resultat, till exempel AnalyzeSentimentResult, är resultatet av en Textanalys åtgärd som innehåller en förutsägelse eller förutsägelser om en enskild textinmatning. En åtgärds resultattyp kan också innehålla information om indatadokumentet och hur det bearbetades.

Felobjektet, TextAnalyticsErrorResult, anger att tjänsten påträffade ett fel när dokumentet bearbetas och innehåller information om felet.

Dokumentfelhantering

I samlingen som returneras av en åtgärd skiljer sig fel från lyckade svar genom förekomsten av error egenskapen , som innehåller det inre TextAnalyticsError objektet om ett fel påträffades. För lyckade resultatobjekt är den här egenskapen alltidundefined.

Om du till exempel vill filtrera bort alla fel kan du använda följande filter:

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

Obs! TypeScript-användare kan dra nytta av bättre typkontroll av resultat- och felobjekt om compilerOptions.strictNullChecks det är inställt true på i konfigurationen tsconfig.json . Exempel:

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);
}

Den här funktionen introducerades i TypeScript 3.2, så användare av TypeScript 3.1 måste omvandla resultatvärden till motsvarande framgångsvariant enligt följande:

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

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

Exempel

Analysera sentiment

Analysera sentiment för text för att avgöra om det är positivt, negativt, neutralt eller blandat, inklusive attitydanalys per mening och förtroendepoäng.

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();

Mer detaljerad information om åsikter som rör aspekter av en produkt/tjänst, även kallat Aspektbaserad attitydanalys i bearbetning av naturligt språk (NLP), finns i ett exempel på attitydanalys med åsiktsutvinning här.

Identifiera entiteter

Identifiera och kategorisera entiteter i text som personer, platser, organisationer, datum/tider, kvantiteter, valutor osv.

Parametern language är valfri. Om den inte anges används standardmodellen på engelska.

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();

Identifiera PII-entiteter

Det finns en separat slutpunkt och åtgärd för att identifiera personligt identifierbar information (PII) i text som personnummer, bankkontoinformation, kreditkortsnummer osv. Dess användning liknar standardentitetsigenkänningen ovan:

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();

Identifiera länkade entiteter

En "länkad" entitet är en som finns i en kunskapsbas (till exempel Wikipedia). Operationen recognizeLinkedEntities kan skilja entiteter genom att avgöra vilken post i en kunskapsbas de sannolikt refererar till (till exempel, i en text, hänvisar ordet "Mars" till planeten eller till den romerska krigsguden). Länkade entiteter innehåller associerade URL:er till kunskapsbas som tillhandahåller definitionen av entiteten.

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();

Extrahera nyckelfraser

Extrahering av nyckelfraser identifierar de viktigaste diskussionspunkterna i ett dokument. Till exempel med indatatexten "Maten var utsökt och det fanns underbar personal" returnerar tjänsten "mat" och "underbar personal".

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();

Identifiera språk

Fastställ språket för ett textstycke.

Parametern countryHint är valfri, men kan hjälpa tjänsten att tillhandahålla korrekta utdata om ursprungslandet är känt. Om det anges ska det vara inställt på en ISO-3166 Alpha-2-landskod med två bokstäver (till exempel "oss" för USA eller "jp" för Japan) eller till värdet "none". Om parametern inte anges används standardmodellen "us" (USA). Om du inte känner till dokumentets ursprungsland ska parametern "none" användas, och Textanalys-tjänsten använder en modell som är inställd på ett okänt ursprungsland.

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();

Analysera sjukvårdsentiteter

Hälsoanalys identifierar hälso- och sjukvårdsentiteter. Till exempel, med tanke på indatatexten "Prescribed 100mg ibuprofen, taken twice daily", returnerar tjänsten "100mg" kategoriserad som Dosering, "ibuprofen" som MedicationName och "två gånger dagligen" som Frekvens.

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();

Analysera åtgärder

Analysera åtgärder möjliggör tillämpning av flera analyser (namngivna åtgärder) samtidigt.

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();

Felsökning

Loggning

Aktivering av loggning kan hjälpa dig att hitta användbar information om fel. Om du vill se en logg över HTTP-begäranden och svar anger du AZURE_LOG_LEVEL miljövariabeln till info. Du kan också aktivera loggning vid körning genom att anropa setLogLevel i @azure/logger:

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

setLogLevel("info");

Mer detaljerade anvisningar om hur du aktiverar loggar finns i @azure-/loggningspaketdokumenten.

Nästa steg

Ta en titt på exempelkatalogen för detaljerade exempel på hur du använder det här biblioteket.

Bidra

Om du vill bidra till det här biblioteket kan du läsa bidragsguiden för att lära dig mer om hur du skapar och testar koden.

Visningar