15

我正在写一篇硕士论文——NLP 系统。我有一个组件 - 提取器。

它正在从 PDF 文件中提取纯文本。有一些 PDF 文件无法正确提取。提取器(PDFBox 库)返回如下字符串:

"┤xDn║if|d├gDF"Ti&cD╬lh d FÁhis~n ╗xd f«"d┤ffih »h"

或者

“10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17”

我正在检查导致此提取问题的每个文件,并且所有这些文件的文本也无法从 PDF 阅读器(Adobe Reader 和 FoxIt 阅读器)复制粘贴。在此阅读器中查看它们已启用,但在选择其内容并复制到剪贴板后,我得到相同的错误文本(如上所述 - 语义不正确的字符字符串或数字和字母字符串)。

有人可以帮我吗???

4

7 回答 7

10

通常在这种情况下,如果您无法从 Acrobat(阅读器)窗口中选择、复制和粘贴文本,那么还有另一个选项可能仍然有效:

  • 打开“文件”菜单,
  • 选择“另存为...”
  • 选择“文本(正常)(*.txt)”
  • 浏览到目标目录,
  • 键入要用于文本文件的名称。

您将拥有文件中所有页面的所有文本,并且需要找到您最初想要复制'n'paste 的位置——因为它不如直接复制'n'paste 舒服。但它更可靠地工作......

它也适用于 Linux(但您必须从文件菜单acroread中选择“另存为文本...” )。

更新

您可以使用pdffonts命令行实用程序来快速分析 PDF 使用的字体。

这是一个示例输出,它演示了很可能会出现文本提取问题的位置。它使用来自GitHub-Repository的这些手动编码的 PDF 文件之一,该文件的创建是为了提供 PDF 示例文件,这些文件有很好的注释,可以在文本编辑器中轻松打开:

$ pdffonts  textextract-bad2.pdf
  name                            type         encoding    emb sub uni object ID
  ------------------------------- ------------ ----------- --- --- --- ---------
  BAAAAA+Helvetica                TrueType     WinAnsi     yes yes yes     12  0
  CAAAAA+Helvetica-Bold           TrueType     WinAnsi     yes yes no      13  0

如何解释这张表?

  • 上述 PDF 文件使用两种子集字体(如其名称的BAAAAA+CAAAAA+前缀以及列中的yes条目所示subHelveticaHelvtica-Bold.
  • 两种字体都是 type TrueType
  • 两种字体都使用WinAnsi编码(字体编码将 PDF 源代码中使用的字符标识符映射到应绘制的字形)。但是,仅对于字体,PDF 中/Helvetica有一个可用的表(因为没有),如 - 列中的/所示)。/ToUnicode/Helvetica-Boldyesnouni

/ToUnicode表需要提供从字符标识符/代码到字符的反向映射。

缺少/ToUnicode特定字体的表格几乎总是一个明确的指标,即无法从 PDF 中提取或复制“n”粘贴使用该字体的文本字符串。(即使有一个表格/ToUnicode,文本提取仍可能会造成问题,因为该表格可能已损坏、不正确或不完整——正如在许多真实世界的 PDF 文件中所看到的那样,也正如上面的一些伴随文件所展示的那样链接的 GitHub 存储库。)

于 2011-06-21T12:26:58.230 回答
6

如果能够在 Adob​​e Reader 中成功选择并复制文本——表明 PDF 确实包含文本对象——但是如果复制的文本看起来像一堆垃圾字符,则无法将复制的文本粘贴到记事本中,那么问题是可能与所选文本使用的 CMap 有关。

PDF 规范为文本内容的显示和文本内容的相关提取提供了许多选项。CMap 指定从字符代码到字符选择器的映射。PDF 规范概述了一些预定义的 CMap,但也可以嵌入其他 CMap。

我的猜测是此文本的 CMap 已损坏,或者 PDFBox 库不支持此特定 CMap。我建议尝试不同的 SDK 只是为了看看你是否得到任何不同的结果。

于 2010-05-28T08:34:51.533 回答
2

当在 Chrome(内部 PDF 浏览器)中作为 Gmail 附件打开时,复制会复制正常可读的字符!

当我遇到这个问题时,它对我有用,对其他人也有用。我认为 Chrome PDF 查看器会自动使用Google Drive OCR ……就像魔术一样!

于 2016-02-28T15:10:30.270 回答
1

PDF是用什么创建的。有些 PDF 不包含任何编码信息,只包含绘制它的数据。所以没有办法提取数据。

于 2010-05-28T08:43:56.227 回答
0

选择要复制的文本。右键单击选择选项“导出选择为”在对话框中,选择一个文件名并将新文件保存为富文本格式 (RTF) 打开 RTF 以查看您的文本!

于 2013-05-17T15:55:18.257 回答
-1

处理这个问题的最好方法是(假设你有 Adob​​e Acrobat 或类似的东西,不确定 Reader 是否可以这样做)是将文档保存为 JPEG。然后将所有图像重新编译为单个 pdf,然后使用 OCR 功能在页面中查找文本,然后您可以复制和粘贴文本。

于 2016-07-31T23:16:34.167 回答
-4

PDF 不是文本文档。它更像是一种矢量图形格式,有时可以包含文本。因此,除非您愿意进行 OCR,否则有些文档无法从中提取文本。就是那样子。

于 2010-05-28T02:22:40.863 回答