如何将pandas文本dataframe每行拆分为不超过512词的短文本行
实现方案
核心逻辑是先对单条文本按词拆分,切块后再拼接为字符串,最后用pandas原生方法展开为多行,全程符合Python风格,无多余依赖:
步骤1:定义文本切块函数
可自定义最大词数、块之间的重叠词数(适配NLP场景避免上下文断裂,不需要重叠设为0即可):
def split_text_by_word_count(text: str, max_words: int = 512, overlap: int = 0) -> list: # 按空格分词,中文场景替换为 jieba.lcut(text) 即可 words = text.split() chunks = [] # 计算滑动步长 step = max_words - overlap for i in range(0, len(words), step): # 截取对应长度的词拼接为字符串 chunk = ' '.join(words[i:i+max_words]) chunks.append(chunk) return chunks
步骤2:处理DataFrame
用apply对每行文本执行切块,再用explode把列表展开为独立行:
import pandas as pd # 假设你的原始DataFrame名为df df["text"] = df["text"].apply(split_text_by_word_count) # 展开列表为多行,重置索引 df = df.explode("text").reset_index(drop=True)
适配场景说明
- 中文处理:将分词逻辑替换为jieba分词即可,拼接时把
' '.join改为''.join - 字符数限制:如果需要按字符数而非词数拆分,直接去掉分词步骤,按索引截取原始字符串即可
- 文本预处理:如果原始文本存在大量换行、连续空格,可在分词前添加
text = ' '.join(text.split())规整空白符
内容的提问来源于stack exchange,提问作者alyferryhalo
相关产品推荐
相关产品推荐

