DocumentAnalysisClient Clase
DocumentAnalysisClient analiza la información de documentos e imágenes y clasifica los documentos. Es la interfaz que se usa para analizar con modelos precompilados (recibos, tarjetas de presentación, facturas, documentos de identidad, entre otros), análisis del diseño de documentos, análisis de tipos de documentos generales y análisis de documentos personalizados con modelos compilados (para ver una lista completa de los modelos admitidos por el servicio, consulte: https://aka.ms/azsdk/formrecognizer/models). Proporciona diferentes métodos basados en entradas de una dirección URL y entradas de una secuencia.
Nota:
DocumentAnalysisClient debe usarse con versiones de API
2022-08-31 y versiones posteriores. Para usar versiones <de API =v2.1, cree una instancia de FormRecognizerClient.
Novedad de la versión 2022-08-31: DocumentAnalysisClient y sus métodos de cliente.
- Herencia
-
azure.ai.formrecognizer.aio._form_base_client_async.FormRecognizerClientBaseAsyncDocumentAnalysisClient
Constructor
DocumentAnalysisClient(endpoint: str, credential: AzureKeyCredential | AsyncTokenCredential, **kwargs: Any)
Parámetros
- endpoint
- str
Puntos de conexión de Cognitive Services admitidos (protocolo y nombre de host, por ejemplo: https://westus2.api.cognitive.microsoft.com).
- credential
- AzureKeyCredential o TokenCredential
Credenciales necesarias para que el cliente se conecte a Azure. Se trata de una instancia de AzureKeyCredential si se usa una clave de API o una credencial de token de identity.
- api_version
- str o DocumentAnalysisApiVersion
La versión de API del servicio que se va a usar para las solicitudes. El valor predeterminado es la versión más reciente del servicio. Establecer en una versión anterior puede dar lugar a una reducción de la compatibilidad de características. Para usar versiones <de API =v2.1, cree una instancia de FormRecognizerClient.
Ejemplos
Creación de DocumentAnalysisClient con un punto de conexión y una clave de API.
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio import DocumentAnalysisClient
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
key = os.environ["AZURE_FORM_RECOGNIZER_KEY"]
document_analysis_client = DocumentAnalysisClient(endpoint, AzureKeyCredential(key))
Creación de DocumentAnalysisClient con una credencial de token.
"""DefaultAzureCredential will use the values from these environment
variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
"""
from azure.ai.formrecognizer.aio import DocumentAnalysisClient
from azure.identity.aio import DefaultAzureCredential
endpoint = os.environ["AZURE_FORM_RECOGNIZER_ENDPOINT"]
credential = DefaultAzureCredential()
document_analysis_client = DocumentAnalysisClient(endpoint, credential)
Métodos
begin_analyze_document |
Analice el texto de campo y los valores semánticos de un documento determinado. Novedad de la versión 2023-07-31: el argumento de palabra clave features . |
begin_analyze_document_from_url |
Analice el texto de campo y los valores semánticos de un documento determinado. La entrada debe ser la ubicación (URL) del documento que se va a analizar. Novedad de la versión 2023-07-31: el argumento de palabra clave features . |
begin_classify_document |
Clasifique un documento mediante un clasificador de documentos. Para obtener más información sobre cómo crear un modelo de clasificador personalizado, vea https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. Novedad de la versión 2023-07-31: el método de cliente begin_classify_document . |
begin_classify_document_from_url |
Clasifique un documento determinado con un clasificador de documentos. Para obtener más información sobre cómo crear un modelo de clasificador personalizado, vea https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. La entrada debe ser la ubicación (URL) del documento que se va a clasificar. Novedad de la versión 2023-07-31: el método de cliente begin_classify_document_from_url . |
close |
Cierre la DocumentAnalysisClient sesión. |
send_request |
Ejecuta una solicitud de red mediante la canalización existente del cliente. La dirección URL de la solicitud puede ser relativa a la dirección URL base. La versión de la API de servicio usada para la solicitud es la misma que la del cliente, a menos que se especifique lo contrario. La invalidación de la versión de API configurada del cliente en la dirección URL relativa se admite en el cliente con la versión de API 2022-08-31 y posteriores. Invalidación en la dirección URL absoluta admitida en el cliente con cualquier versión de API. Este método no genera si la respuesta es un error; para generar una excepción, llame a raise_for_status() en el objeto de respuesta devuelto. Para obtener más información sobre cómo enviar solicitudes personalizadas con este método, vea https://aka.ms/azsdk/dpcodegen/python/send_request. |
begin_analyze_document
Analice el texto de campo y los valores semánticos de un documento determinado.
Novedad de la versión 2023-07-31: el argumento de palabra clave features .
async begin_analyze_document(model_id: str, document: bytes | IO[bytes], **kwargs: Any) -> AsyncLROPoller[AnalyzeResult]
Parámetros
- model_id
- str
Se puede pasar un identificador de modelo único como una cadena. Úselo para especificar el identificador de modelo personalizado o el identificador del modelo precompilado. Los identificadores de modelo precompilados admitidos se pueden encontrar aquí: https://aka.ms/azsdk/formrecognizer/models
Secuencia de archivos o bytes. Para conocer los tipos de archivo admitidos por el servicio, vea: https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Números de página personalizados para documentos de varias páginas (PDF/TIFF). Escriba los números de página o los intervalos de páginas que desea obtener en el resultado. Para un intervalo de páginas, use un guión, como pages="1-3, 5-6". Separe cada número de página o intervalo con una coma.
- locale
- str
Sugerencia de configuración regional del documento de entrada. Consulte las configuraciones regionales admitidas aquí: https://aka.ms/azsdk/formrecognizer/supportedlocales.
Devoluciones
Una instancia de AsyncLROPoller. Llame a result() en el objeto poller para devolver un AnalyzeResult.
Tipo de valor devuelto
Excepciones
Ejemplos
Analice una factura. Para obtener más ejemplos, consulte la carpeta samples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio 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)
)
async with document_analysis_client:
with open(path_to_sample_documents, "rb") as f:
poller = await document_analysis_client.begin_analyze_document(
"prebuilt-invoice", document=f, locale="en-US"
)
invoices = await 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}"
)
Analice un documento personalizado. Para obtener más ejemplos, consulte la carpeta samples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio 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)
)
async with document_analysis_client:
# 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 = await document_analysis_client.begin_analyze_document(
model_id=model_id, document=f
)
result = await 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
Analice el texto de campo y los valores semánticos de un documento determinado. La entrada debe ser la ubicación (URL) del documento que se va a analizar.
Novedad de la versión 2023-07-31: el argumento de palabra clave features .
async begin_analyze_document_from_url(model_id: str, document_url: str, **kwargs: Any) -> AsyncLROPoller[AnalyzeResult]
Parámetros
- model_id
- str
Se puede pasar un identificador de modelo único como una cadena. Úselo para especificar el identificador de modelo personalizado o el identificador del modelo precompilado. Los identificadores de modelo precompilados admitidos se pueden encontrar aquí: https://aka.ms/azsdk/formrecognizer/models
- document_url
- str
Dirección URL del documento que se va a analizar. La entrada debe ser válida y codificada correctamente (es decir, codificar caracteres especiales, como espacios vacíos) y una dirección URL accesible públicamente. Para conocer los tipos de archivo admitidos por el servicio, vea: https://aka.ms/azsdk/formrecognizer/supportedfiles.
- pages
- str
Números de página personalizados para documentos de varias páginas (PDF/TIFF). Escriba los números de página o los intervalos de páginas que desea obtener en el resultado. Para un intervalo de páginas, use un guión, como pages="1-3, 5-6". Separe cada número de página o intervalo con una coma.
- locale
- str
Sugerencia de configuración regional del documento de entrada. Consulte las configuraciones regionales admitidas aquí: https://aka.ms/azsdk/formrecognizer/supportedlocales.
Devoluciones
Una instancia de AsyncLROPoller. Llame a result() en el objeto poller para devolver un AnalyzeResult.
Tipo de valor devuelto
Excepciones
Ejemplos
Analice un recibo. Para obtener más ejemplos, consulte la carpeta samples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio 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)
)
async with document_analysis_client:
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/receipt/contoso-receipt.png"
poller = await document_analysis_client.begin_analyze_document_from_url(
"prebuilt-receipt", document_url=url
)
receipts = await 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
Clasifique un documento mediante un clasificador de documentos. Para obtener más información sobre cómo crear un modelo de clasificador personalizado, vea https://aka.ms/azsdk/formrecognizer/buildclassifiermodel.
Novedad de la versión 2023-07-31: el método de cliente begin_classify_document .
async begin_classify_document(classifier_id: str, document: bytes | IO[bytes], **kwargs: Any) -> AsyncLROPoller[AnalyzeResult]
Parámetros
- classifier_id
- str
Un identificador de clasificador de documentos único se puede pasar como una cadena.
Secuencia de archivos o bytes. Para conocer los tipos de archivo admitidos por el servicio, vea: https://aka.ms/azsdk/formrecognizer/supportedfiles.
Devoluciones
Una instancia de AsyncLROPoller. Llame a result() en el objeto poller para devolver un AnalyzeResult.
Tipo de valor devuelto
Excepciones
Ejemplos
Clasificar un documento. Para obtener más ejemplos, consulte la carpeta samples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio 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)
)
async with document_analysis_client:
with open(path_to_sample_documents, "rb") as f:
poller = await document_analysis_client.begin_classify_document(
classifier_id, document=f
)
result = await 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
Clasifique un documento determinado con un clasificador de documentos. Para obtener más información sobre cómo crear un modelo de clasificador personalizado, vea https://aka.ms/azsdk/formrecognizer/buildclassifiermodel. La entrada debe ser la ubicación (URL) del documento que se va a clasificar.
Novedad de la versión 2023-07-31: el método de cliente begin_classify_document_from_url .
async begin_classify_document_from_url(classifier_id: str, document_url: str, **kwargs: Any) -> AsyncLROPoller[AnalyzeResult]
Parámetros
- classifier_id
- str
Un identificador de clasificador de documentos único se puede pasar como una cadena.
- document_url
- str
Dirección URL del documento que se va a clasificar. La entrada debe ser válida y codificada correctamente (es decir, codificar caracteres especiales, como espacios vacíos) y una dirección URL accesible públicamente de uno de los formatos admitidos: https://aka.ms/azsdk/formrecognizer/supportedfiles.
Devoluciones
Una instancia de AsyncLROPoller. Llame a result() en el objeto poller para devolver un AnalyzeResult.
Tipo de valor devuelto
Excepciones
Ejemplos
Clasificar un documento. Para obtener más ejemplos, consulte la carpeta samples .
from azure.core.credentials import AzureKeyCredential
from azure.ai.formrecognizer.aio 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)
)
async with document_analysis_client:
url = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/main/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/forms/IRS-1040.pdf"
poller = await document_analysis_client.begin_classify_document_from_url(
classifier_id, document_url=url
)
result = await 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
Ejecuta una solicitud de red mediante la canalización existente del cliente.
La dirección URL de la solicitud puede ser relativa a la dirección URL base. La versión de la API de servicio usada para la solicitud es la misma que la del cliente, a menos que se especifique lo contrario. La invalidación de la versión de API configurada del cliente en la dirección URL relativa se admite en el cliente con la versión de API 2022-08-31 y posteriores. Invalidación en la dirección URL absoluta admitida en el cliente con cualquier versión de API. Este método no genera si la respuesta es un error; para generar una excepción, llame a raise_for_status() en el objeto de respuesta devuelto. Para obtener más información sobre cómo enviar solicitudes personalizadas con este método, vea https://aka.ms/azsdk/dpcodegen/python/send_request.
async send_request(request: HttpRequest, *, stream: bool = False, **kwargs) -> AsyncHttpResponse
Parámetros
Devoluciones
Respuesta de la llamada de red. No realiza el control de errores en la respuesta.
Tipo de valor devuelto
Excepciones
Azure SDK for Python