我正在撰写硕士论文 - NLP系统。我有一个组件 - 提取器。
它从PDF文件中提取纯文本。有一些PDF文件无法正确提取。 Extractor(PDFBox库)返回如下字符串:
“┤xDn║if|d├gDF”Ti&cD╬lhdFÁhis~n╗xdf«“d┤ffih»h”
或
“10a61a91a22a25a3a27a17a23a20a8a13a14a61a25a17”
我正在检查导致此提取问题的每个文件,并且所有这些文件的文本也无法从PDF Reader(Adobe Reader和FoxIt阅读器)进行复制粘贴。在这个阅读器中查看它们已启用,但在选择其内容并复制到剪贴板后,我得到相同的错误文本(如上所述 - 非语义正确的字符串或数字和字母串)。
有人能帮助我吗?
答案 0 :(得分:6)
如果能够在Adobe Reader中成功选择和复制文本 - 表示PDF确实包含文本对象 - 但是如果没有看起来像一堆垃圾字符,则无法将复制的文本粘贴到记事本中,问题可能与所选文本使用的CMap有关。
PDF规范提供了许多显示textual content and the related extraction of the text content的选项。 CMap指定从字符代码到字符选择器的映射。 PDF规范概述了一些预定义的CMap,但也可以嵌入其他CMap。
我的猜测是该文本的CMap损坏或者PDFBox库不支持此特定CMap。我建议您尝试使用其他SDK,看看是否会得到任何不同的结果。
答案 1 :(得分:4)
在这种情况下,如果您无法从Acrobat(阅读器)窗口中选择“复制”文本,那么还有其他选项可以使用:
你将拥有文件中所有页面的所有文本,并且需要找到你想要最初复制'n'paste的地点 - 只要它不像直接copy'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
如何解读此表?
BAAAAA+
和CAAAAA+
前缀表示其名称,以及yes
中的sub
条目(),Helvetica
和Helvtica-Bold
。TrueType
类型。WinAnsi
编码(字体编码将PDF源代码中使用的字符标识符映射到应绘制的字形)。
但是,仅对于字体/Helvetica
,PDF中有/ToUnicode
表(/Helvetica-Bold
没有),如yes
/ no
所示在uni
- 列中。 /ToUnicode
表需要提供从字符标识符/代码到字符的反向映射。
特定字体的缺失/ToUnicode
表几乎总是一个确定的指示,即使用此字体的文本字符串无法从PDF中提取或复制。 (即使某个/ToUnicode
表格 ,文字提取仍可能造成问题,因为此表可能已损坏,不正确或不完整 - 如许多现实世界中所见PDF文件,以及上面链接的GitHub存储库中的一些配套文件也证明了这一点。)
答案 2 :(得分:1)
创建的PDF是什么。某些PDF不包含任何编码信息,只包含绘制数据的数据。所以没有办法提取数据。
答案 3 :(得分:1)
在Chrome(内部PDF浏览器)中作为Gmail附件打开时,复制会复制正常的可读字符!
当我遇到这个问题并for others as well时,它对我有用。我认为Chrome PDF查看器会自动使用the Google Drive OCR ...它就像魔术一样!
答案 4 :(得分:0)
选择要复制的文字。 右键点击 选择选项"将选择导出为" 在对话框中,选择文件名并将新文件另存为RTF格式(RTF) 打开RTF查看您的文字!
答案 5 :(得分:0)
解决这个问题的最佳方法是(假设你有Adobe Acrobat,或类似的东西,不确定Reader是否可以这样做)将文档保存为JPEG。然后将所有图像重新编译为单个pdf,然后使用OCR功能在页面中查找文本,然后您可以复制并粘贴文本。
答案 6 :(得分:-2)
PDF不是文本文档。它更像是一种矢量图形格式,有时可以包含文本。因此,除非您愿意进行OCR,否则有些文档无法提取文本。这就是它的方式。