需求背景
手头有一批电子发票 PDF,想通过自动化工具批量提取格式化信息。比如从发票里把开票日期、货物名称、价税合计这些关键字段抓出来,存成字典格式。
环境准备
1. 安装 Ollama
去官网下载 Ollama 客户端,支持 Windows、Mac 和 Linux。
2. 拉取模型
Ollama 支持多种模型,像阿里的 Qwen、Meta 的 Llama3 都可以。根据自己电脑的显存情况选个合适的版本。如果不确定,可以先试装一个,不行再换。 以 Llama3 为例,在终端执行:
ollama run llama3
等待 llama3:8b 下载完成。
3. 安装 Python 依赖
调用 Ollama 服务需要 Python 包。
pip3 install ollama
4. 启动服务
在 Python 中调用前,先确保本地服务已启动。
ollama serve
看到类似 Listening on 127.0.0.1:11434 的输出,说明服务正常。
实战步骤
1. 读取 PDF 内容
这里用到了 cntext 库来解析 PDF 文本。注意,实际项目中也可以选用 pdfplumber 或 PyMuPDF 等开源库替代。
import cntext as ct
text = ct.read_pdf('data/1.pdf')
print(ct.__version__)
print(text)
输出会包含发票上的原始文本信息,虽然有些乱码,但关键内容都在。
2. 构造 Prompt 提取信息
利用本地的大模型 llama3:8b 进行信息抽取。关键在于设计好提示词,明确告诉模型要返回什么格式。
import ollama
response = ollama.chat(model='llama3:8b', messages=[
{
'role': 'user',
'content': f'提取 TEXT 中的关键信息,返回 DICT_DATA,DICT_DATA 为 dict 数据格式,所含关键词依次为"开票日期", "应税货物 (或服务) 名称", "价税合计 (大写)", "税率", "备注"; 结果只显示 DICT_DATA。TEXT: {text}',
},
])
result = response['message']['content']
print(result)
运行后,模型会返回一段包含字典内容的字符串。有时候它会多带一些解释性文字或者 Markdown 代码块标记,这时候就需要做一下清洗。
3. 清洗与转换
为了确保拿到的是真正的 Python 字典对象,我们需要过滤掉多余的字符。


