在电商运营场景中,用户评价是挖掘产品问题、提炼核心卖点的核心数据源。苏宁易购作为头部电商平台,其海量的用户评价文本中藏着直接的用户反馈 —— 差评能精准定位物流、质量、售后等短板,优质评价则能总结产品的核心优势。本文将基于原生 Python 代码,完整还原苏宁易购评价文本从读取、分词到停用词过滤的全流程,无需复杂优化,聚焦核心逻辑的理解与落地。

一、核心技术与数据准备

1.1 核心技术选型

本次实战仅使用两个核心库,轻量化完成文本预处理:

  • pandas:用于文本文件的读取、数据存储(导出 Excel);
  • jieba:中文分词的经典库,适配电商短文本的精确分词需求。

1.2 数据文件说明

实战依赖 3 个文本文件,需提前放在代码同级目录:

  • 差评.txt:每行一条苏宁易购用户负面评价;
  • 优质评价1.txt:每行一条苏宁易购用户正面评价;
  • StopwordsCN.txt:中文停用词表,包含 “的、了、啊、这” 等无实际语义的词汇。

二、原生代码完整实现与逐行解析

以下是未经优化的原生代码,完全保留原始逻辑,我们逐段拆解每一步的作用:

import pandas as pd
# 读取差评数据:指定编码gbk(适配中文Windows文件),无表头,列名设为content
cp_content = pd.read_table(r'差评.txt', encoding='gbk', header=None, names=['content'])
# 读取优质评价数据:参数与差评一致
yzpj_content = pd.read_table(r'优质评价1.txt', encoding='gbk', header=None, names=['content'])

import jieba
# 处理差评分词
cp_segments = []
contents = cp_content.content.values.tolist()  # 将DataFrame的content列转为列表
for content in contents:
    results = jieba.lcut(content)  # jieba精确分词,返回词汇列表
    if len(results) > 1:  # 过滤仅单个词的评价(无分析价值)
        cp_segments.append(results)
