Клиентская библиотека Аналитики документов Azure ИИ для JavaScript версии 5.0.0
Azure AI Document Intelligence — это облачная служба, которая использует машинное обучение для анализа текста и структурированных данных из документов. Он включает следующие main функции:
- Макет — извлекает из документов текст, табличные структуры и выделенные знаки, а также координаты ограничивающей области.
- Документ — анализ сущностей, пар "ключ-значение", таблиц и меток выбора из документов с помощью общей предварительно созданной модели документов.
- Чтение — чтение сведений о текстовых элементах, таких как слова страницы и строки, а также сведения о языке текста.
- Предварительно созданная . Анализ данных из определенных типов общих документов (таких как квитанции, счета, визитные карточки или документы, удостоверяющие личность) с помощью предварительно созданных моделей.
- Пользовательский — создание пользовательских моделей для извлечения текста, значений полей, меток выделения и табличных данных из документов. Пользовательские модели создаются на основе собственных данных, поэтому они адаптированы к вашим документам.
- Классификаторы — создание пользовательских классификаторов для классификации документов по предопределенным классам.
Исходный код | Пакет (NPM) | Справочная документация по API | Документация по продукту | Примеры
Примечание
Служба аналитики документов ранее называлась "Azure Распознаватель документов". Эти службы являются одними и теми же, а @azure/ai-form-recognizer
пакет для JavaScript — это пакет Azure SDK для службы Аналитики документов Azure ИИ. На момент написания статьи выполняется переименование Azure Распознаватель документов в Azure AI Document Intelligence, поэтому в некоторых случаях можно использовать взаимозаменяемые Распознаватель документов и аналитику документов.
Установите пакет @azure/ai-form-recognizer
.
Установите клиентскую библиотеку Аналитики документов Azure для JavaScript с помощью npm
:
npm install @azure/ai-form-recognizer
Начало работы
const { DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
const { DefaultAzureCredential } = require("@azure/identity");
const fs = require("fs");
const credential = new DefaultAzureCredential();
const client = new DocumentAnalysisClient(
"https://<resource name>.cognitiveservices.azure.com",
credential
);
// Document Intelligence supports many different types of files.
const file = fs.createReadStream("path/to/file.jpg");
const poller = await client.beginAnalyzeDocument("<model ID>", file);
const { pages, tables, styles, keyValuePairs, entities, documents } = await poller.pollUntilDone();
Поддерживаемые в настоящее время среды
- LTS версии Node.js
- Последние версии Safari, Chrome, Edge и Firefox.
Чтобы получить дополнительные сведения, ознакомьтесь с нашей политикой поддержки.
Предварительные требования
- Подписка Azure
- Ресурс Cognitive Services или Распознаватель документов. Если вам нужно создать ресурс, можно использовать портал Azure или Azure CLI.
Создание ресурса Распознавателя документов
Примечание. На момент написания статьи портал Azure по-прежнему называется ресурсом Распознаватель документов. В будущем этот ресурс может быть обновлен до ресурса "Аналитика документов". Сейчас в следующей документации используется имя "Распознаватель документов".
Аналитика документов поддерживает доступ как с несколькими службами, так и с одной службой. Создайте ресурс Cognitive Services, если планируете осуществлять доступ к нескольким службам с помощью одной конечной точки или ключа. Для доступа только к Распознавателю документов создайте ресурс Распознавателя документов.
Вы можете создать ресурс с помощью
Вариант 1.Портал Azure
Вариант 2:Azure CLI.
Ниже приведен пример создания ресурса Распознаватель документов с помощью интерфейса командной строки:
# Create a new resource group to hold the Form Recognizer resource -
# if using an existing resource group, skip this step
az group create --name my-resource-group --location westus2
Если вы используете Azure CLI, замените <your-resource-group-name>
и <your-resource-name>
собственными уникальными именами:
az cognitiveservices account create --kind FormRecognizer --resource-group <your-resource-group-name> --name <your-resource-name> --sku <your-sku-name> --location <your-location>
Создание и проверка подлинности клиента
Чтобы взаимодействовать со службой аналитики документов, необходимо выбрать DocumentAnalysisClient
или DocumentModelAdministrationClient
, а затем создать экземпляр этого типа. В следующих примерах мы будем использовать DocumentAnalysisClient
. Чтобы создать экземпляр клиента для доступа к API аналитики документов, вам потребуется endpoint
ресурс Распознаватель документов и credential
. Клиенты могут использовать либо AzureKeyCredential
с ключом API ресурса, либо TokenCredential
, использующий Azure Active Directory RBAC для авторизации клиента.
Конечную точку для ресурса Распознаватель документов можно найти на портале Azure или с помощью приведенного ниже фрагмента кода Azure CLI:
az cognitiveservices account show --name <your-resource-name> --resource-group <your-resource-group-name> --query "properties.endpoint"
Использование ключа API
Используйте портал Azure, чтобы перейти к ресурсу Распознаватель документов и получить ключ API, или используйте приведенный ниже фрагмент кода Azure CLI:
Примечание: Иногда ключ API называется ключом подписки или ключом API подписки.
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Получив ключ API и конечную точку, их можно использовать следующим образом:
const { DocumentAnalysisClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
const client = new DocumentAnalysisClient("<endpoint>", new AzureKeyCredential("<API key>"));
Использование Azure Active Directory
Авторизация ключа API используется в большинстве примеров, но вы также можете проверить подлинность клиента в Azure Active Directory с помощью библиотеки удостоверений Azure. Чтобы использовать поставщика DefaultAzureCredential, показанного ниже, или других поставщиков учетных данных, предоставляемых в пакете Azure SDK, установите @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 { DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
const { DefaultAzureCredential } = require("@azure/identity");
const client = new DocumentAnalysisClient("<endpoint>", new DefaultAzureCredential());
Основные понятия
DocumentAnalysisClient
DocumentAnalysisClient
предоставляет операции для анализа входных документов с помощью пользовательских и предварительно созданных моделей. Он состоит из трех методов:
beginAnalyzeDocument
, который извлекает данные из потока входных файлов документа с помощью пользовательской или предварительно созданной модели, заданной идентификатором модели. Сведения о предварительно созданных моделях, поддерживаемых во всех ресурсах, и их идентификаторах и выходных данных см. в документации службы по моделям.beginAnalyzeDocumentFromUrl
, который выполняет ту же функцию, чтоbeginAnalyzeDocument
и , но отправляет общедоступный URL-адрес файла вместо файлового потока.
DocumentModelAdministrationClient
DocumentModelAdministrationClient
предоставляет операции для управления (создание, чтение, перечисление и удаление) моделей в ресурсе:
beginBuildDocumentModel
запускает операцию для создания новой модели документов из собственного набора данных для обучения. Созданная модель может извлекать поля в соответствии с пользовательской схемой. Ожидается, что обучающие данные будут расположены в контейнере службы хранилища Azure и организованы в соответствии с определенным соглашением. Более подробное описание применения меток к набору данных для обучения см. в документации службы по созданию обучающего набора данных.beginComposeDocumentModel
запускает операцию для создания нескольких моделей в одну модель. При использовании для пользовательского распознавания форм новая составная модель сначала выполняет классификацию входных документов, чтобы определить, какие из ее подмоделей наиболее подходят.beginCopyModelTo
запускает операцию копирования пользовательской модели из одного ресурса в другой (или даже в тот же ресурс). Для этого требуетсяCopyAuthorization
из целевого ресурса, который можно создать с помощьюgetCopyAuthorization
метода .getResourceDetails
извлекает сведения об ограничениях ресурса, например о количестве пользовательских моделей и максимальном количестве моделей, которые может поддерживать ресурс.getDocumentModel
,listDocumentModels
иdeleteDocumentModel
позволяют управлять моделями в ресурсе.getOperation
иlistOperations
позволяют просматривать состояние операций создания модели, даже тех операций, которые выполняются или завершились сбоем. Операции хранятся в течение 24 часов.
Обратите внимание, что модели также можно создавать с помощью графического пользовательского интерфейса службы аналитики документов: Document Intelligence Studio.
Примеры фрагментов кода, иллюстрирующие использование DocumentModelAdministrationClient
для создания модели, можно найти ниже в разделе примеров "Создание модели".
Длительные операции
Длительные операции — это операции, состоящие из первоначального запроса, отправленного службе для запуска операции, за которым следует опрос результата через определенный интервал времени, чтобы определить, завершена ли операция и была ли она успешно завершена. В конечном счете, LRO либо завершится ошибкой, либо даст результат.
В Azure AI Document Intelligence операции, которые создают модели (включая модели копирования и создания), а также операции анализа и извлечения данных являются LR. Клиенты пакета SDK предоставляют асинхронные begin<operation-name>
методы, возвращающие Promise<PollerLike>
объекты. Объект PollerLike
представляет операцию, которая выполняется асинхронно в инфраструктуре службы, и программа может ожидать завершения операции путем вызова и ожидания pollUntilDone
метода в средстве опроса, возвращенном из begin<operation-name>
метода . В следующем разделе приведены примеры фрагментов кода, иллюстрирующие использование длительных операций.
Примеры
В следующем разделе представлено несколько фрагментов кода JavaScript, иллюстрирующих распространенные шаблоны, используемые в клиентских библиотеках аналитики документов.
- Анализ документа с идентификатором модели
- Использование предварительно созданных моделей документов
- Использование предварительно созданного макета
- Использование предварительно созданного документа
- Использование предварительно созданного "read"
- Classifying Iris part 2: Build a model (Часть 2. Классификация цветков ириса: создание модели)
- Модели (управление)
Анализ документа с идентификатором модели
Метод beginAnalyzeDocument
может извлекать поля и табличные данные из документов. Для анализа может использоваться либо пользовательская модель, обученная на собственных данных, либо предварительно созданная модель, предоставляемая службой (см. раздел Использование предварительно созданных моделей ниже). Пользовательская модель настраивается для ваших собственных документов, поэтому ее следует использовать только с документами той же структуры, что и один из типов документов в модели (их может быть несколько, например, в составной модели).
const { DocumentAnalysisClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
const fs = require("fs");
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const modelId = "<model id>";
const path = "<path to a document>";
const readStream = fs.createReadStream(path);
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey));
const poller = await client.beginAnalyzeDocument(modelId, readStream, {
onProgress: ({ status }) => {
console.log(`status: ${status}`);
},
});
// There are more fields than just these three
const { documents, pages, tables } = await poller.pollUntilDone();
console.log("Documents:");
for (const document of documents || []) {
console.log(`Type: ${document.docType}`);
console.log("Fields:");
for (const [name, field] of Object.entries(document.fields)) {
console.log(
`Field ${name} has value '${field.value}' with a confidence score of ${field.confidence}`
);
}
}
console.log("Pages:");
for (const page of pages || []) {
console.log(`Page number: ${page.pageNumber} (${page.width}x${page.height} ${page.unit})`);
}
console.log("Tables:");
for (const table of tables || []) {
console.log(`- Table (${table.columnCount}x${table.rowCount})`);
for (const cell of table.cells) {
console.log(` - cell (${cell.rowIndex},${cell.columnIndex}) "${cell.content}"`);
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Анализ документа по URL-адресу
Вместо предоставления удобочитаемого потока можно указать общедоступный URL-адрес с помощью beginAnalyzeDocumentFromUrl
метода . "Общедоступный" означает, что источники URL-адресов должны быть доступны из инфраструктуры службы (другими словами, URL-адрес частной интрасети или URL-адреса, использующие секреты на основе заголовков или сертификатов, не будут работать, так как служба аналитики документов должна иметь доступ к URL-адресу). Однако сам URL-адрес может кодировать секрет, например URL-адрес BLOB-объекта службы хранилища Azure, который содержит маркер SAS в параметрах запроса.
Использование предварительно созданных моделей документов
Метод beginAnalyzeDocument
также поддерживает извлечение полей из некоторых типов общих документов, таких как квитанции, счета, визитные карточки, удостоверения личности и т. д., с помощью предварительно созданных моделей, предоставляемых службой аналитики документов. Предварительно созданные модели могут предоставляться в виде строк идентификатора модели (так же, как и пользовательские модели документов ( см. раздел о других предварительно созданных моделях ниже) или с помощью DocumentModel
объекта . При использовании DocumentModel
пакет SDK аналитики документов для JavaScript предоставляет гораздо более надежный тип TypeScript для извлеченных документов на основе схемы модели, и он будет преобразован для использования соглашений об именовании JavaScript.
Примеры DocumentModel
объектов для текущей версии API службы (2022-08-31
) можно найти в каталоге prebuilt
примеров. В следующем примере мы будем использовать PrebuiltReceiptModel
из файла [prebuilt-receipt.ts
] в этом каталоге.
Так как преимущество DocumentModel
main анализа на основе является более строгим ограничением типов TypeScript, следующий пример написан на TypeScript с использованием синтаксиса модуля ECMAScript:
import { DocumentAnalysisClient, AzureKeyCredential } from "@azure/ai-form-recognizer";
// Copy the file from the above-linked sample directory so that it can be imported in this module
import { PrebuiltReceiptModel } from "./prebuilt/prebuilt-receipt";
import fs from "fs";
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const path = "<path to your receipt document>"; // pdf/jpeg/png/tiff formats
const readStream = fs.createReadStream(path);
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey));
// The PrebuiltReceiptModel `DocumentModel` instance encodes both the model ID and a stronger return type for the operation
const poller = await client.beginAnalyzeDocument(PrebuiltReceiptModel, readStream, {
onProgress: ({ status }) => {
console.log(`status: ${status}`);
},
});
const {
documents: [receiptDocument],
} = await poller.pollUntilDone();
// The fields of the document constitute the extracted receipt data.
const receipt = receiptDocument.fields;
if (receipt === undefined) {
throw new Error("Expected at least one receipt in analysis result.");
}
console.log(`Receipt data (${receiptDocument.docType})`);
console.log(" Merchant Name:", receipt.merchantName?.value);
// The items of the receipt are an example of a `DocumentArrayValue`
if (receipt.items !== undefined) {
console.log("Items:");
for (const { properties: item } of receipt.items.values) {
console.log("- Description:", item.description?.value);
console.log(" Total Price:", item.totalPrice?.value);
}
}
console.log(" Total:", receipt.total?.value);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Кроме того, как упоминалось выше, вместо использования PrebuiltReceiptModel
, который создает более строгий тип возвращаемого значения, можно использовать идентификатор модели предварительно созданной квитанции ("предварительно созданная квитанция"), но поля документа не будут строго типизированы в TypeScript, и имена полей, как правило, будут находиться в "PascalCase" вместо "camelCase".
Другие предварительно созданные модели
Вы не ограничены квитанциями! На выбор можно выбрать несколько готовых моделей с дополнительными сведениями. Каждая предварительно созданная модель имеет собственный набор поддерживаемых полей:
- Квитанции с использованием
PrebuiltReceiptModel
(как описано выше) или предварительно созданного идентификатора модели квитанции"prebuilt-receipt"
. - Визитные карточки с использованием
PrebuiltBusinessCardModel
или идентификатора"prebuilt-businessCard"
модели . - Счета с использованием
PrebuiltInvoiceModel
или идентификатора"prebuilt-invoice"
модели . - Документы удостоверений (например, водительские права и паспорта) с использованием
PrebuiltIdDocumentModel
или идентификатора"prebuilt-idDocument"
модели . - Налоговые формы W2 (США), используя
PrebuiltTaxUsW2Model
или идентификатор"prebuilt-tax.us.w2"
модели . - Карты медицинского страхования (США), использующие [
PrebuiltHealthInsuranceCardUsModel
][samples-prebuilt-healthinsurancecard.us] или идентификатор"prebuilt-healthInsuranceCard.us"
модели .
Каждая из указанных выше предварительно созданных documents
моделей создает (извлеченные экземпляры схемы полей модели). Существуют также три предварительно созданные модели, которые не имеют схем полей и, следовательно, не создают documents
. К ним относятся:
- Предварительно созданная модель макета (см . раздел Использование предварительно созданного макета ниже), которая извлекает сведения об основных элементах макета (OCR), таких как страницы и таблицы.
- Предварительно созданная модель общего документа (см . раздел Использование предварительно созданного документа ниже), которая добавляет пары "ключ-значение" (направленные связи между элементами страницы, например помеченными элементами) к сведениям, созданным моделью макета.
- Предварительно созданная модель чтения (см . раздел Использование предварительно созданной модели чтения ниже), которая извлекает только текстовые элементы, такие как слова и строки страницы, а также сведения о языке документа.
Сведения о полях всех этих моделей см. в документации службы по доступным предварительно созданным моделям.
Доступ к полям всех предварительно созданных моделей также можно получить программным способом с помощью getDocumentModel
метода (по идентификаторам моделей) и DocumentModelAdministrationClient
проверки docTypes
поля в результате.
Использование предварительно созданного макета
Модель "prebuilt-layout"
извлекает только основные элементы документа, такие как страницы (состоящие из текстовых слов или строк и меток выделения), таблицы и стили визуального текста, а также их ограничивающие области и области в текстовом содержимом входных документов. Мы предоставляем строго типизированный DocumentModel
экземпляр с именем PrebuiltLayoutModel
, который вызывает эту модель, или, как всегда, ее идентификатор "prebuilt-layout"
модели можно использовать напрямую.
Так как преимущество DocumentModel
main анализа на основе является более строгим ограничением типов TypeScript, следующий пример написан на TypeScript с использованием синтаксиса модуля ECMAScript:
import { DocumentAnalysisClient, AzureKeyCredential } from "@azure/ai-form-recognizer";
// Copy the above-linked `DocumentModel` file so that it may be imported in this module.
import { PrebuiltLayoutModel } from "./prebuilt/prebuilt-layout";
import fs from "fs";
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const path = "<path to a document>"; // pdf/jpeg/png/tiff formats
const readStream = fs.createReadStream(path);
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey));
const poller = await client.beginAnalyzeDocument(PrebuiltLayoutModel, readStream);
const { pages, tables } = await poller.pollUntilDone();
for (const page of pages || []) {
console.log(`- Page ${page.pageNumber}: (${page.width}x${page.height} ${page.unit})`);
}
for (const table of tables || []) {
console.log(`- Table (${table.columnCount}x${table.rowCount})`);
for (const cell of table.cells) {
console.log(` cell [${cell.rowIndex},${cell.columnIndex}] "${cell.content}"`);
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Использование предварительно созданного документа
Модель "prebuilt-document"
извлекает сведения о парах "ключ-значение" (направленные связи между элементами страницы, например поля с метками) в дополнение к свойствам, созданным методом извлечения макета. Эта предварительно созданная (общая) модель документов предоставляет функциональные возможности, аналогичные пользовательским моделям, обученным без сведений о метках в предыдущих итерациях службы аналитики документов, но теперь предоставляется в виде предварительно созданной модели, которая работает с широким спектром документов. Мы предоставляем строго типизированный DocumentModel
экземпляр с именем PrebuiltDocumentModel
, который вызывает эту модель, или, как всегда, ее идентификатор "prebuilt-document"
модели можно использовать напрямую.
Так как преимущество DocumentModel
main анализа на основе является более строгим ограничением типов TypeScript, следующий пример написан на TypeScript с использованием синтаксиса модуля ECMAScript:
import { DocumentAnalysisClient, AzureKeyCredential } from "@azure/ai-form-recognizer";
// Copy the above-linked `DocumentModel` file so that it may be imported in this module.
import { PrebuiltDocumentModel } from "./prebuilt/prebuilt-document";
import fs from "fs";
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const path = "<path to a document>"; // pdf/jpeg/png/tiff formats
const readStream = fs.createReadStream(path);
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey));
const poller = await client.beginAnalyzeDocument(PrebuiltDocumentModel, readStream);
// `pages`, `tables` and `styles` are also available as in the "layout" example above, but for the sake of this
// example we won't show them here.
const { keyValuePairs } = await poller.pollUntilDone();
if (!keyValuePairs || keyValuePairs.length <= 0) {
console.log("No key-value pairs were extracted from the document.");
} else {
console.log("Key-Value Pairs:");
for (const { key, value, confidence } of keyValuePairs) {
console.log("- Key :", `"${key.content}"`);
console.log(" Value:", `"${value?.content ?? "<undefined>"}" (${confidence})`);
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Использование предварительно созданного "read"
Модель "prebuilt-read"
извлекает текстовую информацию в документе, например слова и абзацы, и анализирует язык и стиль письма (например, рукописный и набор типов) этого текста. Мы предоставляем строго типизированный DocumentModel
экземпляр с именем PrebuiltReadModel
, который вызывает эту модель, или, как всегда, ее идентификатор "prebuilt-read"
модели можно использовать напрямую.
Так как преимущество DocumentModel
main анализа на основе является более строгим ограничением типов TypeScript, следующий пример написан на TypeScript с использованием синтаксиса модуля ECMAScript:
import { DocumentAnalysisClient, AzureKeyCredential } from "@azure/ai-form-recognizer";
// Copy the above-linked `DocumentModel` file so that it may be imported in this module.
import { PrebuiltReadModel } from "./prebuilt/prebuilt-read";
// See the samples directory for a definition of this helper function.
import { getTextOfSpans } from "./utils";
import fs from "fs";
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const path = "<path to a document>"; // pdf/jpeg/png/tiff formats
const readStream = fs.createReadStream(path);
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(apiKey));
const poller = await client.beginAnalyzeDocument(PrebuiltReadModel, readStream);
// The "prebuilt-read" model (`beginReadDocument` method) only extracts information about the textual content of the
// document, such as page text elements, text styles, and information about the language of the text.
const { content, pages, languages } = await poller.pollUntilDone();
if (!pages || pages.length <= 0) {
console.log("No pages were extracted from the document.");
} else {
console.log("Pages:");
for (const page of pages) {
console.log("- Page", page.pageNumber, `(unit: ${page.unit})`);
console.log(` ${page.width}x${page.height}, angle: ${page.angle}`);
console.log(
` ${page.lines && page.lines.length} lines, ${page.words && page.words.length} words`
);
if (page.lines && page.lines.length > 0) {
console.log(" Lines:");
for (const line of page.lines) {
console.log(` - "${line.content}"`);
}
}
}
}
if (!languages || languages.length <= 0) {
console.log("No language spans were extracted from the document.");
} else {
console.log("Languages:");
for (const languageEntry of languages) {
console.log(
`- Found language: ${languageEntry.locale} (confidence: ${languageEntry.confidence})`
);
for (const text of getTextOfSpans(content, languageEntry.spans)) {
const escapedText = text.replace(/\r?\n/g, "\\n").replace(/"/g, '\\"');
console.log(` - "${escapedText}"`);
}
}
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Классификация документа
Служба аналитики документов поддерживает пользовательские классификаторы документов, которые могут классифицировать документы в набор предопределенных категорий на основе обучающего набора данных. Документы можно классифицировать с помощью пользовательского классификатора с beginClassifyDocument
помощью метода DocumentAnalysisClient
. Как и beginAnalyzeDocument
выше, этот метод принимает файл или поток, содержащий документ для классификации, и имеет beginClassifyDocumentFromUrl
аналог, который принимает общедоступный URL-адрес документа.
В следующем примере показано, как классифицировать документ с помощью пользовательского классификатора:
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
async function main() {
const endpoint = "<endpoint>";
const credential = new AzureKeyCredential("<api key>");
const documentUrl =
"https://raw.githubusercontent.com/Azure/azure-sdk-for-js/main/sdk/formrecognizer/ai-form-recognizer/assets/invoice/Invoice_1.pdf";
const client = new DocumentAnalysisClient(endpoint, credential);
const poller = await client.beginClassifyDocumentFromUrl("<classifier id>", documentUrl);
const result = await poller.pollUntilDone();
if (result.documents === undefined || result.documents.length === 0) {
throw new Error("Failed to extract any documents.");
}
for (const document of result.documents) {
console.log(
`Extracted a document with type '${document.docType}' on page ${document.boundingRegions?.[0].pageNumber} (confidence: ${document.confidence})`
);
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Сведения о обучении пользовательского классификатора см. в разделе об обучении классификаторов в конце следующего раздела.
Создание модели
Пакет SDK также поддерживает создание моделей DocumentModelAdministrationClient
с помощью класса . При построении модели из помеченных обучающих данных создается новая модель, обученная на основе ваших собственных документов, и результирующая модель сможет распознавать значения из структур этих документов. Операция создания модели принимает URL-адрес в кодировке SAS для контейнера больших двоичных объектов службы хранилища Azure, в котором хранятся обучающие документы. Инфраструктура службы аналитики документов считывает файлы в контейнере и создает модель на основе их содержимого. Дополнительные сведения о создании и структуре контейнера обучающих данных см. в документации по созданию модели в службе аналитики документов.
Хотя мы предоставляем эти методы для программного создания моделей, команда службы аналитики документов создала интерактивное веб-приложение Document Intelligence Studio, которое позволяет создавать модели в Интернете и управлять ими.
Например, следующая программа создает пользовательскую модель документов, используя URL-адрес в кодировке SAS для существующего контейнера службы хранилища Azure:
const {
DocumentModelAdministrationClient,
AzureKeyCredential,
} = require("@azure/ai-form-recognizer");
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const containerSasUrl = "<SAS url to the blob container storing training documents>";
const client = new DocumentModelAdministrationClient(endpoint, new AzureKeyCredential(apiKey));
// You must provide the model ID. It can be any text that does not start with "prebuilt-".
// For example, you could provide a randomly generated GUID using the "uuid" package.
// The second parameter is the SAS-encoded URL to an Azure Storage container with the training documents.
// The third parameter is the build mode: one of "template" (the only mode prior to 4.0.0-beta.3) or "neural".
// See https://aka.ms/azsdk/formrecognizer/buildmode for more information about build modes.
const poller = await client.beginBuildDocumentModel("<model ID>", containerSasUrl, "template", {
// The model description is optional and can be any text.
description: "This is my new model!",
onProgress: ({ status }) => {
console.log(`operation status: ${status}`);
},
});
const model = await poller.pollUntilDone();
console.log("Model ID:", model.modelId);
console.log("Description:", model.description);
console.log("Created:", model.createdOn);
// A model may contain several document types, which describe the possible object structures of fields extracted using
// this model
console.log("Document Types:");
for (const [docType, { description, fieldSchema: schema }] of Object.entries(
model.docTypes ?? {}
)) {
console.log(`- Name: "${docType}"`);
console.log(` Description: "${description}"`);
// For simplicity, this example will only show top-level field names
console.log(" Fields:");
for (const [fieldName, fieldSchema] of Object.entries(schema)) {
console.log(` - "${fieldName}" (${fieldSchema.type})`);
console.log(` ${fieldSchema.description ?? "<no description>"}`);
}
}
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Пользовательские классификаторы создаются аналогичным образом с помощью метода , beginBuildDocumentClassifier
а не beginBuildDocumentModel
. Дополнительные сведения о создании пользовательского классификатора см. в примере классификатора сборки , так как входные обучающие данные предоставляются в немного другом формате. Сведения о создании обучаемого набора данных для пользовательского классификатора см. в документации по службе аналитики документов.
Модели (управление)
DocumentModelAdministrationClient
также предоставляет несколько методов доступа к моделям и их перечисления. В следующем примере показано, как выполнить итерацию моделей в ресурсе (это будут как пользовательские модели в ресурсе, так и предварительно созданные модели, общие для всех ресурсов), получить модель по идентификатору и удалить модель.
const {
DocumentModelAdministrationClient,
AzureKeyCredential,
} = require("@azure/ai-form-recognizer");
async function main() {
const endpoint = "<cognitive services endpoint>";
const apiKey = "<api key>";
const client = new DocumentModelAdministrationClient(endpoint, new AzureKeyCredential(apiKey));
// Produces an async iterable that supports paging (`PagedAsyncIterableIterator`). The `listDocumentModels` method will only
// iterate over model summaries, which do not include detailed schema information. Schema information is only returned
// from `getDocumentModel` as part of the full model information.
const models = client.listDocumentModels();
let i = 1;
for await (const summary of models) {
console.log(`Model ${i++}:`, summary);
}
// The iterable is paged, and the application can control the flow of paging if needed
i = 1;
for await (const page of client.listDocumentModels().byPage()) {
for (const summary of page) {
console.log(`Model ${i++}`, summary);
}
}
// We can also get a full ModelInfo by ID. Here we only show the basic information. See the documentation and the
// `getDocumentModel` sample program for information about the `docTypes` field, which contains the model's document type
// schemas.
const model = await client.getDocumentModel("<model ID>");
console.log("ID", model.modelId);
console.log("Created:", model.createdOn);
console.log("Description: ", model.description ?? "<none>");
// A model can also be deleted by its model ID. Once it is deleted, it CANNOT be recovered.
const modelIdToDelete = "<model ID that should be deleted forever>";
await client.deleteDocumentModel(modelIdToDelete);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
Аналогичные методы listDocumentClassifiers
и getDocumentClassifier
доступны для перечисления и получения сведений о пользовательских классификаторах в дополнение к удалению deleteDocumentClassifier
пользовательских классификаторов.
Устранение неполадок
Сведения об устранении неполадок см. в руководстве по устранению неполадок.
Ведение журнала
Включение ведения журнала может помочь выявить полезные сведения о сбоях. Чтобы просмотреть журнал HTTP-запросов и ответов, задайте для переменной среды AZURE_LOG_LEVEL
значение info
. Кроме того, ведение журнала можно включить во время выполнения, вызвав setLogLevel
в @azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Более подробные инструкции по включению журналов см. в документации по пакету @azure и средства ведения журнала.
Дальнейшие действия
Ознакомьтесь с каталогом примеров для получения подробных примеров кода, в которых показано, как использовать эту библиотеку, включая несколько функций и методов, которые не показаны в разделе "Примеры" выше, например копирование и составление моделей, перечисление операций управления моделями и удаление моделей.
Участие
Если вы хотите вносить изменения в эту библиотеку, ознакомьтесь с руководством по внесению изменений, в котором содержатся сведения о создании и тестировании кода.
Azure SDK for JavaScript