如何从PDF论文中稳健提取作者姓名?
我来分享几个从PDF论文里稳健提取作者姓名的实用方法,针对你提到的arxiv论文场景,这些方案都挺靠谱的:
1. 利用学术平台API(最稳妥的arxiv场景方案)
像arxiv这类开放学术平台,直接调用官方API是最省心的方式——完全不用处理PDF解析的麻烦,直接拿平台存储的结构化元数据。比如用Python的arxiv库就能轻松实现:
import arxiv # 通过论文ID查询(你的目标论文ID是1111.1648) paper = next(arxiv.Search(id_list=["1111.1648"]).results()) # 提取所有作者姓名 authors = [author.name for author in paper.authors] print(authors) # 会输出包含`Archana Shukla`的完整作者列表
这种方法的准确率是100%,因为API返回的是平台官方存储的元数据,不会出现OCR错误或格式解析偏差。
2. 读取PDF内置元数据
很多正规学术PDF(包括arxiv生成的版本)本身就包含结构化元数据,你可以直接读取这些信息,不用遍历全文。比如用Python的PyPDF2或pdfplumber库:
from PyPDF2 import PdfReader # 加载PDF文件 reader = PdfReader("1111.1648.pdf") # 获取文档元数据 doc_metadata = reader.metadata # 打印作者信息(arxiv的PDF通常会规范存储这个字段) print(doc_metadata.author)
不过要注意,部分非正规PDF的元数据可能不全,但arxiv的论文基本都有完整的元数据,这个方法在你的场景下非常可靠。
3. 基于规则的文本解析(适配非结构化PDF)
如果遇到没有元数据的PDF(比如格式混乱的自定义文档),可以先提取文本再用规则匹配。步骤大概是:
- 用
PyMuPDF(提取文本准确率更高)提取PDF文本; - 利用学术论文的格式规律(作者通常在标题下方、关键词上方,或带有
Authors:这类前缀); - 用正则表达式匹配姓名格式。
针对arxiv论文的示例代码:
import fitz # PyMuPDF库 import re # 加载PDF doc = fitz.open("1111.1648.pdf") # 提取第一页文本(作者基本都在第一页) page_text = doc[0].get_text() # 拆分文本为行,arxiv论文的作者在标题后、arXiv编号前 lines = page_text.split('\n') author_lines = [] # 跳过标题行,收集后面的非空行直到遇到arXiv标识 for line in lines[1:]: stripped_line = line.strip() if stripped_line and not stripped_line.startswith('arXiv:'): author_lines.append(stripped_line) else: break # 把作者行合并后按逗号拆分,得到完整作者列表 authors = [name.strip() for name in ','.join(author_lines).split(',')] print(authors)
这种方法需要根据不同PDF格式调整规则,但arxiv论文格式统一,规则很容易写,准确率也很高。
4. OCR处理扫描版PDF
如果是扫描生成的图片型PDF,先要用OCR工具把图片转成文本,再用上面的规则解析。比如用pytesseract结合pdf2image:
from pdf2image import convert_from_path import pytesseract # 把PDF转成图片 pages = convert_from_path("scanned_paper.pdf") # 对第一页做OCR识别 page_text = pytesseract.image_to_string(pages[0]) # 后续步骤和规则解析一致,提取作者姓名
这种方法的效果依赖于扫描清晰度,模糊的话可以先对图片做降噪、增强对比度的预处理。
总结
优先用API或PDF元数据提取,这两种方法最稳健;如果不行再用规则解析;扫描版PDF则需要加OCR步骤。针对你提到的arxiv论文,用API或读取元数据就能轻松拿到Archana Shukla的名字,完全不会出错。
内容的提问来源于stack exchange,提问作者user1424739

