利用 OpenAI API 从 PDF 文件中提取信息

利用 OpenAI API 从 PDF 文件中提取信息 tomato 2023-02-22 17:04:11 1999

易百纳社区

为什么很难从PDF文件中提取信息

PDF 或可移植文档格式是一种流行的文件格式,广泛用于发 票、采购订单和其他业务文档等文档。但是,对于开发人员来说,从 PDF 中提取信息可能是一项具有挑战性的任务。

难以从PDF中提取信息的一个原因是格式不是结构化的。与具有开发人员可以轻松识别的表格和标题的特定格式的 HTML 不同,PDF 没有一致的信息布局。这使得开发人员更难知道在哪里可以找到他们需要的特定信息。

难以从PDF中提取信息的另一个原因是没有标准的信息布局。每个系统生成发 票和采购订单的方式不同,因此开发人员必须经常编写自定义代码以从每个单独的文档中提取信息。这可能是一个耗时且容易出错的过程。

此外,PDF 可以同时包含文本和图像,这使得开发人员难以以编程方式从文档中提取信息。OCR(光学字符识别)可用于从图像中提取文本,但这会增加过程的复杂性,如果 OCR 软件不准确,可能会导致错误。

现有解决方案

用于从 PDF 中提取信息的现有解决方案包括:

  • 使用正则表达式:在将 PDF 转换为纯文本后匹配文本中的模式。示例invoice2data和traprange-invoice。但是,此方法需要了解数据字段的格式。
  • 基于 AI 的云服务:利用机器学习从 PDF 中提取结构化数据。 示例包括 pdftable 和 docparser,但这些对开源不友好。

PDF 数据提取的另一种解决方案:使用 OpenAI

从PDF文件中提取信息的一种解决方案是使用OpenAI的自然语言处理功能来理解文档的内容。但是,OpenAI 无法直接处理 PDF 或图像格式,因此第一步是将 PDF 转换为文本,同时保留文本项的相对位置。

实现此目的的一种方法是使用 PDFLayoutTextStripper 库,该库使用 PDFBox 通读 PDF 文件中的所有文本项并按行组织它们,保持相对位置与原始 PDF 文件中相同。这一点很重要,因为例如,在发 票的物料表中,如果金额与数量位于同一列中,则在查询总金额和总数量时将导致值不正确。下面是剥离器输出的示例:

 *PO-003847945*                                           
                                                                                                                                                         
                                                                                      Page.........................: 1    of    1                        
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                                                         
                Address...........:     Aeeee  Consumer  Good  Co.(QSC)            Purchase       Order                                                  
                                        P.O.Box 1234                                                                                                     
                                        Dooo,                                      PO-003847945                                                          
                                        ABC                                       TL-00074                                   
                                                                                                                                                         
                Telephone........:                                                 USR\S.Morato         5/10/2020 3:40 PM                                
                Fax...................:                                                                                                                  
                                                                                                                                                         
                                                                                                                                                         
               100225                Aaaaaa  Eeeeee                                 Date...................................: 5/10/2020                   
                                                                                    Expected  DeliveryDate...:  5/10/2020                                
               Phone........:                                                       Attention Information                                                
               Fax.............:                                                                                                                         
               Vendor :    TL-00074                                                                                                                      
               AAAA BBBB CCCCCAAI    W.L.L.                                         Payment  Terms     Current month  plus  60  days                     
                                                                                                                                                         
                                                                                                                                                         
                                                                                                                         Discount                        
          Barcode           Item number     Description                  Quantity   Unit     Unit price       Amount                  Discount           
          5449000165336     304100          CRET ZERO 350ML  PET             5.00 PACK24          54.00        270.00         0.00         0.00          
                                                     350                                                                                                 
          5449000105394     300742          CEEOCE  EOE SOFT DRINKS                                                                                      
                                            1.25LTR                          5.00  PACK6          27.00        135.00         0.00         0.00          
                                                                                                                                                         
                                                1.25                                                                                                                        
(truncated...)

将PDF转换为文本后,下一步是调用OpenAI API并将文本与查询一起传递,例如“提取字段:'PO编号','总金额'”。响应将采用 JSON 格式,GSON 可用于解析它并提取最终结果。将PDF转换为文本,然后使用OpenAI的自然语言处理功能的两步过程可能是从PDF文件中提取信息的有效解决方案。

查询非常简单,%s 替换为 PO 文本内容:

private static final String QUERY = """
    Want to extract fields: "PO Number", "Total Amount" and "Delivery Address".
    Return result in JSON format without any explanation. 
    The PO content is as follows:
    %s
    """;

查询由两个组件组成:

  1. 指定所需字段。
  2. 将字段值格式化为 JSON 数据,以便从 API 响应中轻松检索。

以下是OpenAI的示例响应:

{
  "object": "text_completion",
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\\n{\\n  \\"PO Number\\": \\"PO-003847945\\",\\n  \\"Total Amount\\": \\"1,485.00\\",\\n  \\"Delivery Address\\": \\"Peera Consumer Good Co.(QSC), P.O.Box 3371, Dohe, QAT\\"\\n}",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  // ... some more fields
}

解码字段的 JSON 字符串将生成以下所需字段:text

{
  "PO Number": "PO-003847945",
  "Total Amount": "1,485.00",
  "Delivery Address": "Peera Consumer Good Co.(QSC), P.O.Box 3371, Dohe, QAT"
}

运行示例代码

先决条件:

  • Java 16+
    • Maven

步骤:

  • 创建一个OpenAI帐户。
  • 登录并生成 API 密钥。
  • 在主.java中替换为您的密钥。OPENAI_API_KEY
  • 如果需要,请更新。SAMPLE_PDF_FILE
  • 执行代码并查看输出中的结果。
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
tomato
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
tomato
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区