使用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
相关产品推荐
相关产品推荐

