使用PyPDF2提取PDF文本遇断词问题,如何优化提取质量?
解决PDF文本提取单词断连问题的优化方案
一、对PyPDF2提取结果做后处理修复
PyPDF2提取文本时,常会因原PDF的排版设置(比如单词换行拆分)出现断词。可以通过正则表达式对提取后的文本做批量修复,合并被空格拆分的单词:
import re from PyPDF2 import PdfReader reader = PdfReader('myfile.pdf') text = "" for i in range(10): page = reader.pages[i] text += page.extract_text() # 修复"comput ation"这类空格断词 fixed_text = re.sub(r'([a-zA-Z])\s+([a-zA-Z])', r'\1\2', text) # 额外处理带连字符的断词,比如"comput-\nation" fixed_text = re.sub(r'([a-zA-Z])-\s+([a-zA-Z])', r'\1\2', fixed_text) print(fixed_text)
二、更换更精准的PDF提取库
如果后处理仍无法满足需求,更换专业提取库能从根源减少断词问题,以下是两个高性价比的选择:
1. PyMuPDF(fitz)
PyMuPDF对PDF文本的解析精度高,能更好识别排版中的单词完整性,极少出现无意义断词:
import fitz doc = fitz.open('myfile.pdf') text = "" # 提取前10页(避免PDF页数不足10的情况) for page_num in range(min(10, len(doc))): page = doc[page_num] text += page.get_text() print(text)
2. pdfplumber
pdfplumber侧重保留PDF布局信息,对复杂排版的文本提取效果更稳定,能有效避免断词:
import pdfplumber with pdfplumber.open('myfile.pdf') as pdf: text = "" # 遍历前10页 for page_num in range(min(10, len(pdf.pages))): page = pdf.pages[page_num] text += page.extract_text() print(text)
这两个库的文本提取准确性普遍优于PyPDF2,尤其适合处理排版复杂的PDF文件。
内容的提问来源于stack exchange,提问作者Matt99
相关产品推荐
相关产品推荐

