En este artículo, exploraremos cómo utilizar LlamaExtract incorporado con esquemas de modelos de Pydantic para extraer datos estructurados de los recibos de las tiendas. Este enfoque ayuda a organizar la información de los recibos de forma sistemática, lo que facilita su análisis y gestión.
Primero, asegúrese de tener instalada la biblioteca cliente de extracto de llama. Utilice el siguiente comando:
pip install llama-extract pydantic
Nota: Si ve un aviso sobre la actualización de pip, puede actualizarlo usando el comando proporcionado.
Primero, inicia sesión y obtén una clave API gratis de Llama Index Cloud
Configure la variable de entorno para su clave API LlamaExtract:
import os os.environ["LLAMA_CLOUD_API_KEY"] = "YOUR LLAMA INDEX CLOUD API HERE"
Para este ejemplo, supongamos que tenemos un conjunto de datos de recibos de tiendas en formato PDF. Coloque estos archivos en un directorio llamado recibos.
DATA_DIR = "data/receipts" fnames = os.listdir(DATA_DIR) fnames = [fname for fname in fnames if fname.endswith(".pdf")] fpaths = [os.path.join(DATA_DIR, fname) for fname in fnames] fpaths
El resultado debe enumerar las rutas de archivo de los recibos:
['data/receipts/receipt.pdf']
Definiremos nuestro modelo de datos usando Pydantic, esto le indicaría a la API qué campos/datos esperamos o queremos extraer del PDF. Para los recibos de las tiendas, es posible que nos interese extraer el nombre de la tienda, la fecha, el monto total y la lista de artículos comprados.
from pydantic import BaseModel from typing import List class Item(BaseModel): name: str quantity: int price: float class Receipt(BaseModel): store_name: str date: str total_amount: float items: List[Item]
Ahora podemos usar el modelo Pydantic para definir un esquema de extracción en LlamaExtract.
from llama_extract import LlamaExtract extractor = LlamaExtract(verbose=True) schema_response = await extractor.acreate_schema("Receipt Schema", data_schema=Receipt) schema_response.data_schema
El esquema de salida debería parecerse al siguiente:
{ 'type': 'object', '$defs': { 'Item': { 'type': 'object', 'title': 'Item', 'required': ['name', 'quantity', 'price'], 'properties': { 'name': {'type': 'string', 'title': 'Name'}, 'quantity': {'type': 'integer', 'title': 'Quantity'}, 'price': {'type': 'number', 'title': 'Price'} } } }, 'title': 'Receipt', 'required': ['store_name', 'date', 'total_amount', 'items'], 'properties': { 'store_name': {'type': 'string', 'title': 'Store Name'}, 'date': {'type': 'string', 'title': 'Date'}, 'total_amount': {'type': 'number', 'title': 'Total Amount'}, 'items': { 'type': 'array', 'title': 'Items', 'items': {'$ref': '#/$defs/Item'} } } }
Con el esquema definido, ahora podemos extraer datos estructurados de nuestros archivos de recibos. Al especificar Recibo como modelo de respuesta, nos aseguramos de que los datos extraídos estén validados y estructurados.
responses = await extractor.aextract( schema_response.id, fpaths, response_model=Receipt )
Puedes acceder a la salida JSON sin formato si es necesario:
data = responses[0].data print(data)
Ejemplo de salida JSON:
{ 'store_name': 'ABC Electronics', 'date': '2024-08-05', 'total_amount': 123.45, 'items': [ {'name': 'Laptop', 'quantity': 1, 'price': 999.99}, {'name': 'Mouse', 'quantity': 1, 'price': 25.00}, {'name': 'Keyboard', 'quantity': 1, 'price': 50.00} ] }
En este artículo, demostramos cómo usar LlamaExtract con modelos Pydantic para definir esquemas de datos y extraer datos estructurados de recibos de compras. Este enfoque garantiza que la información extraída esté bien organizada y validada, lo que facilita su manejo y análisis.
Esto también se puede utilizar para muchos casos, facturas, recibos, informes, etc.
¡¡Feliz codificación!!
¿Tienes un proyecto? que quieres que te ayude escríbeme??: [email protected]
Tienes una pregunta o quieres ser el primero en enterarte de mis publicaciones:-
¿Sígueme en LinkedIn?
Sígueme en Twitter/X ?
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3