You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Python从PDF文件中提取指定的特定文本内容?

提取PDF中特定联系信息的PyPDF2解决方案

嘿,我看你已经用PyPDF2搭好基础框架了,接下来咱们直接针对你要的那段联系信息做精准提取就行。这里有两种靠谱的方法,你可以根据PDF里的文本排版情况选:

方法一:精准匹配固定文本段(适合文本连续无干扰的情况)

如果目标联系信息在PDF里是连续的一段(哪怕有换行,字符串里会保留换行符),你可以直接通过字符串切片来提取:

import PyPDF2

# 打开PDF文件
pdfFileObj = open('SPE7M518T446E.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)

# 获取第0页的文本
pageObj1 = pdfReader.getPage(0)
pagecontent = pageObj1.extract_text()

# 定义目标文本的起始和结束标识
start_marker = "DLA LAND AND MARITIME ACTIVE DEVICES DIVISION"
end_marker = "Desmond.Forshey@dla.mil"

# 定位并提取目标文本
start_idx = pagecontent.find(start_marker)
end_idx = pagecontent.find(end_marker) + len(end_marker)
target_text = pagecontent[start_idx:end_idx]

# 输出结果
print(target_text)

# 关闭文件
pdfFileObj.close()

这个方法的核心是用find()找到目标文本的起始和结束位置,然后切片截取。如果PDF里的这段文本有换行,提取出来的target_text会保留换行格式,你可以用target_text.replace('\n', ' ')来统一成空格分隔。

方法二:正则表达式提取(适合排版有变化的情况)

如果PDF里的联系信息排版有零散换行(比如地址拆成多行、字段单独成行),用正则表达式匹配更灵活,能精准抓取每个字段:

import PyPDF2
import re

# 打开PDF并获取页面文本
pdfFileObj = open('SPE7M518T446E.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
pageObj1 = pdfReader.getPage(0)
pagecontent = pageObj1.extract_text()

# 定义正则匹配规则,覆盖所有目标字段
pattern = r"""
DLA LAND AND MARITIME ACTIVE DEVICES DIVISION\s+PO BOX 3990\s+COLUMBUS OH 43218-3990 USA
\s+Name:\s*(.*?)
\s+Buyer Code:\s*(.*?)
\s+Tel:\s*(.*?)
\s+Fax:\s*(.*?)
\s+Email:\s*(.*?)
"""
# 使用re.DOTALL让.匹配换行符,re.VERBOSE忽略正则里的空格
match = re.search(pattern, pagecontent, re.DOTALL | re.VERBOSE)

if match:
    # 提取所有字段
    full_address = match.group(0).split('\n')[0]  # 取地址部分
    name = match.group(1).strip()
    buyer_code = match.group(2).strip()
    tel = match.group(3).strip()
    fax = match.group(4).strip()
    email = match.group(5).strip()

    # 整理输出
    print("提取的联系信息:")
    print(full_address)
    print(f"Name: {name}")
    print(f"Buyer Code: {buyer_code}")
    print(f"Tel: {tel}")
    print(f"Fax: {fax}")
    print(f"Email: {email}")
else:
    print("未找到目标联系信息")

pdfFileObj.close()

这个方法能应对PDF文本里的换行、空格变化,还能把每个字段单独提取出来,方便后续处理。

小提示

  • 如果目标文本不在第0页,你可以循环遍历所有页面(用pdfReader.numPages获取总页数),逐个页面查找匹配。
  • 如果PyPDF2提取文本效果不好(比如PDF是扫描件或加密的),可以试试pdfplumber库,它的文本提取精度更高。

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

火山引擎 最新活动