TFIDFVectorizer拟合转换后导出邮件特征至Excel的实现方法
解决方案
要实现从TF-IDF稀疏矩阵中提取每封邮件的特征词并生成Excel报表,可按以下步骤操作:
步骤1:获取所有特征词列表
通过TfidfVectorizer实例的get_feature_names()方法,获取经过停用词去除、词形还原后的全部特征词:
feature_names = vec_body.get_feature_names()
步骤2:逐行提取单封邮件的特征词
遍历稀疏矩阵的每一行,定位非零元素对应的列索引,再映射到特征词并拼接成字符串:
import pandas as pd email_features_list = [] # 遍历稀疏矩阵的每一行(对应每封邮件) for row in X_train_features: # 获取当前行非零元素的列索引 col_indices = row.nonzero()[1] # 通过索引匹配特征词,并用空格连接成字符串 features = ' '.join([feature_names[idx] for idx in col_indices]) email_features_list.append(features)
步骤3:生成Excel报表
将邮件正文与对应特征词组合成DataFrame,再导出为Excel文件:
# 构建符合要求的表格结构 df = pd.DataFrame({ 'email_body': X_train, 'email features': email_features_list }) # 导出到Excel,关闭行索引避免冗余内容 df.to_excel('email_features_verification.xlsx', index=False)
补充说明
- 若运行时出现
AttributeError: 'TfidfVectorizer' object has no attribute 'get_feature_names',可尝试替换为get_feature_names_out()(适配部分较新版本的scikit-learn)。 - 稀疏矩阵的
nonzero()方法返回两个数组,其中第二个数组是特征词的列索引,对应feature_names中的位置。
内容的提问来源于stack exchange,提问作者sergioMoreno
相关产品推荐
相关产品推荐

