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

如何从pandas列存储的多结构邮件中提取正文?

提取Pandas列中邮件实际正文的实现方案

针对10000封结构各异、含多轮回复的邮件,核心采用规则匹配+批量文本清理的思路处理,具体步骤和代码如下:


1. 定位邮件回复分界点

多轮回复/转发的邮件普遍带有固定分隔标识,比如:

-----Original Message-----
On [日期] [时间], [发件人] wrote:
--- 原始邮件 ---

通过正则匹配这些标记,截断标记之后的引用内容,只保留原始正文部分。

2. 清理冗余内容

邮件中常包含签名、免责声明、广告等无关信息,同样用正则匹配去除:

  • 签名块(如以"Best regards," "此致,"开头的段落)
  • 固定格式的免责声明(如"This email is confidential..."或中文保密话术)
  • HTML格式残留(若邮件是HTML格式,先转成纯文本)

3. 批量处理代码实现

结合Pandas、正则和BeautifulSoup实现自定义清理函数,批量应用到目标列:

import pandas as pd
import re
from bs4 import BeautifulSoup

def clean_email(email_content):
    # 处理HTML格式邮件
    if "<html>" in email_content.lower():
        soup = BeautifulSoup(email_content, "html.parser")
        email_content = soup.get_text(separator="\n")
    
    # 移除回复/转发引用内容
    reply_triggers = [
        r"-----Original Message-----.*",
        r"---------- Forwarded message ----------.*",
        r"On .* wrote:\s*.*",
        r"--- 原始邮件 ---.*",
        r"^\s*>.*$"  # 清理带>的引用行
    ]
    for pattern in reply_triggers:
        email_content = re.sub(pattern, "", email_content, flags=re.DOTALL | re.MULTILINE)
    
    # 移除签名和免责声明
    redundant_patterns = [
        r"(Best regards|Sincerely|Regards|此致|感谢您的支持,\s*).*",
        r"This email is confidential.*",
        r"本邮件为保密信息.*",
        r"©.*保留所有权利.*"
    ]
    for pattern in redundant_patterns:
        email_content = re.sub(pattern, "", email_content, flags=re.DOTALL | re.MULTILINE)
    
    # 清理多余换行和空格
    email_content = re.sub(r"\n\s*\n", "\n", email_content).strip()
    return email_content

# 应用到DataFrame列
df["clean_email"] = df["email"].apply(clean_email)

4. 迭代优化规则

由于邮件结构差异大,处理后需抽样检查错误案例,补充新的正则规则(比如某些公司的专属分隔标记)。对于极少数规则无法覆盖的邮件,可人工标记后单独处理,或用轻量NLP模型辅助区分正文与冗余内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:15:47