首页 > 解决方案 > 尝试获取字数时此 PDF 有什么问题

问题描述

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

不过,我在这个 PDF 上遇到了一些奇怪的事情。

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

我已经尝试过PyPDF2PyMuPDFlibs 相同的结果。

我怎样才能对像这样的 PDF 进行字数统计?

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

标签: pythonpython-3.xpdfpypdf2pymupdf

解决方案


该 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 节等主题...


推荐阅读