You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyPDF2提取PDF文本出现随机空格问题求助

解决PyPDF2提取PDF文本时的随机空格问题

问题根源

这种随机空格是部分PDF的内部结构导致的——有些PDF生成时,字符不是按连续单词存储,而是拆成单个字符或小片段分散排列,PyPDF2提取时直接按片段顺序拼接,就会出现多余空格。不同PDF的生成工具(比如Word导出、OCR扫描件)或排版设置不同,就会出现有的文件正常、有的出问题的情况。

用PyPDF2的临时修复方案

提取文本后用正则表达式清理异常空格,针对单个字符间的多余空格做处理:

import PyPDF2
import re

def extract_clean_text(pdf_path):
    reader = PyPDF2.PdfReader(pdf_path)
    full_text = ""
    for page in reader.pages:
        raw_text = page.extract_text()
        # 移除单个字符之间的多余空格,保留单词间的正常空格
        cleaned = re.sub(r'(?<=[a-zA-Z]) (?=[a-zA-Z])', '', raw_text)
        # 把多个连续空格合并成单个
        cleaned = re.sub(r'\s+', ' ', cleaned).strip()
        full_text += cleaned + "\n"
    return full_text

注意:如果PDF里有故意的单个字母空格(比如"A B Test"这类格式),这个正则会误处理,需要根据你的文件内容调整规则。

更稳定的替代工具

如果修复效果不理想,推荐这两个工具,它们对PDF布局的解析能力更强:

  • pdfplumber:专注于PDF文本和数据提取,对字符排列的识别更精准,能大幅减少随机空格问题。示例代码:
import pdfplumber

def extract_with_pdfplumber(pdf_path):
    full_text = ""
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            full_text += page.extract_text() + "\n"
    return full_text
  • PyMuPDF(fitz):速度快、准确性高,对复杂排版的PDF支持很好,提取的文本连贯性远优于PyPDF2。示例代码:
import fitz  # 导入PyMuPDF

def extract_with_pymupdf(pdf_path):
    doc = fitz.open(pdf_path)
    full_text = ""
    for page in doc:
        full_text += page.get_text() + "\n"
    doc.close()
    return full_text

内容的提问来源于stack exchange,提问作者CalvinM02

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:27:05