Azure AI Document Intelligence ügyfélkódtár JavaScripthez – 5.0.0-s verzió
Az Azure AI Document Intelligence egy felhőalapú szolgáltatás, amely gépi tanulással elemzi a dokumentumokból származó szövegeket és strukturált adatokat. A következő fő funkciókat tartalmazza:
- Elrendezés – Szöveg, táblázatstruktúrák és kijelölési jelek kinyerése a dokumentumokból a határolórégió koordinátáival együtt.
- Dokumentum – Entitások, kulcs-érték párok, táblák és kijelölési jelek elemzése a dokumentumokból az általános előre összeállított dokumentummodell használatával.
- Olvasás – A szöveges elemekre, például az oldalszavakra és a sorokra vonatkozó információk olvasása a szöveges nyelvi információk mellett.
- Előre összeállított – Bizonyos típusú gyakori dokumentumokból (például nyugtákból, számlákból, névjegykártyákból vagy identitásdokumentumokból) származó adatok elemzése előre összeállított modellek használatával.
- Egyéni – Egyéni modelleket hozhat létre szöveg, mezőértékek, kijelölési jelek és táblázatadatok dokumentumokból való kinyeréséhez. Az egyéni modellek saját adatokkal készülnek, így azok a dokumentumokra vannak szabva.
- Osztályozók – Egyéni osztályozókat hozhat létre a dokumentumok előre meghatározott osztályokba való kategorizálásához.
Forráskód | Csomag (NPM) | API-referenciadokumentáció | Termékdokumentáció | Minták
Megjegyzés
A Dokumentumintelligencia szolgáltatást korábban "Azure Form Recognizer" néven ismerték. Ezek a szolgáltatások egy és ugyanaz, a @azure/ai-form-recognizer
JavaScripthez készült csomag pedig az Azure AI Document Intelligence szolgáltatás Azure SDK-csomagja. Íráskor folyamatban van az Azure Form Recognizer átnevezése az Azure AI-dokumentumintelligencia-ra, így a "Form Recognizer" és a "Dokumentumintelligencia" egyes esetekben felcserélhető.
Telepítse a(z) @azure/ai-form-recognizer
csomagot
Telepítse a JavaScripthez készült Azure Document Intelligence ügyfélkódtárat a következővel npm
:
npm install @azure/ai-form-recognizer
Első lépések
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();
Jelenleg támogatott környezetek
- A Node.jsLTS-verziói
- A Safari, a Chrome, az Edge és a Firefox legújabb verziói.
További részletekért tekintse meg támogatási szabályzatunkat .
Előfeltételek
- Azure-előfizetés
- Cognitive Services- vagy Form Recognizer-erőforrás. Ha létre kell hoznia az erőforrást, használhatja az Azure Portalt vagy az Azure CLI-t.
Form Recognizer-erőforrás létrehozása
Megjegyzés: Íráskor a Azure Portal továbbra is "Form Recognizer" erőforrásként hivatkozik az erőforrásra. A jövőben ez egy "Dokumentumintelligencia" erőforrásra frissíthető. Az alábbi dokumentáció egyelőre a "Form Recognizer" nevet használja.
A Dokumentumintelligencia a többszolgáltatásos és az egyszolgáltatásos hozzáférést is támogatja. Hozzon létre egy Cognitive Services-erőforrást, ha több Cognitive Services-szolgáltatást szeretne elérni egyetlen végpont/kulcs alatt. Csak Form Recognizer hozzáféréshez hozzon létre egy Form Recognizer erőforrást.
Az erőforrást a következővel hozhatja létre:
1. lehetőség:Azure Portal
2. lehetőség:Azure CLI.
Az alábbiakban egy példa látható arra, hogyan hozhat létre Form Recognizer erőforrást a parancssori felület használatával:
# 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
Ha az Azure CLI-t használja, cserélje le <your-resource-group-name>
a és <your-resource-name>
nevet a saját egyedi nevére:
az cognitiveservices account create --kind FormRecognizer --resource-group <your-resource-group-name> --name <your-resource-name> --sku <your-sku-name> --location <your-location>
Ügyfél létrehozása és hitelesítése
A Dokumentumintelligencia szolgáltatás használatához ki kell választania egy DocumentAnalysisClient
vagy egy példányt DocumentModelAdministrationClient
, és létre kell hoznia egy ilyen típusú példányt. Az alábbi példákban a következőt fogjuk használni DocumentAnalysisClient
: . Ahhoz, hogy létrehozhasson egy ügyfélpéldányt a Document Intelligence API eléréséhez, szüksége lesz a endpoint
Form Recognizer erőforrásra és egy credential
. Az ügyfelek az erőforrás API-kulcsával rendelkező vagy AzureKeyCredential
az TokenCredential
Azure Active Directory RBAC-t használó ügyfélalkalmazást használhatják az ügyfél engedélyezéséhez.
A Form Recognizer-erőforrás végpontját az Azure Portalon vagy az alábbi Azure CLI-kódrészlet használatával találja meg:
az cognitiveservices account show --name <your-resource-name> --resource-group <your-resource-group-name> --query "properties.endpoint"
API-kulcs használata
Az Azure Portalon keresse meg a Form Recognizer erőforrást, és kérjen le egy API-kulcsot, vagy használja az alábbi Azure CLI-kódrészletet:
Megjegyzés: Néha az API-kulcsot "előfizetői azonosítónak" vagy "előfizetési API-kulcsnak" is nevezik.
az cognitiveservices account keys list --resource-group <your-resource-group-name> --name <your-resource-name>
Ha már rendelkezik API-kulccsal és végpontokkal, az alábbiak szerint használhatja:
const { DocumentAnalysisClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
const client = new DocumentAnalysisClient("<endpoint>", new AzureKeyCredential("<API key>"));
Az Azure Active Directory használata
Az API-kulcsok hitelesítése a legtöbb példában használatos, de az azure-identitástár használatával is hitelesítheti az ügyfelet az Azure Active Directoryval. Az alább látható DefaultAzureCredential szolgáltató vagy az Azure SDK-hoz biztosított egyéb hitelesítőadat-szolgáltatók használatához telepítse a @azure/identity
csomagot:
npm install @azure/identity
A szolgáltatásnévvel történő hitelesítéshez regisztrálnia kell egy AAD-alkalmazást is, és hozzáférést kell adnia a szolgáltatáshoz úgy, hogy hozzárendeli a "Cognitive Services User"
szerepkört a szolgáltatásnévhez (megjegyzés: más szerepkörök, például "Owner"
nem biztosítják a szükséges engedélyeket, csak "Cognitive Services User"
elegendő a példák és a mintakód futtatásához).
Állítsa be az AAD-alkalmazás ügyfél-azonosítójának, bérlőazonosítójának és titkos ügyfélkulcsának értékeit környezeti változóként: 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());
Fő fogalmak
DocumentAnalysisClient
DocumentAnalysisClient
műveleteket biztosít a bemeneti dokumentumok egyéni és előre összeállított modellek használatával történő elemzéséhez. Három módszere van:
beginAnalyzeDocument
, amely adatokat nyer ki egy bemeneti dokumentumfájl-adatfolyamból a modellazonosítója által megadott egyéni vagy előre összeállított modell használatával. Az összes erőforrásban támogatott előre összeállított modellekkel és azok modellazonosítóival/kimeneteivel kapcsolatos információkért tekintse meg a modellek szolgáltatás dokumentációját.beginAnalyzeDocumentFromUrl
, amely ugyanazt a funkciót hajtja végre, mintbeginAnalyzeDocument
a , de fájlstream helyett egy fájl nyilvánosan elérhető URL-címét küldi el.
DocumentModelAdministrationClient
DocumentModelAdministrationClient
műveleteket biztosít az erőforrásban lévő modellek kezeléséhez (létrehozáshoz, olvasáshoz, listázáshoz és törléshez):
beginBuildDocumentModel
elindít egy műveletet, amely új dokumentummodellt hoz létre a saját betanítási adatkészletéből. A létrehozott modell egyéni séma szerint képes mezőket kinyerni. A betanítási adatoknak egy Azure Storage-tárolóban kell lenniük, és egy adott konvenciónak megfelelően kell rendszerezni. A címkék betanítási adatkészletekre való alkalmazásának részletesebb magyarázatáért tekintse meg a szolgáltatás betanítási adatkészletek létrehozásával kapcsolatos dokumentációját .beginComposeDocumentModel
elindít egy műveletet, amely több modellt egyetlen modellbe ír össze. Egyéni űrlapfelismeréshez használva az új összeállított modell először elvégzi a bemeneti dokumentumok besorolását annak meghatározásához, hogy melyik almodell a legmegfelelőbb.beginCopyModelTo
elindít egy műveletet egy egyéni modell egyik erőforrásból egy másikba (vagy akár ugyanarra az erőforrásra) történő másolásához. Szüksége van egyCopyAuthorization
célerőforrásból származóra, amely agetCopyAuthorization
metódussal hozható létre.getResourceDetails
lekéri az erőforrás korlátaival kapcsolatos információkat, például az egyéni modellek számát és az erőforrás által támogatott modellek maximális számát.getDocumentModel
,listDocumentModels
ésdeleteDocumentModel
engedélyezheti a modellek kezelését az erőforrásban.getOperation
éslistOperations
lehetővé teszi a modelllétrehozási műveletek állapotának megtekintését még a folyamatban lévő vagy sikertelen műveletek esetében is. A műveletek 24 órán át megmaradnak.
Vegye figyelembe, hogy a modellek a Document Intelligence szolgáltatás grafikus felhasználói felületével is létrehozhatók: Document Intelligence Studio.
A modell felépítését bemutató DocumentModelAdministrationClient
mintakódrészletek alább, a "Modell létrehozása" példaszakaszban találhatók.
Hosszú ideig futó műveletek
A hosszú ideig futó műveletek (LPO-k) olyan műveletek, amelyek egy kezdeti kérésből állnak, amelyet a szolgáltatásnak küldött egy művelet elindítására, majd egy bizonyos időközönként lekérdezve az eredményt annak megállapítására, hogy a művelet befejeződött-e, és hogy az sikertelen volt-e vagy sikeres volt. Végső soron az LRO vagy hibával hiúsul meg, vagy eredményt ad.
Az Azure AI Document Intelligenceben a modelleket létrehozó műveletek (beleértve a modellek másolását és írását), valamint az elemzési/adatkinyerési műveletek LPO-k. Az SDK-ügyfelek aszinkron begin<operation-name>
metódusokat biztosítanak, amelyek objektumokat adnak vissza Promise<PollerLike>
. Az PollerLike
objektum azt a műveletet jelöli, amely aszinkron módon fut a szolgáltatás infrastruktúráján, és egy program megvárhatja a művelet befejezését a metódusból begin<operation-name>
visszaadott lekérdezés meghívásával és várakozásávalpollUntilDone
. A kódrészleteket mintakódrészletekkel illusztráljuk, amelyek hosszú ideig futó műveletek használatát szemléltetik a következő szakaszban.
Példák
A következő szakasz számos JavaScript-kódrészletet tartalmaz, amely a Dokumentumintelligencia-ügyfélkódtárakban használt gyakori mintákat szemlélteti.
- Dokumentum elemzése modellazonosítóval
- Előre összeállított dokumentummodellek használata
- Az előre összeállított "elrendezés" használata
- Az előre összeállított "dokumentum" használata
- Az előre összeállított "olvasás" használata
- Modell létrehozása
- Modellek kezelése
Dokumentum elemzése modellazonosítóval
A beginAnalyzeDocument
metódus mezőket és táblaadatokat képes kinyerni a dokumentumokból. Az elemzés egyéni, saját adatokkal betanított modellt vagy a szolgáltatás által biztosított előre összeállított modellt használhat (lásd alább az Előre összeállított modellek használata című cikket). Az egyéni modell a saját dokumentumaihoz van igazítva, ezért csak a modell egyik dokumentumtípusával azonos szerkezetű dokumentumokkal szabad használni (több is lehet, például egy összeállított modellben).
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);
});
Dokumentum elemzése URL-címből
Az olvasható streamek helyett egy nyilvánosan elérhető URL-cím is megadható a beginAnalyzeDocumentFromUrl
metódussal. A "nyilvánosan hozzáférhető" azt jelenti, hogy az URL-forrásoknak elérhetőnek kell lenniük a szolgáltatás infrastruktúrájából (vagyis egy privát intranetes URL-címnek vagy fejléc- vagy tanúsítványalapú titkos kódokat használó URL-címeknek nem fognak működni, mivel a Dokumentumintelligencia szolgáltatásnak hozzá kell tudnia férni az URL-címhez). Maga az URL-cím azonban kódolhat egy titkos kódot, például egy Azure Storage-blob URL-címét, amely SAS-jogkivonatot tartalmaz a lekérdezési paraméterekben.
Előre összeállított dokumentummodellek használata
A beginAnalyzeDocument
metódus támogatja a mezők kinyerését bizonyos gyakori dokumentumokból, például nyugtákból, számlákból, névjegykártyákból, identitásdokumentumokból és egyebekből a Dokumentumintelligencia szolgáltatás által biztosított előre összeállított modellek használatával. Az előre összeállított modellek modellazonosító sztringekként (ugyanaz, mint az egyéni dokumentummodellek – lásd alább a többi előre összeállított modell szakaszt ) vagy egy DocumentModel
objektum használatával adható meg. A használatakor DocumentModel
a JavaScripthez készült Document Intelligence SDK sokkal erősebb TypeScript-típust biztosít az eredményként kinyert dokumentumokhoz a modell sémája alapján, és JavaScript-elnevezési konvenciók használatára lesz konvertálva.
Az aktuális szolgáltatás API-verziójához (2022-08-31
) tartozó példaobjektumok DocumentModel
a prebuilt
mintakönyvtárban találhatók. Az alábbi példában a PrebuiltReceiptModel
könyvtárban lévő [prebuilt-receipt.ts
] fájlból fogjuk használni.
Mivel a -based elemzés fő előnye DocumentModel
az erősebb TypeScript-típuskényszer, a következő minta TypeScriptben íródik az ECMAScript modul szintaxisával:
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);
});
Alternatív megoldásként, ahogy fentebb említettük, az erősebb visszatérési típust eredményező használata PrebuiltReceiptModel
helyett használhatja az előre összeállított nyugta modellazonosítóját ("előre összeállított nyugta") is, de a dokumentummezők nem lesznek erősen begépelve TypeScriptben, és a mezőnevek általában a "PascalCase" karaktert használják a "camelCase" helyett.
Egyéb előre összeállított modellek
Nem csak a nyugtákra van korlátozva! Van néhány előre összeállított modell, amelyek közül választhat, és továbbiak is elérhetők. Minden előre összeállított modell saját támogatott mezőkészlettel rendelkezik:
- Nyugták, a használatával
PrebuiltReceiptModel
(a fentiek szerint) vagy az előre összeállított nyugtamodell azonosítójával"prebuilt-receipt"
. - Névjegykártyák, vagy
PrebuiltBusinessCardModel
annak modellazonosítója"prebuilt-businessCard"
. - Számlák, a használatával
PrebuiltInvoiceModel
vagy annak modellazonosítójával"prebuilt-invoice"
. - Identitásdokumentumok (például jogosítványok és útlevelek), a használatával
PrebuiltIdDocumentModel
vagy annak modellazonosítójával"prebuilt-idDocument"
. - W2 adóűrlapok (Egyesült Államok), vagy
PrebuiltTaxUsW2Model
annak modellazonosítója"prebuilt-tax.us.w2"
. - Egészségbiztosítási kártyák (Egyesült Államok), [][samples-prebuilt-healthinsurancecard.us] vagy modellazonosítójának
"prebuilt-healthInsuranceCard.us"
használatávalPrebuiltHealthInsuranceCardUsModel
.
A fenti előre összeállított modellek mindegyike létrehoz documents
(a modell mezőséma kinyert példányai). Három előre összeállított modell is létezik, amelyek nem rendelkeznek mezősémákval, ezért nem hoznak létre documents
. Ezek a következők:
- Az előre összeállított elrendezési modell (lásd alább az "elrendezés" előre összeállítottt ), amely információkat nyer ki az alapvető elrendezési (OCR) elemekről, például lapokról és táblázatokról.
- Az előre összeállított Általános dokumentummodell (lásd az alábbi "dokumentum" előre összeállított dokumentumot ), amely kulcs-érték párokat (az oldalelemek közötti irányított társításokat, például címkézett elemeket) ad hozzá az elrendezési modell által létrehozott információkhoz.
- Az előre összeállított olvasási modell (lásd alább az "olvasási" előre összeállított modellt), amely csak szöveges elemeket, például lapszavakat és sorokat, valamint a dokumentum nyelvével kapcsolatos információkat nyer ki.
Az összes ilyen modell mezőivel kapcsolatos információkért tekintse meg a szolgáltatás dokumentációját az elérhető előre összeállított modellekről.
Az összes előre összeállított modell mezői programozott módon is elérhetők az getDocumentModel
eredményben szereplő mező metódusával DocumentModelAdministrationClient
(a modellazonosítójuk alapján) és vizsgálatával docTypes
.
Az előre összeállított "elrendezés" használata
A "prebuilt-layout"
modell csak a dokumentum alapvető elemeit nyeri ki, például a lapokat (amelyek szöveges szavakból/vonalakból és kijelölési jelekből állnak), táblázatokból és vizuális szövegstílusokból, valamint határoló régiókból és a bemeneti dokumentumok szövegtartalmából. Biztosítunk egy nevű, erős típusú példányt DocumentModel
PrebuiltLayoutModel
, amely meghívja ezt a modellt, vagy mint mindig, a modellazonosítóját "prebuilt-layout"
is használhatja közvetlenül.
Mivel a -based elemzés fő előnye DocumentModel
az erősebb TypeScript-típuskényszer, a következő minta TypeScriptben íródik az ECMAScript modul szintaxisával:
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);
});
Az előre összeállított "dokumentum" használata
A "prebuilt-document"
modell a kulcs-érték párokra (az oldalelemek közötti irányított társításokra, például a címkézett mezőkre) vonatkozó információkat nyer ki az elrendezés kinyerési módszere által előállított tulajdonságok mellett. Ez az előre összeállított (általános) dokumentummodell hasonló funkciókat biztosít a Dokumentumintelligencia szolgáltatás korábbi iterációiban címkeadatok nélkül betanított egyéni modellekhez, de most már egy olyan előre összeállított modellként érhető el, amely számos dokumentummal működik. Biztosítunk egy nevű, erős típusú példányt DocumentModel
PrebuiltDocumentModel
, amely meghívja ezt a modellt, vagy mint mindig, a modellazonosítóját "prebuilt-document"
is használhatja közvetlenül.
Mivel a -based elemzés fő előnye DocumentModel
az erősebb TypeScript-típuskényszer, a következő minta TypeScriptben íródik az ECMAScript modul szintaxisával:
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);
});
Az előre összeállított "olvasás" használata
A "prebuilt-read"
modell szöveges információkat nyer ki egy dokumentumban, például szavakat és bekezdéseket, és elemzi a szöveg nyelvét és írási stílusát (például kézzel írt és típuskészlet). Biztosítunk egy nevű, erős típusú példányt DocumentModel
PrebuiltReadModel
, amely meghívja ezt a modellt, vagy mint mindig, a modellazonosítóját "prebuilt-read"
is használhatja közvetlenül.
Mivel a -based elemzés fő előnye DocumentModel
az erősebb TypeScript-típuskényszer, a következő minta TypeScriptben íródik az ECMAScript modul szintaxisával:
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);
});
Dokumentum besorolása
A Dokumentumintelligencia szolgáltatás támogatja azokat az egyéni dokumentumosztályozókat, amelyek betanítási adatkészlet alapján előre meghatározott kategóriákba sorolhatják a dokumentumokat. A dokumentumok egyéni osztályozóval osztályozhatók a beginClassifyDocument
metódussal DocumentAnalysisClient
. A fentiekhez hasonlóan beginAnalyzeDocument
ez a metódus elfogadja a besorolni kívánt dokumentumot tartalmazó fájlt vagy streamet, és van egy beginClassifyDocumentFromUrl
megfelelője, amely nyilvánosan elérhető URL-címet fogad el egy dokumentumhoz.
Az alábbi minta bemutatja, hogyan osztályozhat egy dokumentumot egyéni osztályozó használatával:
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);
});
Az egyéni osztályozók betanításával kapcsolatos információkért tekintse meg az osztályozó betanításáról szóló szakaszt a következő szakasz végén.
Modell létrehozása
Az SDK a osztály használatával is támogatja a DocumentModelAdministrationClient
modellek létrehozását. A címkézett betanítási adatokból létrehozott modell egy új modellt hoz létre, amely be van tanítva a saját dokumentumain, és az eredményként kapott modell képes lesz felismerni a dokumentumok struktúrájából származó értékeket. A modellkészítési művelet a betanítási dokumentumokat tartalmazó Azure Storage Blob-tároló SAS-kódolású URL-címét fogadja el. A Dokumentumintelligencia szolgáltatás infrastruktúrája beolvassa a tárolóban lévő fájlokat, és létrehoz egy modellt a tartalmuk alapján. A betanítási adattárolók létrehozásával és szerkezetével kapcsolatos további részletekért tekintse meg a Document Intelligence service modell készítésére vonatkozó dokumentációját.
Bár ezeket a módszereket programozott modellek létrehozásához biztosítjuk, a Document Intelligence szolgáltatás csapata létrehozott egy interaktív webalkalmazást, a Document Intelligence Studiót, amely lehetővé teszi modellek létrehozását és kezelését a weben.
A következő program például létrehoz egy egyéni dokumentummodellt egy SAS-kódolású URL-cím használatával egy meglévő Azure Storage-tárolóhoz:
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);
});
Az egyéni osztályozók a metódus beginBuildDocumentModel
helyett hasonló módon vannak felépítvebeginBuildDocumentClassifier
. Az egyéni osztályozók létrehozásával kapcsolatos további információkért tekintse meg a buildosztályozó mintáját , mivel a bemeneti betanítási adatok kissé eltérő formátumban vannak megadva. Az egyéni osztályozók betanítási adatkészletének létrehozásával kapcsolatos információkért tekintse meg a Dokumentumintelligencia szolgáltatás dokumentációját.
Modellek kezelése
DocumentModelAdministrationClient
több módszert is kínál a modellek eléréséhez és listázására. Az alábbi példa bemutatja, hogyan lehet iterálni az erőforrás modelljeit (ez magában foglalja az erőforrás egyéni modelljeit és az összes erőforrásra jellemző előre összeállított modelleket is), hogyan kérhet le egy modellt azonosító alapján, és hogyan törölhet egy modellt.
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);
});
Hasonló módszerek listDocumentClassifiers
és getDocumentClassifier
elérhetőek az egyéni osztályozók listázásához és lekéréséhez, valamint deleteDocumentClassifier
az egyéni osztályozók törléséhez.
Hibaelhárítás
A hibaelhárítással kapcsolatos segítségért tekintse meg a hibaelhárítási útmutatót.
Naplózás
A naplózás engedélyezése hasznos információkat deríthet fel a hibákról. A HTTP-kérések és -válaszok naplójának megtekintéséhez állítsa a környezeti változót értékre AZURE_LOG_LEVEL
info
. A naplózás futásidőben is engedélyezhető a következő hívásával setLogLevel
@azure/logger
:
const { setLogLevel } = require("@azure/logger");
setLogLevel("info");
A naplók engedélyezésére vonatkozó részletesebb utasításokért tekintse meg a @azure/logger csomag dokumentációját.
Következő lépések
Tekintse meg a mintakönyvtárat részletes kódmintákért, amelyek bemutatják a kódtár használatát, beleértve a fenti "Példák" szakaszban nem látható funkciókat és metódusokat, például a modellek másolását és írását, a modellkezelési műveletek listázását és a modellek törlését.
Közreműködés
Ha hozzá szeretne járulni ehhez a kódtárhoz, olvassa el a közreműködői útmutatót , amelyből többet is megtudhat a kód buildeléséhez és teszteléséhez.
Azure SDK for JavaScript
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: