python - 如何用python解析这种PDF
问题描述
我正在尝试使用 python 解析此处找到的 pdf:https : //corporate.lowes.com/sites/lowes-corp/files/annual-report/lowes-2020ar.pdf。根据复制/粘贴测试,它似乎是基于文本的,并且前几页使用例如 pymupdf 解析得很好。
但是,大约在第 12 页之后,文档编码似乎发生了内部变化。例如,第 18 页的本节:
它看起来像文本,但是当您复制并粘贴它时,它变成:
%A>&1;<81
FB9#4AH4EL
%BJ8XF8@C?BL874CCEBK<@4G8?L
9H??G<@84FFB6<4G8F4A7
C4EGG<@84FFB6<4G8F
CE<@4E<?L<AG;8.A<G87,G4G8F4A74A474"A9<F64?
J88KC4A787BHEJBE>9BE68
;<E<A:4FFB6<4G8F<AC4EGG<@8
F84FBA4?
4A79H??G<@8CBF<G<BAFGB9H?9<??G;8F84FBA4?78@4A7B9BHE,CE<A:F84FBA
<A6E84F8778@4A77HE<A:G;8(/"C4A78@<6
4F6HFGB@8EF9B6HF87BA;B@8<@CEBI8@8AGCEB=86GF
4A74A4G<BAJ<78899BEGGB@B7<9LBHEFGBE8?4LBHG
这里发生了什么?我需要使用 OCR 来解析这样的文件吗?或者有什么方法可以将上面的内容翻译回文本?
解决方案
造成这种情况的一个可能原因是 PDF 中的字体嵌入使用了自定义编码。如果您正在寻找一个简单的解决方案,请查看 tika 包,它非常适合阅读 pdf。
from tika import parser # pip install tika
raw = parser.from_file('sample.pdf')
print(raw['content'])
Tika 是用 Java 编写的,因此您需要安装 Java 运行时
推荐阅读
- r - 如果时间序列和使用非 NA 数据,我如何限制 Mann Kendall 测试使用开始日期和结束日期?
- c# - 如何将事件从 Azure Service Fabric 服务推送到 C# 客户端?
- javascript - 使用 Web Audio API 或其他任何东西在前端修剪静音
- r - 在 MAC 上加载包
- flutter - Flutter 未来提供者
- angular - Angular 从异步函数获取 src 导致超时
- json - 无法更新第一个数组项
- r - 在 R 中创建 API 多线程
- java - Spring Data JPA/Hibernate 处理关联
- python - 为什么在宣誓时使用重定向?