You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLP处理:评论分句时保留原评论关联评分的实现方法

实现方案

你当前的核心问题是分句阶段仅存储了句子文本本身,没有同步保留句子和原评论的映射关系,导致后续无法关联原评论的Rank评分。以下是两种可落地的实现方式:


方案1:分句阶段同步写入关联字段(推荐)

从数据处理源头避免映射丢失,遍历原评论DataFrame时,同步记录每个拆分句子对应的原评论评分、原评论索引等字段,直接生成带完整关联关系的句子级DataFrame。
注:你原有的spacy分句代码存在语法错误,nlp()调用缺少右括号,以下代码已一并修复

import spacy
from textblob import TextBlob
import pandas as pd

nlp = spacy.load("en_core_web_sm")
sentence_records = []

# 遍历原评论表每一行
for row_idx, row in low_reviews.iterrows():
    review_content = row["Review_Text"]
    review_rank = row["Rank"]  # 替换为你表中存储整体评分的实际列名
    doc = nlp(review_content)
    
    for sent in doc.sents:
        sent_text = sent.text.strip()
        if not sent_text:
            continue  # 过滤拆分产生的空字符串
        # 计算当前句子情感分
        sent_polarity = TextBlob(sent_text).sentiment.polarity
        # 存储全量关联字段
        sentence_records.append({
            "source_review_id": row_idx,
            "sentence_content": sent_text,
            "sentiment_score": sent_polarity,
            "original_rank": review_rank
        })

# 直接转换为句子级DataFrame,所有字段自动对齐
sentence_level_df = pd.DataFrame(sentence_records)

这种方式生成的结果不会出现映射错位,后续可以直接通过source_review_id溯源到任意句子对应的原评论内容。


方案2:为已生成的句子表补全Rank字段

如果你已经跑完分句和情感计算流程,不想重新跑全量数据,可以按照和之前完全一致的分句逻辑,统计每条原评论拆分出的有效句子数量,按顺序为现有句子表匹配对应Rank:

# 统计每条原评论拆分出的有效句子数,分句/过滤逻辑必须和之前完全一致
sentence_num_per_review = []
for text in low_reviews["Review_Text"]:
    doc = nlp(text)
    valid_sent_count = len([s for s in doc.sents if s.text.strip()])
    sentence_num_per_review.append(valid_sent_count)

# 按句子数量生成对应长度的Rank列表,顺序和原表完全一致
matched_ranks = []
for rank, sent_count in zip(low_reviews["Rank"], sentence_num_per_review):
    matched_ranks += [rank] * sent_count

# 将匹配好的Rank列写入现有句子表
your_existing_sentence_df["original_rank"] = matched_ranks

风险提示:该方案要求两次分句的逻辑100%一致,包括空值过滤、文本预处理规则等,否则会出现Rank和句子错位的问题,仅作为临时补数方案使用。


后续分析参考

拿到关联好的句子表后,按原评论ID分组聚合,即可快速计算每条评论的句子情感加权均值,和原评分做比对分析:

# 示例:计算每条评论的句子平均情感分
review_agg_result = sentence_level_df.groupby("source_review_id").agg(
    avg_sentiment = ("sentiment_score", "mean"),
    original_rank = ("original_rank", "first")
).reset_index()

内容的提问来源于stack exchange,提问作者Varunnayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:45:43