【问题标题】:PyPDF2 can't read non-English characters, returns empty string on extractText()PyPDF2 无法读取非英文字符,在 extractText() 上返回空字符串
【发布时间】:2020-02-24 13:06:57
【问题描述】:

我正在编写一个脚本,该脚本将从大型 PDF 文件(40-60 多页,多页)中提取数据 不是英文,但该文件包含 希腊字符,在我运行 PyPDF2 的 extractText() 函数以获取给定页面内容,然后返回一个空字符串。

我是这个库的新手,我不知道该怎么做才能解决这个问题!!

【问题讨论】:

    标签: python python-3.x pdf web-scraping pypdf2


    【解决方案1】:

    PyPDF2 的“提取文本”看起来要么可以正常工作,要么完全失败。没有可以传递的参数来尝试使事情正常工作。它会起作用,或者不会。

    您可能无法解决此问题。如果您可以在 Acrobat/Reader 中成功复制/粘贴文本,则可以提取文本。那么当您尝试从 Reader 中复制/粘贴时会发生什么?不要尝试使用其他第三方 PDF 查看器,请使用 Adob​​e 软件。您可能不得不放弃 PyPDF2 并转向其他一些 PDF API,但如果 R​​eader 可以做到,这是一个可以解决的问题。

    PDF 中有三种不同的东西,在人眼看来就像字母。

    1. PDF 中的某些文本编码中的字母。有几种固定编码,加上 PDF 允许您嵌入自己的自定义编码(通常与字体子集一起使用)。软件可以创建看起来不错但实际上无法复制/粘贴的 PDF,即使是 Adob​​e。
    2. 恰好看起来很像字母的路径艺术。 “从这里开始画一条线,到那里画一条直线,然后到那里画一条这样的曲线”等等。如果你很好奇,PDF 使用Bezier curves 来定义它的曲线。与您的问题不太相关,但很有趣。
    3. 定义像素网格的位图(.jpeg/gif/etc 图像)。

    过去,Reader 只能处理上面的文本类型 1,而且只有在文本编码正确的情况下。损坏的自定义编码非常普遍(或者是 7 多年前我停止使用 PDF 软件时)。

    使用损坏的类型 1 以及所有类型 2 和 3,您唯一能做的就是在 PDF 上运行 OCR。 OCR:光学字符识别。有几个开源 OCR 项目,以及商业项目。

    【讨论】:

    • 非常感谢您的回答,有趣的东西。我没有在 Adob​​e Software 中尝试过这样做,但是一旦我这样做了,我会告诉你我是否可以从文件中复制/粘贴文本。
    • 我能够从原始 PDF 文件以及我用于测试的测试/虚拟 PDF 文件中复制和粘贴文本。在这两种情况下,我都能在 Linux 机器上使用 Adob​​e Reader 9(版本 9.5.5 04/26/2013)和在 Windows 10 机器上使用 Adob​​e Acrobat Reader DC(版本 2020.006.20034)。所以我很想知道问题是什么。
    • 更新 看起来问题出在希腊字符上,只要我编辑了测试/虚拟 PDF 文件以包含一些英文字符,然后搜索该关键字就可以了很好,在我的调试打印语句中没有出现希腊字符,我放置到位以查看尝试提取的数据,只显示英文中的关键字。
    • 听起来 PyPDF2.extractText() 不支持某些编码类型,并且您的文件使用其中一种(或多种)。如果你真的想知道那里发生了什么,你需要print(page.getContents()),下载一份 PDFSpec(谷歌“PDF Spec”),并查看第 9.10 章“文本内容的提取”跨度>
    • 好的,非常感谢您的帮助。我将采用 OCR 方法,因为我已经开始实施了!任何关于一个好的图书馆的建议都会很好。在一些帮助下,我找到了 pytesseract 库并开始使用它!!!
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多