Клиентская библиотека Azure Анализ текста для JavaScript версии 5.1.0

Azure TextAnalytics — это облачная служба, которая обеспечивает расширенную обработку текста на естественном языке и включает шесть основных функций:

Примечание: Этот пакет SDK предназначен для API службы Azure Анализ текста версии 3.1.0.

  • Распознавание языка
  • Анализ тональности
  • Извлечение ключевых фраз
  • Распознавание именованных сущностей
  • Распознавание личных сведений
  • Распознавание связанных сущностей
  • Анализ здравоохранения
  • Поддержка нескольких действий в документе

Используйте клиентские библиотеки, чтобы:

  • Определите, на каком языке написано текст на входном языке.
  • Определите, что клиенты думают о вашем бренде или теме, анализируя необработанный текст на предмет подсказок о положительных или отрицательных тональности.
  • Автоматическое извлечение ключевых фраз в тексте поможет быстро определить основные мысли.
  • Идентифицируйте и классифицируйте сущности в тексте как люди, места, организации, дата и время, количества, проценты, валюты, сферы здравоохранения и многое другое.
  • Выполнение нескольких из указанных выше задач одновременно.

Основные ссылки:

Начало работы

Поддерживаемые в настоящее время среды

Чтобы получить дополнительные сведения, ознакомьтесь с нашей политикой поддержки.

Предварительные требования

Если вы используете Azure CLI, замените <your-resource-group-name> и <your-resource-name> собственными уникальными именами:

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

Установите пакет @azure/ai-text-analytics.

Установите клиентскую библиотеку Azure Анализ текста для JavaScript с помощью npm:

npm install @azure/ai-text-analytics

Создание и проверка подлинности TextAnalyticsClient

Чтобы создать клиентский объект для доступа к API Анализ текста, вам потребуется endpoint ресурс Анализ текста и credential. Клиент Анализ текста может использовать для проверки подлинности учетные данные Azure Active Directory или ключ API.

Конечную точку для ресурса анализа текста можно найти на портале Azure или с помощью приведенного ниже фрагмента кода Azure CLI :

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

Использование ключа API

Используйте портал Azure, чтобы перейти к ресурсу Анализ текста и получить ключ API, или используйте приведенный ниже фрагмент кода Azure CLI:

Примечание: Иногда ключ API называется ключом подписки или ключом API подписки.

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

Получив ключ API и конечную точку AzureKeyCredential , можно использовать класс для проверки подлинности клиента следующим образом:

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

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

Использование учетных данных Azure Active Directory

Проверка подлинности с помощью ключа API клиента используется в большинстве примеров, но вы также можете пройти проверку подлинности в Azure Active Directory с помощью библиотеки удостоверений Azure. Чтобы использовать поставщика DefaultAzureCredential, показанного ниже, или других поставщиков учетных данных, предоставляемых пакетом SDK для Azure, установите @azure/identity пакет :

npm install @azure/identity

Вам также потребуется зарегистрировать новое приложение AAD и предоставить доступ к Анализ текста, назначив "Cognitive Services User" роль субъекту-службе (примечание. Другие роли, такие как"Owner", не предоставляют необходимых разрешений, достаточно только "Cognitive Services User" для выполнения примеров и примера кода).

Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: 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());

Основные понятия

TextAnalyticsClient

TextAnalyticsClient— это основной интерфейс для разработчиков, использующих клиентную библиотеку Анализ текста. Изучите методы этого клиентского объекта, чтобы понять различные функции службы Анализ текста, к которым можно получить доступ.

Входные данные

Документ представляет одну единицу входных данных, анализируемую прогнозными моделями в службе Анализ текста. Операции с TextAnalyticsClient принимают коллекцию входных данных для анализа в виде пакета. Методы операций имеют перегрузки, позволяющие представить входные данные в виде строк или объектов с вложенными метаданными.

Например, каждый документ можно передать в виде строки в массиве, например.

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

или, если вы хотите передать документ id для каждого элемента или languagecountryHint/, они могут быть предоставлены в виде списка TextDocumentInput или DetectLanguageInput в зависимости от операции;

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

Ознакомьтесь с ограничениями службы для входных данных, включая ограничения на длину документа, максимальный размер пакета и поддерживаемые кодировки текста.

Возвращаемое значение

Возвращаемое значение, соответствующее одному документу, является либо успешным результатом, либо объектом ошибки. Каждый TextAnalyticsClient метод возвращает разнородный массив результатов и ошибок, которые соответствуют входным данным по индексу. Текстовый ввод и его результат будут иметь одинаковый индекс во входных и результирующих коллекциях. Кроме того, при необходимости коллекция может содержать сведения о входном пакете и способах его обработки в statistics поле .

