Biblioteka klienta analizy dokumentów usługi Azure AI dla języka JavaScript — wersja 5.0.0
Azure AI Document Intelligence to usługa w chmurze, która korzysta z uczenia maszynowego do analizowania tekstu i danych strukturalnych z dokumentów. Zawiera ona następujące główne funkcje:
- Układ — wyodrębnianie tekstu, struktur tabeli i znaczników zaznaczenia wraz ze współrzędnymi regionów ograniczenia z dokumentów.
- Dokument — analizowanie jednostek, par klucz-wartość, tabel i znaków wyboru z dokumentów przy użyciu ogólnego wstępnie utworzonego modelu dokumentu.
- Odczyt — odczytywanie informacji o elementach tekstowych, takich jak wyrazy stron i wiersze oprócz informacji o języku tekstowym.
- Wstępnie utworzone — analizowanie danych z niektórych typów typowych dokumentów (takich jak paragony, faktury, wizytówki lub dokumenty tożsamości) przy użyciu wstępnie utworzonych modeli.
- Niestandardowe — twórz modele niestandardowe, aby wyodrębniać tekst, wartości pól, znaczniki wyboru i dane tabeli z dokumentów. Modele niestandardowe są tworzone przy użyciu własnych danych, dzięki czemu są dostosowane do Twoich dokumentów.
- Klasyfikatory — twórz niestandardowe klasyfikatory, aby kategoryzować dokumenty do wstępnie zdefiniowanych klas.
Kod | źródłowyPakiet (NPM) | Dokumentacja referencyjna interfejsu | APIDokumentacja | produktuPróbki
Uwaga
Usługa analizy dokumentów była wcześniej znana jako "Azure Form Recognizer". Te usługi są takie same, a @azure/ai-form-recognizer
pakiet dla języka JavaScript jest pakietem zestawu Azure SDK dla usługi Azure AI Document Intelligence Service. W momencie pisania tego artykułu zmiana nazwy usługi Azure Form Recognizer na analizę dokumentów sztucznej inteligencji platformy Azure jest w toku, więc "Form Recognizer" i "Analiza dokumentów" mogą być używane zamiennie w niektórych przypadkach.
Instalowanie pakietu @azure/ai-form-recognizer
Zainstaluj bibliotekę klienta azure Document Intelligence dla języka JavaScript za pomocą polecenia npm
:
npm install @azure/ai-form-recognizer
Wprowadzenie
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();
Obecnie obsługiwane środowiska
- Wersje LTS Node.js
- Najnowsze wersje przeglądarek Safari, Chrome, Edge i Firefox.
Aby uzyskać więcej informacji, zobacz nasze zasady pomocy technicznej .
Wymagania wstępne
- Subskrypcja platformy Azure
- Zasób usług Cognitive Services lub Form Recognizer. Jeśli musisz utworzyć zasób, możesz użyć witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.
Tworzenie zasobu Form Recognizer
Uwaga: w momencie pisania Azure Portal nadal odnosi się do zasobu jako zasobu "Form Recognizer". W przyszłości może to zostać zaktualizowane do zasobu "Analiza dokumentów". Na razie poniższa dokumentacja używa nazwy "Form Recognizer".
Analiza dokumentów obsługuje zarówno dostęp do wielu usług, jak i z jedną usługą. Utwórz zasób usług Cognitive Services, jeśli planujesz dostęp do wielu usług Cognitive Services w ramach jednego punktu końcowego/klucza. W przypadku dostępu tylko Form Recognizer utwórz zasób Form Recognizer.
Zasób można utworzyć przy użyciu polecenia
Opcja 1.Witryna Azure Portal
Opcja 2:interfejs wiersza polecenia platformy Azure.
Poniżej przedstawiono przykład tworzenia zasobu Form Recognizer przy użyciu interfejsu wiersza polecenia:
# 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
Jeśli używasz interfejsu wiersza polecenia platformy Azure, zastąp <your-resource-group-name>
wartości i <your-resource-name>
własnymi unikatowymi nazwami:
az cognitiveservices account create --kind FormRecognizer --resource-group <your-resource-group-name> --name <your-resource-name> --sku <your-sku-name> --location <your-location>
Tworzenie i uwierzytelnianie klienta
Aby wchodzić w interakcję z usługą Analizy dokumentów, musisz wybrać typ DocumentAnalysisClient
lub , DocumentModelAdministrationClient
a następnie utworzyć wystąpienie tego typu. W poniższych przykładach użyjemy elementu DocumentAnalysisClient
. Aby utworzyć wystąpienie klienta w celu uzyskania dostępu do interfejsu API analizy dokumentów, musisz mieć endpoint
zasób Form Recognizer i element credential
. Klienci mogą używać AzureKeyCredential
elementu z kluczem interfejsu API zasobu lub przy TokenCredential
użyciu kontroli dostępu opartej na rolach usługi Azure Active Directory w celu autoryzowania klienta.
Punkt końcowy zasobu Form Recognizer można znaleźć w witrynie Azure Portal lub przy użyciu poniższego fragmentu wiersza polecenia platformy Azure:
az cognitiveservices account show --name <your-resource-name> --resource-group <your-resource-group-name> --query "properties.endpoint"
Używanie klucza interfejsu API
Użyj witryny Azure Portal, aby przejść do zasobu Form Recognizer i pobrać klucz interfejsu API lub użyć poniższego fragmentu kodu interfejsu wiersza polecenia platformy Azure:
Uwaga: Czasami klucz interfejsu API jest określany jako "klucz subskrypcji" lub "klucz interfejsu API subskrypcji".
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Po utworzeniu klucza interfejsu API i punktu końcowego możesz go użyć w następujący sposób:
const { DocumentAnalysisClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
const client = new DocumentAnalysisClient("<endpoint>", new AzureKeyCredential("<API key>"));
Korzystanie z usługi Azure Active Directory
W większości przykładów jest używana autoryzacja klucza interfejsu API, ale można również uwierzytelnić klienta w usłudze Azure Active Directory przy użyciu biblioteki tożsamości platformy Azure. Aby użyć dostawcy DefaultAzureCredential pokazanego poniżej lub innych dostawców poświadczeń dostarczonych z zestawem Azure SDK, zainstaluj @azure/identity
pakiet:
npm install @azure/identity
Aby uwierzytelnić się przy użyciu jednostki usługi, należy również zarejestrować aplikację usługi AAD i udzielić dostępu do usługi, przypisując "Cognitive Services User"
rolę do jednostki usługi (uwaga: inne role, takie jak "Owner"
nie będą udzielać niezbędnych uprawnień, wystarczy "Cognitive Services User"
uruchomić przykłady i przykładowy kod).
Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i klucza tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_CLIENT_ID
, , AZURE_CLIENT_SECRET
AZURE_TENANT_ID
.
const { DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
const { DefaultAzureCredential } = require("@azure/identity");
const client = new DocumentAnalysisClient("<endpoint>", new DefaultAzureCredential());
Kluczowe pojęcia
DocumentAnalysisClient
DocumentAnalysisClient
Udostępnia operacje analizowania dokumentów wejściowych przy użyciu niestandardowych i wstępnie utworzonych modeli. Ma trzy metody:
beginAnalyzeDocument
, który wyodrębnia dane ze strumienia wejściowego pliku dokumentu przy użyciu niestandardowego lub wstępnie utworzonego modelu podanego przez jego identyfikator modelu. Aby uzyskać informacje o wstępnie utworzonych modelach obsługiwanych we wszystkich zasobach i ich identyfikatorach/danych wyjściowych modelu, zapoznaj się z dokumentacją usługi modeli.beginAnalyzeDocumentFromUrl
, który wykonuje tę samą funkcję cobeginAnalyzeDocument
, ale przesyła publicznie dostępny adres URL pliku zamiast strumienia plików.
DocumentModelAdministrationClient
DocumentModelAdministrationClient
Udostępnia operacje zarządzania (tworzeniem, odczytywaniem, wyświetlaniem i usuwaniem) modeli w zasobie:
beginBuildDocumentModel
Uruchamia operację tworzenia nowego modelu dokumentu na podstawie własnego zestawu danych treningowych. Utworzony model może wyodrębniać pola zgodnie ze schematem niestandardowym. Dane szkoleniowe powinny znajdować się w kontenerze usługi Azure Storage i zorganizowane zgodnie z określoną konwencją. Zapoznaj się z dokumentacją usługi dotyczącą tworzenia zestawu danych treningowych , aby uzyskać bardziej szczegółowe wyjaśnienie stosowania etykiet do zestawu danych treningowych.beginComposeDocumentModel
uruchamia operację redagowania wielu modeli w jeden model. W przypadku użycia do niestandardowego rozpoznawania formularzy nowy model komponowany najpierw przeprowadzi klasyfikację dokumentów wejściowych, aby określić, które z jej modeli podrzędnych jest najbardziej odpowiednie.beginCopyModelTo
Uruchamia operację kopiowania modelu niestandardowego z jednego zasobu do innego (a nawet do tego samego zasobu). Wymaga elementuCopyAuthorization
z zasobu docelowego, który można wygenerować przy użyciugetCopyAuthorization
metody .getResourceDetails
pobiera informacje o limitach zasobów, takich jak liczba modeli niestandardowych i maksymalna liczba modeli, które może obsłużyć zasób.getDocumentModel
,listDocumentModels
ideleteDocumentModel
umożliwiają zarządzanie modelami w zasobie.getOperation
umożliwialistOperations
wyświetlanie stanu operacji tworzenia modelu, nawet tych, które są w toku lub które zakończyły się niepowodzeniem. Operacje są przechowywane przez 24 godziny.
Należy pamiętać, że modele można również tworzyć przy użyciu graficznego interfejsu użytkownika usługi Document Intelligence Service: Document Intelligence Studio.
Przykładowe fragmenty kodu ilustrujące sposób tworzenia DocumentModelAdministrationClient
modelu można znaleźć poniżej w sekcji przykładowej "Tworzenie modelu".
Długotrwałe operacje
Długotrwałe operacje (LROs) to operacje składające się z początkowego żądania wysłanego do usługi w celu uruchomienia operacji, a następnie sondowania wyniku w określonym interwale w celu określenia, czy operacja została ukończona, i czy zakończyła się niepowodzeniem, czy zakończyła się pomyślnie. Ostatecznie funkcja LRO zakończy się niepowodzeniem z powodu błędu lub wygeneruje wynik.
W usłudze Azure AI Document Intelligence operacje tworzenia modeli (w tym kopiowania i tworzenia modeli), a także operacje analizy/wyodrębniania danych to LROs. Klienci zestawu SDK udostępniają metody asynchroniczne begin<operation-name>
, które zwracają Promise<PollerLike>
obiekty. Obiekt PollerLike
reprezentuje operację, która jest uruchamiana asynchronicznie w infrastrukturze usługi, a program może czekać na ukończenie operacji przez wywołanie metody i oczekiwanie pollUntilDone
na metodę w poller zwróconej begin<operation-name>
z metody . Przykładowe fragmenty kodu są udostępniane w celu zilustrowania użycia długotrwałych operacji w następnej sekcji.
Przykłady
Poniższa sekcja zawiera kilka fragmentów kodu JavaScript ilustrujących typowe wzorce używane w bibliotekach klienta analizy dokumentów.
- Analizowanie dokumentu przy użyciu identyfikatora modelu
- Korzystanie ze wstępnie utworzonych modeli dokumentów
- Korzystanie ze wstępnie utworzonego układu
- Używanie wstępnie utworzonego dokumentu
- Korzystanie ze wstępnie utworzonego elementu "read"
- Kompilowanie modelu
- Zarządzanie modelami
Analizowanie dokumentu przy użyciu identyfikatora modelu
Metoda beginAnalyzeDocument
może wyodrębniać pola i dane tabeli z dokumentów. Analiza może używać modelu niestandardowego, wytrenowanego przy użyciu własnych danych lub wstępnie utworzonego modelu dostarczonego przez usługę (zobacz Korzystanie ze wstępnie utworzonych modeli poniżej). Model niestandardowy jest dostosowany do własnych dokumentów, dlatego powinien być używany tylko z dokumentami tej samej struktury co jeden z typów dokumentów w modelu (może istnieć wiele, na przykład w modelu skomponowanym).
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);
});
Analizowanie dokumentu z adresu URL
Zamiast tego można podać publicznie dostępny adres URL jako alternatywę dla zapewnienia czytelnego strumienia beginAnalyzeDocumentFromUrl
przy użyciu metody . "Dostępny publicznie" oznacza, że źródła adresów URL muszą być dostępne z infrastruktury usługi (innymi słowy, prywatny adres URL intranetu lub adresy URL używające wpisów tajnych opartych na nagłówku lub certyfikatach, nie będą działać, ponieważ usługa analizy dokumentów musi mieć dostęp do adresu URL). Jednak sam adres URL może kodować wpis tajny, taki jak adres URL obiektu blob usługi Azure Storage, który zawiera token SAS w parametrach zapytania.
Korzystanie ze wstępnie utworzonych modeli dokumentów
Metoda beginAnalyzeDocument
obsługuje również wyodrębnianie pól z niektórych typów typowych dokumentów, takich jak paragony, faktury, wizytówki, dokumenty tożsamości i inne przy użyciu wstępnie utworzonych modeli udostępnianych przez usługę Analizy dokumentów. Wstępnie utworzone modele mogą być udostępniane jako ciągi identyfikatorów modelu (takie same jak niestandardowe modele dokumentów — zobacz drugą wstępnie utworzoną sekcję DocumentModel
modeli poniżej) lub używając obiektu. W przypadku korzystania z elementu DocumentModel
zestaw SDK analizy dokumentów dla języka JavaScript zapewnia znacznie silniejszy typ języka TypeScript dla wynikowych wyodrębnionych dokumentów na podstawie schematu modelu i zostanie przekonwertowany na użycie konwencji nazewnictwa języka JavaScript.
Przykładowe DocumentModel
obiekty dla bieżącej wersji interfejsu prebuilt
API usługi (2022-08-31
) można znaleźć w katalogu samples. W poniższym przykładzie użyjemy PrebuiltReceiptModel
pliku z pliku [prebuilt-receipt.ts
] w tym katalogu.
Ponieważ główną zaletą DocumentModel
analizy opartej na języku TypeScript jest silniejsze ograniczenia typu TypeScript, w języku TypeScript jest napisany następujący przykład przy użyciu składni modułu 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);
});
Alternatywnie, jak wspomniano powyżej, zamiast używać PrebuiltReceiptModel
metody , która generuje silniejszy typ zwracany, można użyć wstępnie utworzonego identyfikatora modelu paragonu ("wstępnie utworzonego paragonu"), ale pola dokumentu nie będą silnie wpisywane w języku TypeScript, a nazwy pól będą zwykle znajdować się w "PascalCase" zamiast "camelCase".
Inne wstępnie utworzone modele
Nie masz ograniczeń do paragonów! Istnieje kilka wstępnie utworzonych modeli do wyboru, z więcej na drodze. Każdy wstępnie utworzony model ma własny zestaw obsługiwanych pól:
- Paragony, używając
PrebuiltReceiptModel
(jak powyżej) lub wstępnie utworzonego identyfikatora"prebuilt-receipt"
modelu paragonu . - Wizytówki, używając
PrebuiltBusinessCardModel
identyfikatora modelu"prebuilt-businessCard"
lub . - Faktury, używając
PrebuiltInvoiceModel
identyfikatora modelu"prebuilt-invoice"
lub . - Dokumenty tożsamości (takie jak prawa jazdy i paszporty) przy użyciu
PrebuiltIdDocumentModel
lub identyfikator modelu"prebuilt-idDocument"
. - Formularze podatkowe W2 (Stany Zjednoczone) przy użyciu
PrebuiltTaxUsW2Model
lub identyfikator modelu"prebuilt-tax.us.w2"
. - Karty ubezpieczenia zdrowotnego (Stany Zjednoczone), używając [
PrebuiltHealthInsuranceCardUsModel
][samples-prebuilt-healthinsurancecard.us] lub identyfikatora"prebuilt-healthInsuranceCard.us"
modelu .
Każdy z powyższych wstępnie utworzonych modeli tworzy documents
(wyodrębnione wystąpienia schematu pola modelu). Istnieją również trzy wstępnie utworzone modele, które nie mają schematów pól i dlatego nie tworzą documents
elementu . Są to:
- Wstępnie utworzony model układu (zobacz Używanie wstępnie utworzonego układu poniżej), który wyodrębnia informacje o elementach podstawowego układu (OCR), takich jak strony i tabele.
- Wstępnie utworzony ogólny model dokumentu (zobacz Używanie wstępnie utworzonego dokumentu poniżej), który dodaje pary klucz-wartość (kierowane skojarzenia między elementami strony, takimi jak elementy oznaczone) do informacji generowanych przez model układu.
- Wstępnie utworzony model odczytu (zobacz Używanie wstępnie utworzonego "odczytu" poniżej), który wyodrębnia tylko elementy tekstowe, takie jak wyrazy i wiersze strony, wraz z informacjami o języku dokumentu.
Aby uzyskać informacje o polach wszystkich tych modeli, zobacz dokumentację usługi dostępnych wstępnie utworzonych modeli.
Pola wszystkich wstępnie utworzonych modeli mogą być również uzyskiwane programowo przy użyciu getDocumentModel
metody (według ich identyfikatorów modelu) DocumentModelAdministrationClient
i sprawdzania docTypes
pola w wyniku.
Korzystanie ze wstępnie utworzonego układu
Model "prebuilt-layout"
wyodrębnia tylko podstawowe elementy dokumentu, takie jak strony (składające się z wyrazów tekstowych/wierszy i znaków zaznaczania), tabele i style tekstu wizualnego wraz z ich regionami ograniczenia i obejmuje zawartość tekstową dokumentów wejściowych. Udostępniamy silnie typizowane DocumentModel
wystąpienie o nazwie PrebuiltLayoutModel
, które wywołuje ten model lub jak zawsze jego identyfikator "prebuilt-layout"
modelu może być używany bezpośrednio.
Ponieważ główną zaletą DocumentModel
analizy opartej na języku TypeScript jest silniejsze ograniczenia typu TypeScript, w języku TypeScript jest napisany następujący przykład przy użyciu składni modułu 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);
});
Używanie wstępnie utworzonego dokumentu
Model "prebuilt-document"
wyodrębnia informacje o parach klucz-wartość (kierowane skojarzenia między elementami strony, takimi jak pola oznaczone etykietami) oprócz właściwości generowanych przez metodę wyodrębniania układu. Ten wstępnie utworzony (ogólny) model dokumentu zapewnia podobne funkcje do modeli niestandardowych wytrenowanych bez informacji o etykiecie w poprzednich iteracji usługi Analizy dokumentów, ale jest teraz dostarczany jako wstępnie utworzony model, który współpracuje z wieloma różnymi dokumentami. Udostępniamy silnie typizowane DocumentModel
wystąpienie o nazwie PrebuiltDocumentModel
, które wywołuje ten model lub jak zawsze jego identyfikator "prebuilt-document"
modelu może być używany bezpośrednio.
Ponieważ główną zaletą DocumentModel
analizy opartej na języku TypeScript jest silniejsze ograniczenia typu TypeScript, w języku TypeScript jest napisany następujący przykład przy użyciu składni modułu 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);
});
Używanie wstępnie utworzonego elementu "read"
"prebuilt-read"
Model wyodrębnia informacje tekstowe w dokumencie, takim jak wyrazy i akapity, oraz analizuje język i styl pisania (np. odręczny a zestaw typów) tego tekstu. Udostępniamy silnie typizowane DocumentModel
wystąpienie o nazwie PrebuiltReadModel
, które wywołuje ten model lub jak zawsze jego identyfikator "prebuilt-read"
modelu może być używany bezpośrednio.
Ponieważ główną zaletą DocumentModel
analizy opartej na języku TypeScript jest silniejsze ograniczenia typu TypeScript, w języku TypeScript jest napisany następujący przykład przy użyciu składni modułu 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);
});
Klasyfikowanie dokumentu
Usługa Analizy dokumentów obsługuje niestandardowe klasyfikatory dokumentów, które mogą klasyfikować dokumenty w zestawie wstępnie zdefiniowanych kategorii na podstawie zestawu danych trenowania. Dokumenty można klasyfikować za pomocą klasyfikatora niestandardowego DocumentAnalysisClient
przy użyciu beginClassifyDocument
metody . Podobnie jak beginAnalyzeDocument
powyżej, ta metoda akceptuje plik lub strumień zawierający dokument do sklasyfikowania i ma beginClassifyDocumentFromUrl
odpowiednik, który akceptuje publicznie dostępny adres URL do dokumentu.
W poniższym przykładzie pokazano, jak sklasyfikować dokument przy użyciu klasyfikatora niestandardowego:
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);
});
Aby uzyskać informacje na temat trenowania klasyfikatora niestandardowego, zobacz sekcję dotyczącą trenowania klasyfikatora na końcu następnej sekcji.
Tworzenie modelu
Zestaw SDK obsługuje również tworzenie modeli przy użyciu DocumentModelAdministrationClient
klasy . Utworzenie modelu na podstawie danych treningowych z etykietami tworzy nowy model, który jest trenowany we własnych dokumentach, a wynikowy model będzie mógł rozpoznawać wartości ze struktur tych dokumentów. Operacja tworzenia modelu akceptuje adres URL zakodowany przy użyciu sygnatury dostępu współdzielonego do kontenera obiektów blob usługi Azure Storage, który przechowuje dokumenty szkoleniowe. Infrastruktura usługi Document Intelligence service odczytuje pliki w kontenerze i utworzy model na podstawie ich zawartości. Aby uzyskać więcej informacji na temat tworzenia i struktury kontenera danych szkoleniowych, zobacz dokumentację usługi Document Intelligence Service na potrzeby tworzenia modelu.
Mimo że udostępniamy te metody tworzenia modelu programowego, zespół usługi Analizy dokumentów utworzył interaktywną aplikację internetową , Document Intelligence Studio, która umożliwia tworzenie modeli i zarządzanie nimi w Internecie.
Na przykład następujący program tworzy niestandardowy model dokumentów przy użyciu adresu URL zakodowanego przy użyciu sygnatury dostępu współdzielonego do istniejącego kontenera usługi Azure Storage:
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);
});
Klasyfikatory niestandardowe są wbudowane w podobny sposób przy użyciu beginBuildDocumentClassifier
metody zamiast beginBuildDocumentModel
. Zobacz przykład klasyfikatora kompilacji , aby uzyskać więcej informacji na temat tworzenia klasyfikatora niestandardowego, ponieważ dane szkoleniowe wejściowe są dostępne w nieco innym formacie. Aby uzyskać informacje na temat tworzenia zestawu danych szkoleniowych dla klasyfikatora niestandardowego, zobacz dokumentację usługi Document Intelligence Service.
Zarządzanie modelami
DocumentModelAdministrationClient
Udostępnia również kilka metod uzyskiwania dostępu do modeli i wyświetlania ich na liście. W poniższym przykładzie pokazano, jak iterować modele w zasobie (obejmuje to zarówno modele niestandardowe w zasobie, jak i wstępnie utworzone modele, które są wspólne dla wszystkich zasobów), uzyskać model według identyfikatora i usunąć model.
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);
});
Podobne metody listDocumentClassifiers
i getDocumentClassifier
są dostępne do wyświetlania listy i uzyskiwania informacji o klasyfikatorach niestandardowych oprócz usuwania deleteDocumentClassifier
klasyfikatorów niestandardowych.
Rozwiązywanie problemów
Aby uzyskać pomoc dotyczącą rozwiązywania problemów, zobacz przewodnik rozwiązywania problemów.
Rejestrowanie
Włączenie rejestrowania może pomóc odkryć przydatne informacje o błędach. Aby wyświetlić dziennik żądań HTTP i odpowiedzi, ustaw zmienną AZURE_LOG_LEVEL
środowiskową na info
. Możesz też włączyć rejestrowanie w czasie wykonywania, wywołując polecenie w elemecie setLogLevel
@azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Aby uzyskać bardziej szczegółowe instrukcje dotyczące włączania dzienników, zapoznaj się z dokumentami dotyczącymi pakietu @azure/rejestratora.
Następne kroki
Zapoznaj się z katalogiem przykładów , aby uzyskać szczegółowe przykłady kodu, które pokazują, jak używać tej biblioteki, w tym kilka funkcji i metod, które nie są wyświetlane w powyższej sekcji "Przykłady", takie jak kopiowanie i tworzenie modeli, wyświetlanie listy operacji zarządzania modelami i usuwanie modeli.
Współtworzenie
Jeśli chcesz współtworzyć tę bibliotekę, przeczytaj przewodnik współtworzenia , aby dowiedzieć się więcej na temat sposobu kompilowania i testowania kodu.
Azure SDK for JavaScript