PDFPlumber解析PDF文本报错:AssertionError: (‘Unhandled’, 6)

文章目录

1、问题描述

今天在使用PDFPlumber模块提取PDF文本时extract_text()方法报错,报错内容如下:

python 复制代码
Traceback (most recent call last):
  ......
  File "F:\Python\...\site-packages\pdfminer\pdffont.py", line 1091, in __init__
    self.unicode_map = ttf.create_unicode_map()
  File "F:\Python\...\site-packages\pdfminer\pdffont.py", line 826, in create_unicode_map
    assert False, str(("Unhandled", fmttype))
AssertionError: ('Unhandled', 6)

报错代码如下:

python 复制代码
import pdfplumber

with pdfplumber.open(rf'F:\...\file.pdf') as pdf:
    for page in pdf.pages:
        print(page.extract_text())

2、问题原因

经查找原因,最终确定可能是PDF文件本身的原因,具体可见这篇文章:https://github.com/jsvine/pdfplumber/discussions/994?sort=new

ChatGPT则认这种错误是因为库内部遇到了某种它无法处理的情况,ChatGPT给出的解决方案如下:

1) 更新PDFPlumber

python 复制代码
pip install --upgrade pdfplumber

2) 检查PDF文件

确认PDF文件没有损坏,并且是文本格式的PDF而不是扫描的图像

3) 使用其他方法

可以尝试使用extract_words()extract_tables()等其他方法,这取决于你需要提取的内容类型

4) 捕获异常

添加异常处理,这样即使遇到错误也不会导致程序崩溃

python 复制代码
try:
    text = page.extract_text()
except AssertionError as e:
    print(e)
    text = None

5) 尝试其他库

可以考虑使用其他PDF处理库,如PyPDF2或PyMuPDF等

在尝试了ChatGPT的一些建议后,确定可能是PDF本身的原因,因此考虑使用其他库

3、问题解决

经过尝试,最终发现PyMuPDF库可以解析使用:

python 复制代码
import fitz

with fitz.open(rf'F:\...\file.pdf') as doc:
    for page in doc.pages():
        print(page.get_text())

看来是PDF本身的原因,我们的PDF可能已经损坏

相关推荐
星空椰27 分钟前
快速掌握FastAPI:高效构建Web API
python·fastapi
塔尖尖儿27 分钟前
Python中range()到底是什么演示
python
Ethan-D1 小时前
#每日一题19 回溯 + 全排列思想
java·开发语言·python·算法·leetcode
weixin_446934032 小时前
统计学中“in sample test”与“out of sample”有何区别?
人工智能·python·深度学习·机器学习·计算机视觉
weixin_462446233 小时前
使用 Python 测试 Mermaid 与 Graphviz 图表生成(支持中文)
python·mermaid·graphviz
JOBkiller1233 小时前
钢绞线缺陷检测与识别_Cascade-Mask-RCNN_RegNetX模型训练与应用实战
python
nvd113 小时前
深入 ReAct Agent 的灵魂拷问:从幻觉到精准执行的调试实录
python·langchain
Ulyanov3 小时前
战场地形生成与多源数据集成
开发语言·python·算法·tkinter·pyside·pyvista·gui开发
love530love3 小时前
告别环境崩溃:ONNX 与 Protobuf 版本兼容性指南
人工智能·windows·python·onnx·stablediffusion·comfyui·protobuf