Python中Camelot读取同布局PDF一份正常一份数据无法识别问题求助
问题原因及解决方案
核心原因
两份PDF仅视觉布局一致,底层结构存在差异,常见差异点如下:
- 异常PDF文本层异常:导出时文本被转曲、加密或做了字符编码混淆,导致camelot读取底层文本时直接拿到乱码。
- 行列检测阈值不匹配:camelot的stream模式依靠文本坐标间距判断行列,两份PDF的文本坐标偏移存在细微差别,默认阈值无法适配第二份文件。
- 导出规范差异:两份PDF由不同工具导出,第二份属于非标准PDF结构,camelot默认规则适配性差。
排查与解决步骤
- 基础排查
手动打开异常PDF,复制表格内的文本粘贴到记事本,如果粘贴结果就是乱码,说明文本层本身损坏,需要走OCR识别方案。 - 调整camelot参数适配
- 切换识别模式:如果表格有明确边框,优先用
lattice模式识别,准确率更高:
from_pdf = camelot.read_pdf('2020_04_2.pdf', flavor='lattice', strict=False)- 调整stream模式的行列检测阈值,适配坐标偏移:
# 可根据实际效果调整tol参数数值,数值越大容错性越高 from_pdf = camelot.read_pdf('2020_04_2.pdf', flavor='stream', strict=False, row_tol=10, column_tol=10, edge_tol=500)- 手动指定表格区域:通过plot工具获取表格在页面的坐标后,用
table_areas参数锁定识别范围,避免无关内容干扰:
# x1,y1,x2,y2替换为实际的表格坐标值 from_pdf = camelot.read_pdf('2020_04_2.pdf', flavor='stream', strict=False, table_areas=['x1,y1,x2,y2']) - 切换识别模式:如果表格有明确边框,优先用
- 文本层损坏的解决方案
如果确认是文本层转曲/混淆导致的乱码,改用OCR方案:先将PDF每页转为图片,再用OCR工具搭配表格识别能力提取内容,可选工具包括pytesseract+自定义表格规则、PaddleOCR表格识别模块等。
内容的提问来源于stack exchange,提问作者Gizelly
相关产品推荐
相关产品推荐

