DocumentAnalysisClient Classe
DocumentAnalysisClient analizza le informazioni da documenti e immagini e classifica i documenti. È l'interfaccia da usare per l'analisi con modelli predefiniti (ricevute, biglietti da visita, fatture, documenti di identità, tra gli altri), analisi del layout da documenti, analisi dei tipi di documento generali e analisi di documenti personalizzati con modelli predefiniti (per visualizzare un elenco completo di modelli supportati dal servizio, vedere: https://aka.ms/azsdk/formrecognizer/models). Fornisce metodi diversi in base agli input da un URL e dagli input di un flusso.
Nota
DocumentAnalysisClient deve essere usato con le versioni dell'API
2022-08-31 e fino. Per usare le versioni <API =v2.1, creare un'istanza di FormRecognizerClient.
Novità nella versione 2022-08-31: DocumentAnalysisClient e i relativi metodi client.
- Ereditarietà
-
azure.ai.formrecognizer._form_base_client.FormRecognizerClientBaseDocumentAnalysisClient
Costruttore
DocumentAnalysisClient(endpoint: str, credential: AzureKeyCredential | TokenCredential, **kwargs: Any)
Parametri
- endpoint
- str
Endpoint di Servizi cognitivi supportati (protocollo e nome host, ad esempio: https://westus2.api.cognitive.microsoft.com).
- credential
- AzureKeyCredential oppure TokenCredential
Credenziali necessarie per la connessione del client ad Azure. Si tratta di un'istanza di AzureKeyCredential se si usa una chiave API o una credenziale token da identity.
- api_version
- str oppure DocumentAnalysisApiVersion
Versione API del servizio da usare per le richieste. Il valore predefinito viene impostato sulla versione più recente del servizio. L'impostazione su una versione precedente può comportare una riduzione della compatibilità delle funzionalità. Per usare le versioni <API =v2.1, creare un'istanza di FormRecognizerClient.
Esempio
Creazione del documentoAnalysisClient con un endpoint e una chiave API.
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(endpoint, AzureKeyCredential(key))
Creazione di DocumentAnalysisClient con credenziali del token.
"""DefaultAzureCredential will use the values from these environment
variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
"""
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.identity import DefaultAzureCredential
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
credential = DefaultAzureCredential()
document_analysis_client = DocumentAnalysisClient(endpoint, credential)
Metodi
begin_analyze_document |
Analizzare il testo del campo e i valori semantici da un documento specificato. Novità nella versione 2023-07-31: argomento delle funzionalità . |
begin_analyze_document_from_url |
Analizzare il testo del campo e i valori semantici da un documento specificato. L'input deve essere il percorso (URL) del documento da analizzare. Novità nella versione 2023-07-31: argomento delle funzionalità . |
begin_classify_document |
Classificare un documento usando un classificatore di documenti. Per altre informazioni su come creare un modello di classificatore personalizzato, vedere https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. Novità nella versione 2023-07-31: metodo client begin_classify_document . |
begin_classify_document_from_url |
Classificare un documento specificato con un classificatore di documenti. Per altre informazioni su come creare un modello di classificatore personalizzato, vedere https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. L'input deve essere il percorso (URL) del documento da classificare. Novità nella versione 2023-07-31: metodo client begin_classify_document_from_url . |
close |
Chiudere la DocumentAnalysisClient sessione. |
send_request |
Esegue una richiesta di rete usando la pipeline esistente del client. L'URL della richiesta può essere relativo all'URL di base. La versione dell'API del servizio usata per la richiesta è uguale a quella del client, a meno che non sia specificato in altro modo. L'override della versione dell'API configurata del client nell'URL relativo è supportata nel client con API versione 2022-08-31 e versioni successive. Override nell'URL assoluto supportato nel client con qualsiasi versione dell'API. Questo metodo non genera se la risposta è un errore; per generare un'eccezione, chiamare raise_for_status() nell'oggetto risposta restituito. Per altre informazioni su come inviare richieste personalizzate con questo metodo, vedere https://aka.ms/azsdk/dpcodegen/python/send_request. |
begin_analyze_document
Analizzare il testo del campo e i valori semantici da un documento specificato.
Novità nella versione 2023-07-31: argomento delle funzionalità .
begin_analyze_document(model_id: str, document: bytes | IO[bytes], **kwargs: Any) -> LROPoller[AnalyzeResult]
Parametri
- model_id
- str
Un identificatore di modello univoco può essere passato come stringa. Usare questa opzione per specificare l'ID modello personalizzato o l'ID modello predefinito. Gli ID modello predefiniti supportati sono disponibili qui: https://aka.ms/azsdk/formrecognizer/models
Flusso di file o byte. Per i tipi di file supportati dal servizio, vedere: https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Numeri di pagina personalizzati per documenti a più pagine(PDF/TIFF). Immettere i numeri di pagina e/o gli intervalli di pagine che si desidera ottenere nel risultato. Per un intervallo di pagine, usare un trattino, ad esempio pages="1-3, 5-6". Separare ogni numero di pagina o intervallo con una virgola.
- locale
- str
Hint delle impostazioni locali del documento di input. Vedere le impostazioni locali supportate qui: https://aka.ms/azsdk/formrecognizer/supportedlocales.
Restituisce
Istanza di un'istanza di LROPoller. Chiamare result() nell'oggetto poller per restituire un AnalyzeResultoggetto .
Tipo restituito
Eccezioni
Esempio
Analizzare una fattura. Per altri esempi, vedere la cartella esempi .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_analyze_document(
"prebuilt-invoice", document=f, locale="en-US"
)
invoices = poller.result()
for idx, invoice in enumerate(invoices.documents):
print(f"--------Analyzing invoice #{idx + 1}--------")
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
f"Vendor Name: {vendor_name.value} has confidence: {vendor_name.confidence}"
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
f"Vendor Address: {vendor_address.value} has confidence: {vendor_address.confidence}"
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
f"Vendor Address Recipient: {vendor_address_recipient.value} has confidence: {vendor_address_recipient.confidence}"
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
f"Customer Name: {customer_name.value} has confidence: {customer_name.confidence}"
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
f"Customer Id: {customer_id.value} has confidence: {customer_id.confidence}"
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
f"Customer Address: {customer_address.value} has confidence: {customer_address.confidence}"
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
f"Customer Address Recipient: {customer_address_recipient.value} has confidence: {customer_address_recipient.confidence}"
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
f"Invoice Id: {invoice_id.value} has confidence: {invoice_id.confidence}"
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
f"Invoice Date: {invoice_date.value} has confidence: {invoice_date.confidence}"
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
f"Invoice Total: {invoice_total.value} has confidence: {invoice_total.confidence}"
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(f"Due Date: {due_date.value} has confidence: {due_date.confidence}")
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
f"Purchase Order: {purchase_order.value} has confidence: {purchase_order.confidence}"
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
f"Billing Address: {billing_address.value} has confidence: {billing_address.confidence}"
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
f"Billing Address Recipient: {billing_address_recipient.value} has confidence: {billing_address_recipient.confidence}"
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
f"Shipping Address: {shipping_address.value} has confidence: {shipping_address.confidence}"
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
f"Shipping Address Recipient: {shipping_address_recipient.value} has confidence: {shipping_address_recipient.confidence}"
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
print(f"...Item #{idx + 1}")
item_description = item.value.get("Description")
if item_description:
print(
f"......Description: {item_description.value} has confidence: {item_description.confidence}"
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
f"......Quantity: {item_quantity.value} has confidence: {item_quantity.confidence}"
)
unit = item.value.get("Unit")
if unit:
print(f"......Unit: {unit.value} has confidence: {unit.confidence}")
unit_price = item.value.get("UnitPrice")
if unit_price:
unit_price_code = unit_price.value.code if unit_price.value.code else ""
print(
f"......Unit Price: {unit_price.value}{unit_price_code} has confidence: {unit_price.confidence}"
)
product_code = item.value.get("ProductCode")
if product_code:
print(
f"......Product Code: {product_code.value} has confidence: {product_code.confidence}"
)
item_date = item.value.get("Date")
if item_date:
print(
f"......Date: {item_date.value} has confidence: {item_date.confidence}"
)
tax = item.value.get("Tax")
if tax:
print(f"......Tax: {tax.value} has confidence: {tax.confidence}")
amount = item.value.get("Amount")
if amount:
print(
f"......Amount: {amount.value} has confidence: {amount.confidence}"
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(f"Subtotal: {subtotal.value} has confidence: {subtotal.confidence}")
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
f"Total Tax: {total_tax.value} has confidence: {total_tax.confidence}"
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
f"Previous Unpaid Balance: {previous_unpaid_balance.value} has confidence: {previous_unpaid_balance.confidence}"
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
f"Amount Due: {amount_due.value} has confidence: {amount_due.confidence}"
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
f"Service Start Date: {service_start_date.value} has confidence: {service_start_date.confidence}"
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
f"Service End Date: {service_end_date.value} has confidence: {service_end_date.confidence}"
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
f"Service Address: {service_address.value} has confidence: {service_address.confidence}"
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
f"Service Address Recipient: {service_address_recipient.value} has confidence: {service_address_recipient.confidence}"
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
f"Remittance Address: {remittance_address.value} has confidence: {remittance_address.confidence}"
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
f"Remittance Address Recipient: {remittance_address_recipient.value} has confidence: {remittance_address_recipient.confidence}"
)
Analizzare un documento personalizzato. Per altri esempi, vedere la cartella esempi .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
model_id = os.getenv("CUSTOM_BUILT_MODEL_ID", custom_model_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
# Make sure your document's type is included in the list of document types the custom model can analyze
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_analyze_document(
model_id=model_id, document=f
)
result = poller.result()
for idx, document in enumerate(result.documents):
print(f"--------Analyzing document #{idx + 1}--------")
print(f"Document has type {document.doc_type}")
print(f"Document has document type confidence {document.confidence}")
print(f"Document was analyzed with model with ID {result.model_id}")
for name, field in document.fields.items():
field_value = field.value if field.value else field.content
print(
f"......found field of type '{field.value_type}' with value '{field_value}' and with confidence {field.confidence}"
)
# iterate over tables, lines, and selection marks on each page
for page in result.pages:
print(f"\nLines found on page {page.page_number}")
for line in page.lines:
print(f"...Line '{line.content}'")
for word in page.words:
print(f"...Word '{word.content}' has a confidence of {word.confidence}")
if page.selection_marks:
print(f"\nSelection marks found on page {page.page_number}")
for selection_mark in page.selection_marks:
print(
f"...Selection mark is '{selection_mark.state}' and has a confidence of {selection_mark.confidence}"
)
for i, table in enumerate(result.tables):
print(f"\nTable {i + 1} can be found on page:")
for region in table.bounding_regions:
print(f"...{region.page_number}")
for cell in table.cells:
print(
f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
)
print("-----------------------------------")
begin_analyze_document_from_url
Analizzare il testo del campo e i valori semantici da un documento specificato. L'input deve essere il percorso (URL) del documento da analizzare.
Novità nella versione 2023-07-31: argomento delle funzionalità .
begin_analyze_document_from_url(model_id: str, document_url: str, **kwargs: Any) -> LROPoller[AnalyzeResult]
Parametri
- model_id
- str
Un identificatore di modello univoco può essere passato come stringa. Usare questa opzione per specificare l'ID modello personalizzato o l'ID modello predefinito. Gli ID modello predefiniti supportati sono disponibili qui: https://aka.ms/azsdk/formrecognizer/models
- document_url
- str
URL del documento da analizzare. L'input deve essere un URL valido e correttamente codificato (ad esempio codificare caratteri speciali, ad esempio spazi vuoti) e URL accessibile pubblicamente. Per i tipi di file supportati dal servizio, vedere: https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Numeri di pagina personalizzati per documenti a più pagine(PDF/TIFF). Immettere i numeri di pagina e/o gli intervalli di pagine che si desidera ottenere nel risultato. Per un intervallo di pagine, usare un trattino, ad esempio pages="1-3, 5-6". Separare ogni numero di pagina o intervallo con una virgola.
- locale
- str
Hint delle impostazioni locali del documento di input. Vedere le impostazioni locali supportate qui: https://aka.ms/azsdk/formrecognizer/supportedlocales.
Restituisce
Istanza di un'istanza di LROPoller. Chiamare result() nell'oggetto poller per restituire un AnalyzeResultoggetto .
Tipo restituito
Eccezioni
Esempio
Analizzare una ricevuta. Per altri esempi, vedere la cartella esempi .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/receipt/contoso-receipt.png"
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-receipt", document_url=url
)
receipts = poller.result()
for idx, receipt in enumerate(receipts.documents):
print(f"--------Analysis of receipt #{idx + 1}--------")
print(f"Receipt type: {receipt.doc_type if receipt.doc_type else 'N/A'}")
merchant_name = receipt.fields.get("MerchantName")
if merchant_name:
print(
f"Merchant Name: {merchant_name.value} has confidence: "
f"{merchant_name.confidence}"
)
transaction_date = receipt.fields.get("TransactionDate")
if transaction_date:
print(
f"Transaction Date: {transaction_date.value} has confidence: "
f"{transaction_date.confidence}"
)
if receipt.fields.get("Items"):
print("Receipt items:")
for idx, item in enumerate(receipt.fields.get("Items").value):
print(f"...Item #{idx + 1}")
item_description = item.value.get("Description")
if item_description:
print(
f"......Item Description: {item_description.value} has confidence: "
f"{item_description.confidence}"
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
f"......Item Quantity: {item_quantity.value} has confidence: "
f"{item_quantity.confidence}"
)
item_price = item.value.get("Price")
if item_price:
print(
f"......Individual Item Price: {item_price.value} has confidence: "
f"{item_price.confidence}"
)
item_total_price = item.value.get("TotalPrice")
if item_total_price:
print(
f"......Total Item Price: {item_total_price.value} has confidence: "
f"{item_total_price.confidence}"
)
subtotal = receipt.fields.get("Subtotal")
if subtotal:
print(f"Subtotal: {subtotal.value} has confidence: {subtotal.confidence}")
tax = receipt.fields.get("TotalTax")
if tax:
print(f"Total tax: {tax.value} has confidence: {tax.confidence}")
tip = receipt.fields.get("Tip")
if tip:
print(f"Tip: {tip.value} has confidence: {tip.confidence}")
total = receipt.fields.get("Total")
if total:
print(f"Total: {total.value} has confidence: {total.confidence}")
print("--------------------------------------")
begin_classify_document
Classificare un documento usando un classificatore di documenti. Per altre informazioni su come creare un modello di classificatore personalizzato, vedere https://aka.ms/azsdk/formrecognizer/buildclassifiermodel.
Novità nella versione 2023-07-31: metodo client begin_classify_document .
begin_classify_document(classifier_id: str, document: bytes | IO[bytes], **kwargs: Any) -> LROPoller[AnalyzeResult]
Parametri
- classifier_id
- str
Un identificatore univoco del classificatore di documenti può essere passato come stringa.
Flusso di file o byte. Per i tipi di file supportati dal servizio, vedere: https://aka.ms/azsdk/formrecognizer/supportedfiles.
Restituisce
Istanza di un'istanza di LROPoller. Chiamare result() nell'oggetto poller per restituire un AnalyzeResultoggetto .
Tipo restituito
Eccezioni
Esempio
Classificare un documento. Per altri esempi, vedere la cartella esempi .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
classifier_id = os.getenv("CLASSIFIER_ID", classifier_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
with open(path_to_sample_documents, "rb") as f:
poller = document_analysis_client.begin_classify_document(
classifier_id, document=f
)
result = poller.result()
print("----Classified documents----")
for doc in result.documents:
print(
f"Found document of type '{doc.doc_type or 'N/A'}' with a confidence of {doc.confidence} contained on "
f"the following pages: {[region.page_number for region in doc.bounding_regions]}"
)
begin_classify_document_from_url
Classificare un documento specificato con un classificatore di documenti. Per altre informazioni su come creare un modello di classificatore personalizzato, vedere https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. L'input deve essere il percorso (URL) del documento da classificare.
Novità nella versione 2023-07-31: metodo client begin_classify_document_from_url .
begin_classify_document_from_url(classifier_id: str, document_url: str, **kwargs: Any) -> LROPoller[AnalyzeResult]
Parametri
- classifier_id
- str
Un identificatore univoco del classificatore di documenti può essere passato come stringa.
- document_url
- str
URL del documento da classificare. L'input deve essere un valore valido e codificato correttamente (ad esempio codificare caratteri speciali, ad esempio spazi vuoti) e l'URL accessibile pubblicamente di uno dei formati supportati: https://aka.ms/azsdk/formrecognizer/supportedfiles.
Restituisce
Istanza di un'istanza di LROPoller. Chiamare result() nell'oggetto poller per restituire un AnalyzeResultoggetto .
Tipo restituito
Eccezioni
Esempio
Classificare un documento. Per altri esempi, vedere la cartella esempi .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
classifier_id = os.getenv("CLASSIFIER_ID", classifier_id)
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/forms/IRS-1040.pdf"
poller = document_analysis_client.begin_classify_document_from_url(
classifier_id, document_url=url
)
result = poller.result()
print("----Classified documents----")
for doc in result.documents:
print(
f"Found document of type '{doc.doc_type or 'N/A'}' with a confidence of {doc.confidence} contained on "
f"the following pages: {[region.page_number for region in doc.bounding_regions]}"
)
close
send_request
Esegue una richiesta di rete usando la pipeline esistente del client.
L'URL della richiesta può essere relativo all'URL di base. La versione dell'API del servizio usata per la richiesta è uguale a quella del client, a meno che non sia specificato in altro modo. L'override della versione dell'API configurata del client nell'URL relativo è supportata nel client con API versione 2022-08-31 e versioni successive. Override nell'URL assoluto supportato nel client con qualsiasi versione dell'API. Questo metodo non genera se la risposta è un errore; per generare un'eccezione, chiamare raise_for_status() nell'oggetto risposta restituito. Per altre informazioni su come inviare richieste personalizzate con questo metodo, vedere https://aka.ms/azsdk/dpcodegen/python/send_request.
send_request(request: HttpRequest, *, stream: bool = False, **kwargs) -> HttpResponse
Parametri
- stream
- bool
Indica se il payload della risposta verrà trasmesso. Il valore predefinito è False.
Restituisce
Risposta della chiamata di rete. Non esegue la gestione degli errori nella risposta.
Tipo restituito
Eccezioni
Azure SDK for Python