Результатом, таким как AnalyzeSentimentResult, является результатом операции Анализ текста, содержащей прогноз или прогнозы об одном входном тексте. Тип результата операции также может при необходимости включать сведения о входном документе и способах его обработки.

Объект error указывает, TextAnalyticsErrorResultчто служба обнаружила ошибку при обработке документа и содержит сведения об ошибке.

Обработка ошибок документа

В коллекции, возвращаемой операцией, ошибки отличаются от успешных ответов по наличию error свойства , которое содержит внутренний TextAnalyticsError объект при обнаружении ошибки. Для объектов успешных результатов это свойство всегдаundefined имеет значение .

Например, чтобы отфильтровать все ошибки, можно использовать следующую команду filter:

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

Примечание. Пользователи TypeScript могут воспользоваться преимуществами более эффективной проверки типов объектов результатов и ошибок, если compilerOptions.strictNullChecks в конфигурации tsconfig.json задано значение true . Пример:

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

Эта возможность появилась в TypeScript 3.2, поэтому пользователи TypeScript 3.1 должны привести значения результатов к соответствующему варианту успешного выполнения следующим образом:

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

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

Примеры

Анализ тональности

Анализ тональности текста, чтобы определить, является ли он положительным, отрицательным, нейтральным или смешанным, включая анализ тональности по предложениям и оценки достоверности.

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

Чтобы получить более подробные сведения о мнениях, связанных с аспектами продукта или службы, также известного как анализ тональности на основе аспектов в обработке естественного языка (NLP), см. пример анализа тональности с интеллектуальным анализом мнений здесь.

Распознавание сущностей

Распознавать и классифицировать сущности в тексте как люди, места, организации, даты и время, количества, валюты и т. д.

Параметр language не обязателен. Если он не указан, будет использоваться модель английского языка по умолчанию.

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

Распознавание сущностей личных сведений

Существует отдельная конечная точка и операция для распознавания личных сведений в тексте, например номера социального страхования, сведения о банковском счете, номера кредитных карт и т. д. Его использование очень похоже на стандартное распознавание сущностей выше:

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

Распознавание связанных сущностей

Сущность "Связанная" — это сущность, которая существует в база знаний (например, Википедия). Операция recognizeLinkedEntities может дискредитировать сущности, определяя, какая запись в база знаний они, скорее всего, ссылаются на (например, в фрагменте текста слово "Марс" относится к планете или к римскому богу войны). Связанные сущности содержат связанные URL-адреса база знаний, предоставляющей определение сущности.

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

Извлечение ключевых фраз

Извлечение ключевых фраз определяет основные тезисы в документе. Например, для данного входного текста "Еда была вкусной и были замечательные сотрудники", служба вернет "еда" и "замечательные сотрудники".

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

Определение языка

Определите язык фрагмента текста.

Параметр countryHint является необязательным, но может помочь службе в предоставлении правильных выходных данных, если известна страна происхождения. Если он указан, ему следует задать двухбуквенный код страны ISO-3166 Alpha-2 (например, "us" для США или "jp" для Японии) или значение "none". Если параметр не указан, будет использоваться модель по умолчанию "us" (США). Если вы не знаете страну происхождения документа, следует использовать параметр "none" , а служба Анализ текста будет применять модель, настроенную для неизвестной страны происхождения.

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

Анализ сущностей здравоохранения

Анализ здравоохранения определяет сущности здравоохранения. Например, при вводе текста "Предписано 100 мг ибупрофена, принято два раза в день", служба возвращает "100 мг", классифицируется как доза, "ибупрофен" как Имя лекарства, и "два раза в день" в качестве частоты.

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

Действия анализа

Действия анализа позволяют одновременно применять несколько анализов (именованных действий).

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

Устранение неполадок

Ведение журнала

Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL значение info. Кроме того, ведение журнала можно включить во время выполнения, вызвав setLogLevel в @azure/logger:

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

setLogLevel("info");

Более подробные инструкции по включению журналов см. в документации по пакету @azure и средству ведения журнала.

Дальнейшие действия

Подробные примеры использования этой библиотеки см. в каталоге примеров .

Участие

Если вы хотите вносить изменения в эту библиотеку, ознакомьтесь с руководством по внесению изменений, в котором содержатся сведения о создании и тестировании кода.

Просмотры