如何合并DataFrame列中的句子并转换为纯文本?
我创建了一个包含Body列的DataFrame,其中sample['Body'][1]的内容是一个形似列表的字符串(包含方括号、单引号分隔的内容),我想将其转换为纯文本(移除方括号、逗号,保留新闻内容),但使用print(''.join(sample.Body[1]))后输出还是原格式,没有达到预期效果。
原内容示例(翻译后):
'['印度前队长们本该展现出成熟,私下解决问题', '当自我膨胀发生冲突时,结果往往是灾难性的,还不堪入目,而且争端会持续发酵。这正是维拉特·科利与索拉夫·甘古利之间矛盾的现状。这场争议的余波持续占据头条,有消息称甘古利曾计划就科利的言论向其发出说明通知书。', ..., '或']'
sample.Body[1]并不是真正的Python列表,而是一个字符串类型的数据。直接调用''.join()会把字符串的每个字符(包括方括号、单引号、逗号)都拼接起来,自然无法得到纯文本内容。
需要先把这个形似列表的字符串转换成真正的列表,再拼接成纯文本,还可以过滤掉无关内容(如广告、作者签名等):
步骤1:转换字符串为列表
使用ast.literal_eval()方法解析字符串,将其转为真实的Python列表:
import ast # 把字符串形式的列表转为真实列表 text_list = ast.literal_eval(sample.Body[1])
步骤2:过滤并拼接内容
过滤掉空字符串和无关的广告/签名内容,再用空格或换行拼接列表元素:
# 过滤空字符串和非新闻内容(可根据实际情况调整过滤规则) filtered_text = [item for item in text_list if item and not (item.startswith('@') or item.startswith('Get') or item.startswith('Dear Reader'))] # 拼接为纯文本,用空格分隔(也可以用'\n'换行) pure_text = ' '.join(filtered_text) print(pure_text)
处理后效果示例(翻译后)
印度前队长们本该展现出成熟,私下解决问题 当自我膨胀发生冲突时,结果往往是灾难性的,还不堪入目,而且争端会持续发酵。这正是维拉特·科利与索拉夫·甘古利之间矛盾的现状。这场争议的余波持续占据头条,有消息称甘古利曾计划就科利的言论向其发出说明通知书。 南非巡回赛前夕,科利在一场线上新闻发布会上否认了甘古利的说法——甘古利称曾试图劝阻科利辞去T20队长一职。此前印度板球委员会刚宣布解除科利的单日国际赛队长职务。...(后续新闻内容)
内容的提问来源于stack exchange,提问作者Tharika Ranatunga

