【发布时间】:2021-03-13 13:32:24
【问题描述】:
我正在使用 tabula 库来阅读每个 pdf。在每个 pdf 中都有一个表,其中包含其标题(列)及其相应的信息。除了最后一个 pdf 之外,一切都运行良好。 代码:
import tabula
read_pdf(path, pages = "2", multiple_tables = False,
output_format = 'dataframe', pandas_options ={header: None})
部分数据帧输出(示例):
nan SBI nan nan nan nan nan nan nan nan nan nan
JKL1LU1UKDAO/ /O/NEPLW45WF3CKL AF HSF1P PUAVKM RO0SA OSOAEAUMM5M31/6 PO LLŠF
KLMIMOG 0TLSL P0EK RV V OKŠGVJAVUAMNAWA ACADFUIF S JN FKFKLLLGLDAA2F LEV KA OTIF 2A4 KACNATULO01F2NVSCFRE BB AG05ANJA OLE4CPIVL1SGA 2AFK MR0HASET2PMG MLIONEKO0KF 0IEOJB1 L E NECGCVL1GXLDA 7019N8BVPV90
这是定义。不是代码,因为我什至尝试了基于网络的表格链接:https://tabula.technology/ 您可以在其中指定纵横比(例如在我使用的代码中),它有时只是识别单词或字符。
似乎它与 pdf 表在 pdf 中的构造方式有关。当我在 pdf 中进行编辑时,我可以看到一堆文本框,有时将垃圾文本作为一组,有时它们是单独的字母、单词等。
在页面的某些部分还有某种隐藏层——信息。
即使在我尝试加载 pdf 时裁剪特定部分、删除元数据、隐藏和重叠对象然后再次将其导出为 pdf(在 adobe reader 中),问题仍然存在。
我可以从 pdf 中获取正确文本的唯一方法是仅使用以下库和代码抓取文本:
import fitz
text = ""
path = "file.pdf"
doc = fitz.open(path)
for page in doc:
text += page.getText()
这给了我在 pdf 中的样子,但这与数据框相差甚远,这意味着它需要很长时间来预处理它的数据,清理它,并以正确的格式解析它,以便最终获得所需的数据框,应该可以直接用 tabula 完成。
尝试了另外两个库:pyPDF2 和 pdfMiner 都产生字符串输出,这需要很长的时间来预处理它。
from pdfminer.high_level import extract_text
text = extract_text(path.pdf)
因此,我的问题是:
- 这里的最佳实践方法是什么。我应该尝试将 pdf 转换为完全可搜索的文本吗?如果是这样,最pythonic的方式是什么?
- 尝试在 python 之外进行裁剪似乎是新手方法,我正在裁剪和删除内容以获得纵横比并删除一些数据。必须是一种访问所有这些信息的方法才能获取数据框
主要思想是按原样阅读 pdf 并实际复制以获取数据框中的表以便能够使用它进行操作。欢迎提出任何建议。
提前致谢!
【问题讨论】:
标签: python pandas dataframe pdf