苏宁易购评价文本分析:基于 Python 的分词与停用词处理实战
·
在电商运营场景中,用户评价是挖掘产品问题、提炼核心卖点的核心数据源。苏宁易购作为头部电商平台,其海量的用户评价文本中藏着直接的用户反馈 —— 差评能精准定位物流、质量、售后等短板,优质评价则能总结产品的核心优势。本文将基于原生 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 关键注意点
- 编码问题:差评 / 优质评价文件用gbk编码,停用词表用utf8编码,需严格对应,否则会出现乱码;
- 停用词表完整性:StopwordsCN.txt的内容决定去停用词的效果,若想过滤更多无意义词汇(如 “苏宁”“易购”),可手动添加到停用词表;
- 空值风险:若评价文本中有空行,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)
五、总结
- 原生代码的核心流程为:文本读取→jieba 分词→结果保存→停用词过滤,逻辑简洁,聚焦文本预处理的核心步骤;
- jieba.lcut的精确分词模式适配电商短文本,pd.read_table能高效读取 “每行一条评价” 的文本格式;
- 停用词过滤的核心是 “遍历判断 - 保留非停用词”,是文本分析中去除噪声、聚焦核心语义的关键步骤。
这套原生代码虽无复杂优化,但完整实现了电商评价文本预处理的基础需求,是后续情感分析、词云可视化、关键词提取等高阶分析的基石。若需适配更大数据量,可在此基础上补充空值过滤、异常处理等逻辑,但对于中小规模的苏宁易购评价分析,原生代码已足够实用。
更多推荐



所有评论(0)