如何从 PDF 中提取文字
从PDF复制文本可能令人惊讶地令人沮丧。格式断裂,列被合并,换行出现在错误的地方。专用的文本提取工具从PDF结构中提取原始文本内容,为您提供可以真正使用的干净纯文本。基于浏览器的提取器在本地处理整个工作,而无需将您的文档上传到服务器。
基于文本的PDF与扫描的PDF
在提取文本之前,了解您拥有什么类型的PDF会有所帮助:
基于文本的PDF:从Word文档、网页或其他数字源创建。文本作为数据存储在PDF内部。查看这些文件时,您可以选择并突出显示文本。文本提取在这些文件上完美工作。
扫描的PDF:通过扫描物理文档创建。PDF包含页面图像,而不是实际的文本数据。您无法在这些文件中选择文本。标准文本提取返回空结果,您需要OCR软件。
混合PDF:有些PDF包含数字文本和扫描图像的混合。提取器将捕获文本部分,但不会捕获基于图像的内容。
可搜索的扫描PDF:有人通过OCR运行的扫描PDF,文本层嵌入在页面图像后面。文本提取在这些上有效,因为OCR文本存储在PDF中。准确性取决于OCR质量,扫描OCR文本经常有由错误识别字符引起的拼写错误。
如何从PDF提取文本
- 上传您的PDF:选择文件或拖放它。该工具接受任何标准PDF。
- 提取文本:点击提取按钮。该工具处理所有页面并显示原始文本。
- 复制或下载:将文本复制到剪贴板,或将其下载为TXT文件。
PDF文本提取的简史
PDF由Adobe于1993年创建,具有故意复杂的内部结构。PDF将文本存储为定位的字形(字符+页面上的x/y坐标),而不是流畅的散文。要提取可读的文本,工具必须读取这些字形位置,并通过推断单词边界、换行和阅读顺序来重建段落。
第一个广泛使用的PDF文本提取器是pdftotext(1996),这是Derek Noonburg的开源xpdf项目的一部分。它使用一个简单的算法:按Y然后X对字形排序,按行分组,将行分组为块。大多数现代提取器仍然使用这种方法的精炼版本。
PDF.js(Mozilla,2011)将PDF渲染带到浏览器中,无需插件。它还公开了一个文本提取API,为今天大多数基于浏览器的提取器提供支持,包括这个。PDF.js可以读取浏览器需要的所有PDF功能:文本、图像、表单、注释、签名、嵌入的字体。
多年来的主要改进包括:
- 更好的列检测:区分两列布局与单列布局的宽边距
- Unicode规范化:处理连字(fi、fl)、带重音的字符、RTL脚本
- 表格意识:检测表格布局并保留列结构
- 字体感知的间距:使用字体度量推断单词的开始和结束位置
现代提取对散文文档(书籍、文章、合同)效果良好。它在多列科学论文、复杂表格和高度格式化的宣传册方面仍有困难。
文本提取何时有用
- 数据迁移:将PDF的内容提取到电子表格、数据库或其他系统
- 内容编辑:提取文本以在创建新文档之前在文字处理器中编辑
- 搜索和分析:将PDF内容转换为纯文本进行搜索、计数或处理
- 无障碍:使PDF内容以更适合屏幕阅读器的格式可用
- 归档:为重要文档创建文本备份
- LLM输入:将PDF文本输入ChatGPT、Claude或本地LLM以进行摘要或分析
- 翻译:提取文本以便翻译员可以在其CAT工具中工作
- 引文提取:从法律合同或研究论文中提取特定段落以供引用
- 引用管理:从PDF论文中提取参考文献列表到Zotero或Mendeley
- 合规与发现:在法律电子发现工作流程中提取文本以进行关键字搜索
- 字幕生成:从PDF教育材料中提取文字稿
- 索引:将提取的文本输入本地搜索系统(Elasticsearch、Meilisearch)
输出格式选项
不同的用途需要不同的输出格式:
| 格式 | 最适合 | 局限性 |
|---|---|---|
| 纯文本(.txt) | 通用,无格式 | 失去标题、列表、表格 |
| Markdown(.md) | 结构化文档,保留标题 | 表格可能需要手动修复 |
| HTML | Web显示,保留粗体/斜体 | 比.txt更复杂 |
| Word(.docx) | 在Microsoft Word中编辑 | 失去一些PDF特定的格式 |
| JSON | 按页面或按块提取 | 面向开发者,不是直接阅读 |
| XML/EPUB | 电子书转换 | 复杂设置 |
对于大多数日常提取(复制段落、向LLM提供文本),纯文本是正确的选择。对于您打算重新编辑的长文档,PDF转Word通常更好。
常见陷阱
- 多列布局中阅读顺序错误:两列学术论文可能先提取左列然后右列(正确)或者按行交错(乱序)。请验证阅读顺序,特别是对于学术PDF。
- 正文中的页眉和页脚:页码、运行标题和页脚作为文本在每一页上被提取,打断流程。通过搜索重复文本来去除它们。
- 连字和特殊字符:存储为单个字形的「fi」可能根据PDF提取为单个字符或「fi」。较旧的PDF对此更糟。
- 换行处的连字符:在行尾用连字符断开的单词(
compre-/hensive)以连字符和换行符提取。您可能需要手动修复或使用脚本。 - 表格碎片化:PDF不会结构化地存储表格;提取通常产生没有行/列结构的扁平单元格文本列表。
- OCR文本质量:扫描PDF后面的文本层经常包含OCR错误(
rn读作m,cl读作d)。在依赖输出之前进行抽查。 - 编码乱码:使用非标准字体编码的PDF可能提取为乱码。尝试在Adobe Reader中打开PDF并复制粘贴以查看是否有相同的问题。
- 表单字段提取出上下文:可填写的PDF表单具有字段标签和值,提取时可能显示混乱。
- 注释和评论:PDF注释中的文本与页面内容分开。一些提取器包含它们,一些不包含。
- 从右到左的文本:阿拉伯语、希伯来语、波斯语文本可能从左到右提取,或者以视觉顺序而不是逻辑顺序的字符提取。
- 垂直文本:日语/中文的tategaki(竖排写作)PDF可能以错误的顺序提取字符。
- 水印:水印(机密、草稿)成为提取文本的一部分,在每一页上重复。
替代方法
如果基于浏览器的提取不适用于您的PDF:
- 扫描PDF的OCR:Tesseract(开源)、Adobe Acrobat Pro、Google Drive(上传并运行OCR),或像ABBYY FineReader这样的商业服务。
- 命令行工具:
pdftotext(xpdf/poppler)、pdfminer.six(Python)、pdfplumber(Python,表格感知)、pdf-parse(Node.js)。 - Adobe Acrobat Pro:导出为>文本或Word,通常准确但在某些工作流程中使用云服务。
- PDF转Word然后保存为文本:为您提供Word格式加上文本。
- 打印到文本文件:一些查看器可以「打印」到仅文本的输出,对于尴尬的布局有用。
- 基于LLM的提取:ChatGPT/Claude可以从上传的PDF中提取文本,甚至重新格式化表格;对于一次性使用很有用,但较慢且受上传大小限制。
对于不应离开您机器的机密PDF,基于浏览器的提取(此工具)或本地命令行工具(pdftotext)是唯一安全的选择。
提示
- 检查您的PDF是否有可选文本:在任何查看器中打开PDF,尝试用光标突出显示文本。如果可以选择,文本提取将有效。如果不能,它是扫描文档。
- 段落结构保留:提取器保留段落分隔,因此输出遵循文档的布局。然而,具有多列的复杂布局可能需要手动清理。
- 大文件工作良好:由于处理在您的浏览器中进行,没有上传大小限制。性能取决于您的设备,但具有数百页的文档可以毫无问题地处理。
- 使用PDF转Word进行格式化:如果您需要保留格式(粗体、标题、表格)而不是仅纯文本,请改用PDF转Word转换器。
- 使用查找和替换清理输出:常见的清理任务(删除页码、加入带连字符的换行、删除重复的标题)使用正则查找和替换很容易。
- 预先去除页码和标题:如果源PDF有明显的页码,在处理之前删除它们可以加快下游分析。
- 结合LLM进行摘要:提取文本,然后用类似「用5个要点总结关键点」的提示粘贴到ChatGPT或Claude中。对研究论文和报告效果很好。
- 对表格使用专门工具:如果您只需要PDF中的表格,请使用Tabula或PDF转Excel之类的工具,而不是一般的文本提取。
隐私和机密PDF
PDF文本提取器完全在您的浏览器中运行。您上传的PDF、中间处理和提取的文本都保留在您的设备上。没有任何内容上传到服务器、记录或与任何人共享。
这很重要,因为您从中提取文本的PDF通常非常敏感:带有需要引用的嵌入条款的合同、医疗记录和实验室报告、带有账号的财务报表、律师-客户特权下的法律辩护、雇佣合同和薪资细节、内部企业文件、出版前禁运的研究论文、扫描的身份证和护照、移民文件。云PDF提取器按设计将您的文件上传到他们的服务器,通常为「服务改进」保留它们,并参与了真正的数据泄露,其中机密合同和医疗记录最终被搜索引擎索引。基于浏览器的提取器没有任何暴露:PDF永远不会离开您的机器。
基于浏览器的提取在页面加载后也可以离线工作,对于在飞机上、在没有互联网访问的安全设施中处理文档,或者在任何您不能或不应将机密文件上传到第三方的地方都很有用。
常见问题
为什么我的 PDF 提取返回空结果?
该 PDF 很可能是扫描文档 · 它包含文字的图像,而不是实际的文字数据。提取只对含嵌入、可选文字的 PDF 有效。对于扫描文档,您需要 OCR(光学字符识别)软件。
此工具使用 OCR 吗?
不使用。它直接提取嵌入在 PDF 结构中的文字。对于文字型 PDF,比 OCR 更快更准确,但无法读取扫描图像中的文字。
我的 PDF 会发送到服务器吗?
不会。所有处理都在您的浏览器中进行。您的 PDF 从不离开您的设备,对机密文档也安全。
可以提取特定页面的文字吗?
工具处理所有页面并返回完整文字。之后您可以从结果中复制或编辑想要的部分。