python - Python PyPdf 2:返回一些 pdf 的空结果
问题描述
嗨,我有一些 pdf,我需要提取它们的文本信息。我在下面使用了以下代码:
pdfFileObj = open('abc.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj = pdfReader.getPage(0)
pageObj.extractText()
但我得到的是一个特殊的pdf:
'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ n\n\n\n\n\n\n\n\n\n\n\n\n\n'
但是,此代码适用于我拥有的某些 pdf。可能是什么问题呢?谢谢你 。
解决方案
有时 Py2PDF 不拾取文本。发生这种情况时我使用的解决方案是将 pdf 转换为 jpeg 并使用图像 ocr(带有 cv2 的 tesseract)来获取文本。您可以尝试使用的另一个库是 slate(或 Python3 的 slate3k)——虽然它不是很稳定,但您可能在安装和运行它时遇到一些问题。我最终确实让它工作了,当 Py2PDF 失败时,我能够提取文本。
我用来在输入到 tesseract 之前清理 JPEG 文件的好代码——提高了文本输出的准确性。还有关于如何在 JPEG 中读取到 tesseract 的代码:这里
如果您有 Mac OSX,您可以使用os.system
带有 sips 的命令将 pdf 转换为 jpeg。
推荐阅读
- java - 如何收集数据到地图
使用 Java 流 API? - spring - 如何在 Spring 集成中使用 ShedLock?
- python - 保存并加载连接的 Tensorflow 模型
- python - CDIST 有时会选择错误的值
- json - 如何以 json (或其他方式)存储函数并快速解析它们?
- angular - 以角度更新每日基础上的 Apexchart 系列
- php - 如何生成 10 位唯一号码,在 laravel 上注册后发送给用户
- python - Tensorflow 可以自定义激活层自动微分并且不需要指定梯度或权重吗?
- terraform - Terraform:将服务器增量添加到部署中的最简单方法是什么?
- angular - 我的拦截器上未定义构造函数变量(Angular 8)