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

谷歌云端硬盘12652份PDF关键词段落提取及Excel存储优化问询

大规模PDF文件关键词提取优化方案

问题背景

谷歌云端硬盘中存储了12652份PDF文件,需从中提取包含特定关键词的段落并保存至Excel表格,使用PyPDF2实现时运行速度较慢,原代码如下:

# import packages
import PyPDF2
import re
x=[]
# open the pdf file
def func(i):
  reader = PyPDF2.PdfReader(i)

  # get number of pages
  num_pages = len(reader.pages)

  # define key terms
  string = "material weakness"

  # extract text and do the search
  for page in reader.pages:
      text = page.extract_text()
      # print(text)
      res_search = re.search(string, text)
      if res_search:
        print(res_search)
        x.append(i)


i=0
for f in files:
  try:
    # print(f)
    # print(i)
    # i+=1
    func(f)
    if i==12651:
      break
  except:
    pass

优化方向及解决方案

1. 替换高效PDF解析库

PyPDF2的文本提取效率偏低,改用**PyMuPDF(fitz)**能大幅提升速度,它对复杂PDF的兼容性也更好:

import fitz

def extract_text_fast(pdf_path):
    doc = fitz.open(pdf_path)
    full_text = ""
    for page in doc:
        full_text += page.get_text()
    return full_text

2. 并行处理文件

单线程遍历1万+文件效率极低,用concurrent.futures实现多线程/多进程处理,充分利用CPU资源:

from concurrent.futures import ThreadPoolExecutor
import re

def process_file(file_path):
    try:
        text = extract_text_fast(file_path)
        # 按空行分割段落,筛选含关键词的段落
        paragraphs = text.split("\n\n")
        target_paras = [p.strip() for p in paragraphs if "material weakness" in p.lower()]
        if target_paras:
            return (file_path, "\n---\n".join(target_paras))
    except Exception as e:
        print(f"处理{file_path}失败: {str(e)}")
        return None

# 用8个线程批量处理,可根据CPU核心数调整
with ThreadPoolExecutor(max_workers=8) as executor:
    results = list(executor.map(process_file, files))

3. 云端文件读取优化

直接读取云端文件会有网络延迟,建议先批量下载文件到本地目录,或使用谷歌云端硬盘API的流式读取接口,减少IO等待时间。

4. 高效写入Excel

用pandas替代手动拼接数据,快速将结果写入Excel:

import pandas as pd

# 过滤无效结果
valid_data = [item for item in results if item is not None]
df = pd.DataFrame(valid_data, columns=["文件路径", "目标段落"])
df.to_excel("关键词提取结果.xlsx", index=False)

5. 其他细节优化

  • 替换笼统的except: pass,针对性捕获PDF读取、文本提取等异常,避免忽略关键错误
  • 添加进度条(如tqdm)跟踪处理进度:from tqdm import tqdm; results = list(tqdm(executor.map(...), total=len(files)))
  • 关键词匹配可改用re.IGNORECASE忽略大小写,提升匹配范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:51:00