如何将Pandas DataFrame中超出Transformer模型最大序列长度的字符串列拆分为多行子文本并保留对应标签?
解决Pandas长文本拆分并保留标签的问题
没问题,这事儿用Pandas自带方法加个自定义拆分函数就能轻松搞定,我给你一步步拆解:
核心思路
我们要做的就是:给每个长文本生成拆分后的子文本列表,再把这个列表"炸开"成单独的行,让标签自动跟着每一行对应上。
具体实现代码
先把你的示例数据准备好,再写拆分逻辑:
import pandas as pd # 初始化你的输入DataFrame df = pd.DataFrame({ "Text": ["This is a very long spam email", "This is a very long normal email"], "Label": [1, 0] }) def split_text(text, max_seq_len=4): # 把文本按空格拆成单词列表 words = text.split() # 按指定长度分批截取单词,再拼接成子文本 return [' '.join(words[i:i+max_seq_len]) for i in range(0, len(words), max_seq_len)] # 给每个文本生成拆分后的子文本列表 df['split_text'] = df['Text'].apply(lambda x: split_text(x, max_seq_len=4)) # 把列表展开成单独行,同时保留原标签 result_df = df.explode('split_text').drop(columns='Text').rename(columns={'split_text': 'Text'}) # 查看最终结果 print(result_df)
输出结果
运行代码后,会得到和你期望完全一致的输出:
| Text | Label | |
|---|---|---|
| 0 | This is a very | 1 |
| 0 | long spam email | 1 |
| 1 | This is a very | 0 |
| 1 | long normal email | 0 |
关键细节说明
split_text函数:先把文本拆成单词,再用列表推导式按指定长度分批截取,最后拼接成子字符串。哪怕最后一批不足指定长度,也会完整保留(比如5个词会拆成4+1两组)。explode方法:这是Pandas专门用来把列表型列拆成多行的工具,拆分后原索引会保留,每个子文本都会自动对应原标签,完美解决标签匹配问题。- 最后删掉原Text列,把拆分后的列重命名回Text,就得到了你要的格式。
内容的提问来源于stack exchange,提问作者Toby
相关产品推荐
相关产品推荐