# 将分词结果保存为Excel,不保留行索引
cp_fc_results = pd.DataFrame({'content': cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx', index=False)

# 处理优质评价分词(逻辑与差评完全一致)
yzpj_segments = []
contents = yzpj_content.content.values.tolist()
for content in contents:
    results = jieba.lcut(content)
    if len(results) > 1:
        yzpj_segments.append(results)
# 保存优质评价分词结果
yzpj_fc_results = pd.DataFrame({'content': yzpj_segments})
yzpj_fc_results.to_excel('yzpj_fc_results.xlsx', index=False)

"""把所有的内容都进行jieba,分词中有一些内容,是无意义。
#3.移除停用词
#segments_clean:每一篇文章的分词结果
#all_words:所有文章总的分词结果"""
# 读取停用词表:编码utf8(停用词表通用编码),列名设为stopword
stopwords_df = pd.read_table(r'StopwordsCN.txt', encoding='utf8', header=None, names=['stopword'])
stopwords = stopwords_df['stopword'].tolist()  # 转为列表,方便后续遍历判断

# 定义移除停用词的函数
def drop_stopwords(contents, stopwords):
    segments_clean = []  # 存储去停用词后的结果
    for content in contents:  # 遍历每一条评价的分词结果
        line_clean = []  # 存储单条评价去停用词后的词汇
        for word in content:  # 遍历单条评价的每个词汇
            if word in stopwords:  # 如果是停用词,跳过
                continue
            line_clean.append(word)  # 非停用词保留
        segments_clean.append(line_clean)
    return segments_clean

# 对差评分词结果去停用词
contents = cp_fc_results.content.values.tolist()
cp_fc_contents_clean_s = drop_stopwords(contents, stopwords)

# 对优质评价分词结果去停用词
contents = yzpj_fc_results.content.values.tolist()
yzpj_fc_contents_clean_s = drop_stopwords(contents, stopwords)

2.1 代码核心逻辑拆解

(1)文本读取阶段
cp_content = pd.read_table(r'差评.txt', encoding='gbk', header=None, names=['content'])
  • pd.read_table:按行读取文本文件,适合 “每行一条评价” 的格式;
  • encoding='gbk':Windows 系统下中文文本默认编码,若读取乱码可尝试utf8;
  • header=None, names=['content']:文件无表头,手动指定列名为content,方便后续调用。
(2)jieba 分词阶段
for content in contents:
    results = jieba.lcut(content)
    if len(results) > 1:
        cp_segments.append(results)
  • jieba.lcut(content):使用 jieba精确分词模式,将单条评价拆分为词汇列表(如 “物流太慢了”→['物流', '太', '慢', '了']);
  • len(results) > 1:过滤掉分词后仅 1 个词的评价(如 “差”“好”),避免无意义数据。
(3)结果保存阶段
cp_fc_results = pd.DataFrame({'content': cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx', index=False)
  • 将分词后的二维列表转为 DataFrame,方便结构化存储;
  • to_excel('cp_fc_results.xlsx', index=False):导出 Excel 时不保留行索引,让结果更整洁。
(4)停用词处理阶段
def drop_stopwords(contents, stopwords):
    segments_clean = []
    for content in contents:
        line_clean = []
        for word in content:
            if word in stopwords:
                continue
            line_clean.append(word)
        segments_clean.append(line_clean)
    return segments_clean
  • 函数接收两个参数:contents是所有评价的分词列表(二维),stopwords是停用词列表;
  • 双层循环逻辑:外层遍历每条评价的分词结果,内层遍历单个词汇,判断是否为停用词,非停用词保留。

三、代码执行结果与解读

3.1 生成的文件

运行代码后,会在同级目录生成 2 个 Excel 文件:

  • cp_fc_results.xlsx:差评的分词结果(未去停用词);
  • yzpj_fc_results.xlsx:优质评价的分词结果(未去停用词)。

3.2 变量结果示例

假设差评.txt中有一条评价:“物流太慢了,产品质量也差”,则:

  • 分词后结果(cp_segments):['物流', '太', '慢', '了', ',', '产品', '质量', '也', '差']
  • 去停用词后结果(cp_fc_contents_clean_s):['物流', '慢', '产品', '质量', '差'](假设 “太、了、,、也” 在停用词表中)。

3.3 关键注意点

  1. 编码问题:差评 / 优质评价文件用gbk编码,停用词表用utf8编码,需严格对应,否则会出现乱码;
  2. 停用词表完整性:StopwordsCN.txt的内容决定去停用词的效果,若想过滤更多无意义词汇(如 “苏宁”“易购”),可手动添加到停用词表;
  3. 空值风险:若评价文本中有空行,jieba.lcut会返回空列表,可能导致后续处理报错(原生代码未做过滤,需手动清理文本文件)。

四、原生代码的直接应用

虽然代码未做优化,但已能满足基础的文本预处理需求,可直接延伸出以下应用:

4.1 查看高频词汇

在代码末尾添加以下内容,统计差评 / 优质评价的核心词汇:

# 统计差评去停用词后的所有词汇
all_cp_words = []
for line in cp_fc_contents_clean_s:
    all_cp_words.extend(line)
# 统计词频(取前10)
from collections import Counter
cp_word_count = Counter(all_cp_words).most_common(10)
print("差评高频词汇TOP10:", cp_word_count)

# 统计优质评价高频词汇
all_yzpj_words = []
for line in yzpj_fc_contents_clean_s:
    all_yzpj_words.extend(line)
yzpj_word_count = Counter(all_yzpj_words).most_common(10)
print("优质评价高频词汇TOP10:", yzpj_word_count)

4.2 保存去停用词后的结果

若想将去停用词后的结果也保存为 Excel,添加以下代码:

# 保存差评去停用词结果
cp_clean_df = pd.DataFrame({'content': cp_fc_contents_clean_s})
cp_clean_df.to_excel('cp_fc_clean_results.xlsx', index=False)

# 保存优质评价去停用词结果
yzpj_clean_df = pd.DataFrame({'content': yzpj_fc_contents_clean_s})
yzpj_clean_df.to_excel('yzpj_fc_clean_results.xlsx', index=False)

五、总结

  1. 原生代码的核心流程为:文本读取→jieba 分词→结果保存→停用词过滤,逻辑简洁,聚焦文本预处理的核心步骤;
  2. jieba.lcut的精确分词模式适配电商短文本,pd.read_table能高效读取 “每行一条评价” 的文本格式;
  3. 停用词过滤的核心是 “遍历判断 - 保留非停用词”,是文本分析中去除噪声、聚焦核心语义的关键步骤。

这套原生代码虽无复杂优化,但完整实现了电商评价文本预处理的基础需求,是后续情感分析、词云可视化、关键词提取等高阶分析的基石。若需适配更大数据量,可在此基础上补充空值过滤、异常处理等逻辑,但对于中小规模的苏宁易购评价分析,原生代码已足够实用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