Azure DocumentIntelligence (voorheen FormRecognizer) REST-clientbibliotheek voor JavaScript - versie 1.0.0
Extraheert inhoud, indeling en gestructureerde gegevens uit documenten.
Vertrouw sterk op onze REST-clientdocumenten om deze bibliotheek te gebruiken
OPMERKING: Form Recognizer is hernoemd naar Document Intelligence. Raadpleeg de migratiehandleiding voor van
@azure/ai-form-recognizer
naar@azure-rest/ai-document-intelligence
.
Sleutelkoppelingen:
- broncode
- Package (NPM)
- API-referentiedocumentatie
- voorbeelden
- changelog
- migratiehandleiding van form Recognizer-
Deze versie van de clientbibliotheek is standaard ingesteld op de
"2024-11-30"
versie van de service.
In deze tabel ziet u de relatie tussen SDK-versies en ondersteunde API-versies van de service:
SDK-versie | Ondersteunde API-versie van de service |
---|---|
1.0.0 | 2024-11-30 |
Vertrouw op de oudere
@azure/ai-form-recognizer
-bibliotheek via de oudere service-API-versies voor buiten gebruik gestelde modellen, zoals"prebuilt-businessCard"
en"prebuilt-document"
. Zie Changelogvoor meer informatie.
In de onderstaande tabel wordt de relatie van elke client en de ondersteunde API-versie(s) beschreven:
Service-API-versie | Ondersteunde clients | Pak |
---|---|---|
2024-11-30 | DocumentIntelligenceClient |
@azure-rest/ai-document-intelligence versie 1.0.0 |
2023-07-31 | DocumentAnalysisClient en DocumentModelAdministrationClient |
@azure/ai-form-recognizer versie ^5.0.0 |
2022-08-01 | DocumentAnalysisClient en DocumentModelAdministrationClient |
@azure/ai-form-recognizer versie ^4.0.0 |
Slag
Momenteel ondersteunde omgevingen
- LTS-versies van Node.js
Voorwaarden
- U moet een Azure-abonnement hebben om dit pakket te kunnen gebruiken.
Het @azure-rest/ai-document-intelligence
-pakket installeren
Installeer de AZURE DocumentIntelligence(voorheenFormRecognizer) REST-clientbibliotheek voor JavaScript met npm
:
npm install @azure-rest/ai-document-intelligence
Een DocumentIntelligenceClient
maken en verifiëren
Als u een AAD-tokenreferenties (Azure Active Directory) wilt gebruiken, geeft u een exemplaar op van het gewenste referentietype dat is verkregen uit de @azure/identity-bibliotheek.
Als u zich wilt verifiëren met AAD, moet u eerst npm
@azure/identity
installeren
Na de installatie kunt u kiezen welk type referentie uit @azure/identity
te gebruiken.
Als voorbeeld kan DefaultAzureCredential- worden gebruikt om de client te verifiëren.
Stel de waarden van de client-id, tenant-id en clientgeheim van de AAD-toepassing in als omgevingsvariabelen: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
Een tokenreferentie gebruiken
import DocumentIntelligence from "@azure-rest/ai-document-intelligence";
const client = DocumentIntelligence(
process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"],
new DefaultAzureCredential()
);
Een API-SLEUTEL gebruiken
import DocumentIntelligence from "@azure-rest/ai-document-intelligence";
const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], {
key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"],
});
Documentmodellen
Vooraf gedefinieerde indeling analyseren (urlSource)
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
urlSource:
"https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf",
},
queryParameters: { locale: "en-IN" },
});
Vooraf gedefinieerde indeling analyseren (base64Source)
import fs from "fs";
import path from "path";
const filePath = path.join(ASSET_PATH, "forms", "Invoice_1.pdf");
const base64Source = fs.readFileSync(filePath, { encoding: "base64" });
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
base64Source,
},
queryParameters: { locale: "en-IN" },
});
Doorgaan met het maken van de poller vanuit het eerste antwoord
import {
getLongRunningPoller,
AnalyzeResultOperationOutput,
isUnexpected,
} from "@azure-rest/ai-document-intelligence";
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse);
const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput;
console.log(result);
// {
// status: 'succeeded',
// createdDateTime: '2023-11-10T13:31:31Z',
// lastUpdatedDateTime: '2023-11-10T13:31:34Z',
// analyzeResult: {
// apiVersion: '2023-10-31-preview',
// .
// .
// .
// contentFormat: 'text'
// }
// }
Batchanalyse
import { parseResultIdFromResponse, isUnexpected } from "@azure-rest/ai-document-intelligence";
// 1. Analyze a batch of documents
const initialResponse = await client
.path("/documentModels/{modelId}:analyzeBatch", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
azureBlobSource: {
containerUrl: batchTrainingFilesContainerUrl(),
},
resultContainerUrl: batchTrainingFilesResultContainerUrl(),
resultPrefix: "result",
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const resultId = parseResultIdFromResponse(initialResponse);
console.log("resultId: ", resultId);
// (Optional) You can poll for the batch analysis result but be aware that a job may take unexpectedly long time, and polling could incur additional costs.
// const poller = getLongRunningPoller(client, initialResponse);
// await poller.pollUntilDone();
// 2. At a later time, you can retrieve the operation result using the resultId
const output = await client
.path("/documentModels/{modelId}/analyzeResults/{resultId}", "prebuilt-layout", resultId)
.get();
console.log(output);
Markdown-inhoudsindeling
Ondersteunt uitvoer met Markdown-inhoudsindeling, samen met de standaard zonder opmaak tekst. Voorlopig wordt dit alleen ondersteund voor 'vooraf gedefinieerde indeling'. Markdown-inhoudsindeling wordt beschouwd als een meer beschrijvende indeling voor LLM-verbruik in een chat- of automatiseringsscenario.
De service volgt de GFM-specificatie (GitHub Flavored Markdown) voor de Markdown-indeling. Introduceert ook een nieuwe eigenschap contentFormat met de waarde 'text' of 'markdown' om de indeling van de resultaatinhoud aan te geven.
import DocumentIntelligence from "@azure-rest/ai-document-intelligence";
const client = DocumentIntelligence(process.env["DOCUMENT_INTELLIGENCE_ENDPOINT"], {
key: process.env["DOCUMENT_INTELLIGENCE_API_KEY"],
});
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
urlSource:
"https://raw.githubusercontent.com/Azure/azure-sdk-for-js/6704eff082aaaf2d97c1371a28461f512f8d748a/sdk/formrecognizer/ai-form-recognizer/assets/forms/Invoice_1.pdf",
},
queryParameters: { outputContentFormat: "markdown" }, // <-- new query parameter
});
Queryvelden
Wanneer deze functievlag is opgegeven, extraheert de service de waarden van de velden die zijn opgegeven via de queryparameter queryVelds om bestaande velden die door het model zijn gedefinieerd als terugval aan te vullen.
await client.path("/documentModels/{modelId}:analyze", "prebuilt-layout").post({
contentType: "application/json",
body: { urlSource: "..." },
queryParameters: {
features: ["queryFields"],
queryFields: ["NumberOfGuests", "StoreNumber"],
}, // <-- new query parameter
});
Opties voor splitsen
In de vorige API-versies die worden ondersteund door de oudere @azure/ai-form-recognizer
-bibliotheek, probeerden documentsplitsing en classificatiebewerking ("/documentClassifiers/{classifierId}:analyze"
) het invoerbestand altijd te splitsen in meerdere documenten.
Om een bredere set scenario's mogelijk te maken, introduceert de service een queryparameter splitsen met de nieuwe serviceversie 2023-10-31-preview. De volgende waarden worden ondersteund:
split: "auto"
Laat de service bepalen waar moet worden gesplitst.
split: "none"
Het hele bestand wordt behandeld als één document. Er wordt geen splitsing uitgevoerd.
split: "perPage"
Elke pagina wordt behandeld als een afzonderlijk document. Elke lege pagina wordt bewaard als een eigen document.
Documentclassificaties #Build
import {
DocumentClassifierBuildOperationDetailsOutput,
getLongRunningPoller,
isUnexpected,
} from "@azure-rest/ai-document-intelligence";
const containerSasUrl = (): string =>
process.env["DOCUMENT_INTELLIGENCE_TRAINING_CONTAINER_SAS_URL"];
const initialResponse = await client.path("/documentClassifiers:build").post({
body: {
classifierId: `customClassifier${getRandomNumber()}`,
description: "Custom classifier description",
docTypes: {
foo: {
azureBlobSource: {
containerUrl: containerSasUrl(),
},
},
bar: {
azureBlobSource: {
containerUrl: containerSasUrl(),
},
},
},
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse);
const response = (await poller.pollUntilDone())
.body as DocumentClassifierBuildOperationDetailsOutput;
console.log(response);
// {
// operationId: '31466834048_f3ee629e-73fb-48ab-993b-1d55d73ca460',
// kind: 'documentClassifierBuild',
// status: 'succeeded',
// .
// .
// result: {
// classifierId: 'customClassifier10978',
// createdDateTime: '2023-11-09T12:45:56Z',
// .
// .
// description: 'Custom classifier description'
// },
// apiVersion: '2023-10-31-preview'
// }
De gegenereerde PDF-uitvoer ophalen uit documentanalyse
const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf");
const base64Source = await fs.readFile(filePath, { encoding: "base64" });
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-read")
.post({
contentType: "application/json",
body: {
base64Source,
},
queryParameters: { output: ["pdf"] },
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse);
await poller.pollUntilDone();
const output = await client
.path(
"/documentModels/{modelId}/analyzeResults/{resultId}/pdf",
"prebuilt-read",
parseResultIdFromResponse(initialResponse)
)
.get()
.asNodeStream(); // output.body would be NodeJS.ReadableStream
if (output.status !== "200" || !output.body) {
throw new Error("The response was unexpected, expected NodeJS.ReadableStream in the body.");
}
const pdfData = await streamToUint8Array(output.body);
fs.promises.writeFile(`./output.pdf`, pdfData);
// Or you can consume the NodeJS.ReadableStream directly
De gegenereerde bijgesneden afbeelding van de opgegeven afbeelding ophalen uit documentanalyse
const filePath = path.join(ASSET_PATH, "layout-pageobject.pdf");
const base64Source = fs.readFileSync(filePath, { encoding: "base64" });
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
base64Source,
},
queryParameters: { output: ["figures"] },
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = getLongRunningPoller(client, initialResponse, { ...testPollingOptions });
const result = (await poller.pollUntilDone()).body as AnalyzeResultOperationOutput;
const figures = result.analyzeResult?.figures;
assert.isArray(figures);
assert.isNotEmpty(figures?.[0]);
const figureId = figures?.[0].id || "";
assert.isDefined(figureId);
const output = await client
.path(
"/documentModels/{modelId}/analyzeResults/{resultId}/figures/{figureId}",
"prebuilt-layout",
parseResultIdFromResponse(initialResponse),
figureId
)
.get()
.asNodeStream(); // output.body would be NodeJS.ReadableStream
if (output.status !== "200" || !output.body) {
throw new Error("The response was unexpected, expected NodeJS.ReadableStream in the body.");
}
const imageData = await streamToUint8Array(output.body);
fs.promises.writeFile(`./figures/${figureId}.png`, imageData);
// Or you can consume the NodeJS.ReadableStream directly
Informatie ophalen
const response = await client.path("/info").get();
if (isUnexpected(response)) {
throw response.body.error;
}
console.log(response.body.customDocumentModels.limit);
// 20000
Documentmodellen weergeven
import { paginate } from "@azure-rest/ai-document-intelligence";
const response = await client.path("/documentModels").get();
if (isUnexpected(response)) {
throw response.body.error;
}
const modelsInAccount: string[] = [];
for await (const model of paginate(client, response)) {
console.log(model.modelId);
}
Probleemoplossing
Logboekregistratie
Het inschakelen van logboekregistratie kan helpen nuttige informatie over fouten te ontdekken. Als u een logboek met HTTP-aanvragen en -antwoorden wilt zien, stelt u de omgevingsvariabele AZURE_LOG_LEVEL
in op info
. U kunt logboekregistratie ook tijdens runtime inschakelen door setLogLevel
aan te roepen in de @azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
Voor meer gedetailleerde instructies over het inschakelen van logboeken, kunt u de @azure/logger pakketdocumentenbekijken.
Azure SDK for JavaScript