”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 AI 创建最快且精确的发票数据提取器以进行结构输出

使用 AI 创建最快且精确的发票数据提取器以进行结构输出

发布于2024-11-01
浏览:855

Create the fastest and precise invoice data extractor for structural output using AI

使用 LlamaExtract 和 Pydantic 模型提取商店收据

在本文中,我们将探索如何使用 LlamaExtract 与 Pydantic 模型中的模式相结合,以便从商店收据中提取结构化数据。这种方法有助于系统地组织收据信息,使其更易于分析和管理。

设置

首先,确保您安装了 llama-extract 客户端库。使用以下命令:

pip install llama-extract pydantic

注意:如果您看到有关更新 pip 的通知,您可以使用提供的命令进行更新。

首先,登录并从 Llama Index Cloud 免费获取 api-key

为您的 LlamaExtract API 密钥设置环境变量:

import os

os.environ["LLAMA_CLOUD_API_KEY"] = "YOUR LLAMA INDEX CLOUD API HERE"

加载数据

对于此示例,假设我们有一个 PDF 格式的商店收据数据集。将这些文件放在名为receipts 的目录中。

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

输出应列出收据的文件路径:

['data/receipts/receipt.pdf']

定义 Pydantic 模型

我们将使用 Pydantic 定义我们的数据模型,这将告诉 API 我们期望或想要从 PDF 中提取哪些字段/数据。对于商店收据,我们可能有兴趣提取商店名称、日期、总金额和购买的商品列表。

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]

创建架构

现在,我们可以使用 Pydantic 模型在 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

输出架构应类似于以下内容:

{
    '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'}
        }
    }
}

运行提取

定义了架构后,我们现在可以从收据文件中提取结构化数据。通过指定收据作为响应模型,我们确保提取的数据经过验证和结构化。

responses = await extractor.aextract(
    schema_response.id, fpaths, response_model=Receipt
)

如果需要,您可以访问原始 JSON 输出:

data = responses[0].data
print(data)

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}
    ]
}

结论

在本文中,我们演示了如何将 LlamaExtract 与 Pydantic 模型结合使用来定义数据模式并从商店收据中提取结构化数据。这种方法可确保提取的信息组织良好且经过验证,从而更易于处理和分析。

这也可用于许多案例、发票、收据、报告等。

快乐编码!!

你有项目吗?您希望我协助您给我发电子邮件吗?: [email protected]

有疑问或想成为第一个了解我的帖子的人:-
在 LinkedIn 上关注 ✅ 我?
在 Twitter/X 上关注 ✅ 我?

版本声明 本文转载于:https://dev.to/wmisingo/create-the-fastest-and-precise-invoice-data-extractor-for-structural-output-using-ai-pe1?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 从PHP网址保存图片到本地电脑的技巧
    从PHP网址保存图片到本地电脑的技巧
    从php urls 如果您的PHP配置允许从URL获取数据,则可以使用以下代码:但是,如果由于安全性问题而禁用file_get_get_contents,则可以使用curl:通过使用以下一种方法,您可以方便地将图像从远程PHP URL保存到本地系统。[&& &&&&&华
    编程 发布于2025-04-19
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-04-19
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-04-19
  • 如何在没有querySelectorAll时通过属性选择元素?
    如何在没有querySelectorAll时通过属性选择元素?
    如何通过属性检索元素时,当QuerySelectorAll不可用document.querySelectorAll('[data-foo]')However, in the absence of querySelectorAll, an alternative solution i...
    编程 发布于2025-04-19
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-04-19
  • 如何从2D数组中提取元素?使用另一数组的索引
    如何从2D数组中提取元素?使用另一数组的索引
    Using NumPy Array as Indices for the 2nd Dimension of Another ArrayTo extract specific elements from a 2D array based on indices provided by a second ...
    编程 发布于2025-04-19
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-04-19
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-04-19
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-04-19
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-19
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确...
    编程 发布于2025-04-19
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-04-19
  • Go中如何保持固定数量的并发Goroutine运行?
    Go中如何保持固定数量的并发Goroutine运行?
    在go中螺纹goroutines:同时运行常数 GO并发领域在等待完成指定数量的Goroutines时提供了多种材料。但是,一个独特的挑战提出了自己:确保连续执行预定义的goroutines,一个开始作为另一个结论。考虑一个具有大量任务的情况,例如处理从mysql数据库中检索到的数据。一种天真的方...
    编程 发布于2025-04-19
  • CSS强类型语言解析
    CSS强类型语言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    编程 发布于2025-04-19
  • 如何从MySQL两表中检索数据及处理缺失对应项?
    如何从MySQL两表中检索数据及处理缺失对应项?
    从mySQL中的两个表中进行选择,带有缺失的通讯器Consider the following example:You have two tables, categories (with columns id and title) and products (with columns id, ow...
    编程 发布于2025-04-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3