【问题标题】:What is wrong with this PDF when trying to get a word count尝试获取字数时此 PDF 有什么问题
【发布时间】:2020-08-04 01:33:10
【问题描述】:

我正在尝试编写一个 python 应用程序来计算 PDF 的字数。

我在这个 PDF 中遇到了一些奇怪的问题。

当我从 PDF 中提取文本时,它显示为某种二进制/符号垃圾。

我尝试了 PyPDF2 和 PyMuPDF 库,结果相同。

我怎样才能获得像这样的 PDF 的字数?

这是文件。 https://www.dropbox.com/s/hdgqd70l0kcayvo/mhr.pdf?dl=0

【问题讨论】:

  • 看来是字符编码的问题。我从来没有使用过这些库,但是检查它的字符编码是否不匹配不会有什么坏处。
  • 我认为编码在 python 2 中消失了。在 python 3 中不只是 str 或 byte 吗?

标签: python python-3.x pdf pypdf2 pymupdf


【解决方案1】:

该 PDF 缺少文本提取所需的信息。因此,尝试从中提取文本通常会输出垃圾。

详细介绍

该 PDF 中的文本是使用既不公开 ToUnicode 映射也不使用标准化名称编码的字体绘制的。它也不用 ActualText 属性标记内容。此外,字符代码的天真身份映射到例如Latin-1 也不会产生任何可理解的东西。

因此,根据 PDF 规范 ISO 32000(第 1 部分和第 2 部分)中提出的算法的文本提取将为每个字符引导到阶段

如果这些方法无法生成 Unicode 值,则无法确定字符代码代表什么,在这种情况下,符合标准的读者可以选择他们选择的字符代码。

(ISO 32000-1,第 9.10.2 节将字符代码映射到 Unicode 值)

您可以通过应用复制和粘贴来看到 Adob​​e Acrobat 也不喜欢这样。

不过,在某些此类情况下,深入研究嵌入式字体会发现到 Unicode 的替代映射,并且某些文本提取器确实使用它们。

尽管如此,这种方法在这里也无济于事,该字体是第 3 类字体,即不基于某些普通字体格式(例如 TrueType),而是完全使用 PDF 矢量图形序列定义,无需进一步映射到 Unicode。

因此,如果没有某种程度的 OCR(人工或自动化),就无法从该 PDF 中提取文本。

顺便说一句

如果此文档确实是由某个美国部门以当前形式发布的(而不是应用到其原始文档的某些转换工具的输出),您可能需要联系该部门并讨论可访问性和第 508 节等主题。 .

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2020-01-16
    • 2017-01-18
    相关资源
    最近更新 更多