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

如何从pdftotext提取的PDF文本中提取段落(含跨页处理)

提取SSRN PDF段落并处理跨页问题

核心思路

SSRN PDF提取的文本里,段落内换行是单个换行符,段落间用空行分隔,跨页的段落则是上一页末尾和下一页开头无空行衔接。我们需要:

  1. 统一换行符,消除页面分隔的影响
  2. 合并跨页的连续内容
  3. 以空行为分隔,将连续非空行合并为完整段落

实现代码

from pdftotext import PDF

def extract_paragraphs(pdf_path):
    with open(pdf_path, "rb") as f:
        pdf = PDF(f)
    
    all_lines = []
    for idx, page in enumerate(pdf):
        # 统一换行符为\n,拆分每页文本为行列表
        lines = page.replace('\r\n', '\n').split('\n')
        
        # 处理跨页段落:相邻页面首尾非空则合并
        if idx > 0 and all_lines:
            prev_last = all_lines[-1].strip()
            curr_first = lines[0].strip() if lines else ""
            if prev_last and curr_first:
                # 合并上一页末尾与当前页开头
                all_lines[-1] = f"{all_lines[-1]} {curr_first}"
                lines = lines[1:]
        
        all_lines.extend(lines)
    
    # 合并连续非空行为段落,空行作为分隔
    paragraphs = []
    current_para = []
    for line in all_lines:
        stripped = line.strip()
        if stripped:
            current_para.append(stripped)
        else:
            if current_para:
                paragraphs.append(' '.join(current_para))
                current_para = []
    # 处理最后一个未收尾的段落
    if current_para:
        paragraphs.append(' '.join(current_para))
    
    return paragraphs

# 调用示例
paragraphs = extract_paragraphs("SSRN-id4337484.pdf")
# 查看前3个段落
for i, para in enumerate(paragraphs[:3], 1):
    print(f"段落{i}:\n{para}\n")

关键说明

  • 换行统一:将\r\n替换为\n,避免Windows格式换行带来的拆分问题
  • 跨页处理:遍历页面时检查上一页最后一行和当前页第一行,若均为有效内容则合并,消除分页对段落的切割
  • 段落合并:以空行作为段落边界,将段落内的多行文本用空格连接,还原完整语义段落
  • 可选优化:如果PDF包含页眉/页脚,可添加额外逻辑过滤(比如匹配页码、SSRN编号等特征文本)

内容的提问来源于stack exchange,提问作者data-monkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:05:04