如何在Python中基于Pytesseract OCR仅处理PDF前5页
仅处理PDF前5页的OCR代码修改
要实现只处理每个PDF的前5页,核心是在PDF转图片阶段就限制只转换前5页,避免不必要的资源消耗,同时确保后续OCR只处理这些页面。以下是修改后的代码及关键说明:
修改后的完整代码
import os import time from pdf2image import convert_from_path import pytesseract # 配置Tesseract路径 pytesseract.pytesseract.tesseract_cmd = "Path to pytesseract" # PDF文件所在目录 path = r"Path to PDF" os.chdir(path) # 假设FoundFiles是你获取到的PDF文件名列表 for counterDocuments in range(len(FoundFiles)): filePath = os.path.join(path, FoundFiles[counterDocuments]) ResultPageNumber = [] st = time.time() # 仅转换PDF的前5页(如果PDF页数不足5页,则转换所有现有页面) doc = convert_from_path(filePath, first_page=1, last_page=5) # 遍历转换后的页面(最多5页) for page_number, page_data in enumerate(doc): txt = pytesseract.image_to_string(page_data, lang='eng') # 后续的关键词搜索、CSV导出逻辑保留在此处 # ... et = time.time() print(f"处理文件 {FoundFiles[counterDocuments]} 耗时: {et - st:.2f} 秒")
关键修改点
- PDF转图片时限制页数:调用
convert_from_path时添加first_page=1, last_page=5参数,直接只生成前5页的图片。如果目标PDF的页数少于5页,该方法会自动转换所有现有页面,无需额外判断。 - 优化文件路径拼接:用
os.path.join()替代手动拼接路径,避免因系统分隔符不同导致的错误。 - 修正循环逻辑:原代码中
for n in FoundFiles却使用counterDocuments索引,改为for counterDocuments in range(len(FoundFiles))更符合逻辑,你也可以直接遍历文件名:for filename in FoundFiles: filePath = os.path.join(path, filename)。
如果坚持要在OCR循环阶段做判断(不推荐,因为还是会转换所有页面),也可以在循环中添加条件:
for page_number, page_data in enumerate(doc): # page_number从0开始,判断小于5即可只处理前5页 if page_number < 5: txt = pytesseract.image_to_string(page_data, lang='eng') # 后续逻辑... else: break
但这种方式会先把整个PDF转成图片,再跳过后续页面,浪费资源,优先推荐第一种方法。
内容的提问来源于stack exchange,提问作者jaayjoo
相关产品推荐
相关产品推荐

