当前位置: 首页 > news >正文

【Python】基于OpenAI API实现PDF发票信息提取

基于OpenAI API实现PDF发票信息提取

1. 引言

在日常办公中,企业和个人经常需要处理大量的发票数据,包括提取发票代码、发票号码、开票日期、金额等关键信息。手动录入这些信息费时费力,因此自动化发票信息提取成为刚需。

本文将介绍如何利用 OpenAI APIPyMuPDF (即 fitz) 实现 PDF 发票的自动信息提取。代码将解析 PDF 文件内容,并通过 AI 模型精准提取相关字段。


2. 依赖环境

在实现该功能之前,需要安装以下 Python 依赖库:

pip install openai pymupdf

此外,需要在 config.py 中配置 API KeyPDF 文件路径


3. 代码实现

3.1 完整代码

from openai import OpenAI
import fitz  # PyMuPDF
import config  # 需要配置API Key和PDF路径

def get_pdf_text(pdf_path):
    doc = fitz.open(pdf_path)
    markdown_text = ""
    for page_num in range(len(doc)):
        page = doc[page_num]
        blocks = page.get_text("dict")["blocks"]

        for block in blocks:
            if "lines" in block:
                for line in block["lines"]:
                    for span in line["spans"]:
                        text = span["text"]
                        markdown_text += f"{text}"
                markdown_text += "\n"
    return markdown_text

def create_invoice_extraction_prompt(invoice_text):
    prompt = f"""
请分析以下发票文本,准确提取以下信息:
1. 发票代码
2. 发票号码
3. 开票日期
4. 价税合计的小写金额
5. 销售方名称
6. 消费类型(如:餐饮、交通、办公用品、通讯等)

请务必仔细分析商品或服务内容,据此判断消费类型。
如果无法确定某项信息,请标注为"未找到"。

发票文本:
{invoice_text}

请以 JSON 格式返回结果:
{{
  "发票代码": "",
  "发票号码": "",
  "开票日期": "",
  "价税合计": "",
  "销售方名称": "",
  "消费类型": ""
}}
"""
    return prompt

# 初始化 OpenAI 客户端
client = OpenAI(
    api_key=config.DASHSCOPE_API_KEY,
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

sample_invoice_text = get_pdf_text(config.PDF_PATH)

# 创建聊天完成请求
completion = client.chat.completions.create(
    model="qwq-32b",  # 可按需更换模型名称
    messages=[
        {"role": "user", "content": create_invoice_extraction_prompt(sample_invoice_text)}
    ],
    stream=True,
)

reasoning_content = ""  # 记录思考过程
answer_content = ""     # 记录最终答案
is_answering = False   # 标记是否已进入回复阶段

print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")

for chunk in completion:
    if not chunk.choices:
        print("\nUsage:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            if delta.content and not is_answering:
                print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
                is_answering = True
            print(delta.content, end='', flush=True)
            answer_content += delta.content

print("\n\n" + "=" * 50)
print("提取结果:")
print(answer_content)

4. 运行示例

在这里插入图片描述


5. 总结

通过本文的介绍,我们实现了一个基于 OpenAI API 解析 PDF 发票的完整流程,包括:

  1. 使用 PyMuPDF 解析 PDF 文本
  2. 构造 AI 提示词,让大模型精准提取发票信息
  3. 调用 OpenAI API 并解析返回 JSON 结果

这一方案可以广泛应用于财务报销、企业票据管理等场景,极大提高工作效率。如果你有更复杂的需求,可以尝试调整 prompt 或使用更强大的 LLM 模型。

相关文章:

  • Linux 基础入门操作 第十一章 图形界面设计
  • 【day2】数据结构刷题 栈
  • 【linux】线程概念与控制
  • 05STM32定时器-01定时器概述
  • C#测试基于OllamaSharp调用本地DeepSeek模型
  • AI基础01-文本数据采集
  • TCP/IP协议的三次握手和四次挥手
  • python爬虫Redis数据库
  • Win32桌面编程:ACLUI.DLL,EditSecurity(IntPtr hwndOwner, ISecurityInformation psi)
  • Unity代码热更新和资源热更新
  • Elasticsearch原生linux部署集群 和docker部署集群
  • 基于深度学习的相位调制算法步骤
  • Noe.js 原生 http 模块 vs Express 框架对比
  • 【leetcode题解】贪心算法
  • AI重构SEO关键词优化路径
  • docker安装在D盘/docker迁移到D盘
  • 用数组模拟循环队列
  • js中console 打印有哪些格式?
  • XSS Game(DOM型) 靶场 通关
  • GitHub 发现 ruby-saml 严重漏洞,账户安全岌岌可危
  • 山西忻州市人大常委会副主任郭建平接受审查调查
  • 中国词学研究会原会长、华东师大教授马兴荣逝世,享年101岁
  • 浙江一民企拍地后遭政府两次违约,“民告官”三年又提起民事诉讼
  • 妻子藏匿一岁幼儿一年多不让丈夫见,法院发出人格权侵害禁令
  • 视频|漫画家寂地:古老丝路上的文化与交流留下的独特印记
  • 美联储主席:美联储工作方式不会受特朗普影响,从未寻求与总统会面