如何将评论列内容按句子拆分新增列并重复其余列对应数据
评论列拆分单句并展开行实现方案
需求说明
现有数据集包含3个字段:Review(评论内容)、Date(评论日期)、Review Rating(评论评分),需要将整段评论按句子拆分后存入新增的Sentence(单句)列,其余原有字段的内容会根据单条评论拆分出的句子数量对应重复,最终效果示例:
Date Review_Rating Review Sentence 12-02-2021 5 ram is good. ram is intelligent ram is good. 12-02-2021 5 ram is good. ram is intelligent ram is intelligent
Python Pandas 实现方案
这是最常用的处理方式,分两种实现可选:
1. 正则拆分(无需额外依赖)
用正则匹配句尾标点拆分,不会误删句尾符号,适配大部分通用场景:
import pandas as pd import re # 读取你的数据集,替换为你自己的文件读取逻辑 df = pd.read_csv("your_data.csv") # 定义句子拆分函数 def split_into_sentences(text): # 按.?!后跟空白字符/结尾的位置拆分,保留句尾标点 sentences = re.split(r'(?<=[.?!])\s+', text.strip()) # 过滤空字符串 return [s for s in sentences if s] # 新增Sentence列存储拆分后的句子列表 df["Sentence"] = df["Review"].apply(split_into_sentences) # 展开列表为行,其余字段自动对应重复 df = df.explode("Sentence", ignore_index=True)
2. NLTK 专业分词(适配复杂句式)
如果评论里存在Mr.、Dr.这类带缩写句号的内容,建议用NLTK的专业分句工具避免误拆分:
import pandas as pd import nltk # 首次运行需要下载分句模型 nltk.download('punkt') df = pd.read_csv("your_data.csv") df["Sentence"] = df["Review"].apply(nltk.sent_tokenize) df = df.explode("Sentence", ignore_index=True)
MySQL 8.0+ 实现方案
如果需要直接在数据库中处理,可以用递归CTE实现:
WITH RECURSIVE split_sentences AS ( SELECT Date, Review_Rating, Review, 1 AS idx, -- 提取第一个句子 TRIM(SUBSTRING_INDEX(REPLACE(Review, '. ', '|'), '|', 1)) AS Sentence, -- 剩余未拆分的内容 TRIM(SUBSTRING(REPLACE(Review, '. ', '|'), LENGTH(SUBSTRING_INDEX(REPLACE(Review, '. ', '|'), 1)) + 2)) AS remaining FROM your_table UNION ALL SELECT Date, Review_Rating, Review, idx + 1, TRIM(SUBSTRING_INDEX(remaining, '|', 1)), TRIM(SUBSTRING(remaining, LENGTH(SUBSTRING_INDEX(remaining, '|', 1)) + 2)) FROM split_sentences WHERE remaining != '' ) SELECT Date, Review_Rating, Review, Sentence FROM split_sentences ORDER BY Date, Review, idx;
内容的提问来源于stack exchange,提问作者Rishabh Sontakke
相关产品推荐
相关产品推荐

