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

如何用Python从格式统一的多份PDF首页提取加粗作者名?

解决PDF第一页加粗作者名提取问题

PyPDF2提取的是纯文本,不会保留字体加粗这类格式信息,这就是你没法直接提取加粗作者名的核心原因。下面提供两种可行的解决方案:

方法1:用PyMuPDF(fitz)提取带格式的文本

PyMuPDF可以获取每个文本片段的字体属性,通过判断字体是否为粗体来筛选目标内容:

import fitz  # 先安装依赖:pip install pymupdf

def extract_bold_authors(pdf_path):
    doc = fitz.open(pdf_path)
    page = doc[0]  # 取第一页
    bold_texts = []
    # 遍历页面内的文本块、行、文本片段
    for block in page.get_text("dict")["blocks"]:
        if "lines" in block:
            for line in block["lines"]:
                for span in line["spans"]:
                    # 通过字体标记或字体名判断是否为粗体
                    if (span["flags"] & 2) == 2 or "Bold" in span["font"]:
                        bold_texts.append(span["text"].strip())
    doc.close()
    # 根据你的PDF格式,筛选出作者名(比如排除加粗标题、期刊名等无关内容)
    return bold_texts

# 调用示例
authors = extract_bold_authors("pdf_file")
print(authors)

方法2:结合文本上下文与正则提取

如果你的PDF格式高度统一,加粗作者名和邮箱有固定位置关联(比如作者名在邮箱上方,或同一行的前缀部分),可以先定位邮箱,再匹配附近的文本:

import PyPDF2
import re

def extract_author_from_context(pdf_path):
    reader = PyPDF2.PdfReader(pdf_path)
    page = reader.pages[0]
    text = page.extract_text()
    # 定位邮箱位置
    email_pattern = r"\{([^}]+)\}"
    email_match = re.search(email_pattern, text)
    if not email_match:
        return None
    # 按行分割文本,匹配邮箱所在行的上下文
    lines = text.split("\n")
    for idx, line in enumerate(lines):
        if email_match.group() in line:
            # 假设作者名在邮箱所在行的上一行,可根据实际排版调整
            if idx > 0:
                return lines[idx-1].strip()
            else:
                return line.split(email_match.group())[0].strip()
    return None

# 调用示例
author = extract_author_from_context("pdf_file")
print(author)

注意事项

  • 方法1需要根据PDF实际内容,对提取到的加粗文本做二次筛选,排除非作者名的加粗内容。
  • 方法2依赖固定排版,若PDF格式有变动,需调整上下文匹配的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:45:06