小白入门|手把手实现评论识别(朴素贝叶斯实战,零报错版)
哈喽~ 如果你是编程小白,想试着用Python做一个“评论识别”(比如区分“产品好评”和“非产品无关评论”),但又怕代码复杂、报错不断,那这篇博客绝对适合你!
全程避开晦涩术语,每一步都写得明明白白,跟着操作就能跑通,还会解决你可能遇到的「文件找不到」「代码报错」等问题,新手也能轻松上手~
先给大家看最终效果:输入一句话(比如“产品质量很好”“今天天气不错”),程序就能自动判断这是「好评」还是「非产品评价」,像这样👇
请输入要预测的语句:产品质量很好 预测结果:产品质量很好 → 好评 请输入要预测的语句:今天天气不错 预测结果:今天天气不错 → 非产品评价
是不是很神奇?接下来,我们一步步实现它,全程不跳步!
一、前期准备(小白必看,缺一不可)
在写代码之前,我们要准备3件事,少一件都可能报错,一定要仔细看!
1. 安装必备工具(Python+相关库)
首先,你得有Python(建议用Python3.9,和我一致,避免版本问题),安装教程很简单,网上搜“Python3.9安装教程”,跟着下一步下一步就好,记得勾选“Add Python to PATH”(不然后续会报错)。
安装完Python后,打开「命令提示符」(按下Win+R,输入cmd,回车),复制下面这行代码,回车执行,安装我们需要的所有库(复制粘贴就行,不用改):
pip install pandas numpy jieba scikit-learn openpyxl
等待几分钟,直到出现“Successfully installed...”,就说明安装成功了。
2. 准备2个关键文件(避免“文件找不到”报错)
这一步是解决之前很多人遇到的「FileNotFoundError」的核心!我们需要准备2个文件,并且把它们和代码放在同一个文件夹里。
① 停用词文件:StopwordsCN.txt(作用:过滤没用的词,比如“的、了、在”这些,不影响识别结果)
② 训练数据文件:pj_train.xlsx(作用:给程序“喂数据”,让它学会区分好评和非产品评价)
✅ 小白获取方法:
1. 停用词文件(StopwordsCN.txt):百度搜索“中文停用词表 StopwordsCN.txt”,下载后保存到电脑里(记住保存的文件夹,后面要用)。
2. 训练数据文件(pj_train.xlsx):打开Excel,新建一个表格,有两列,第一列叫“segments_clean”(放分词后的评论),第二列叫“label”(1代表好评,0代表非产品评价),随便填几条数据,比如:
|
segments_clean |
label |
|---|---|
|
["产品", "质量", "很好"] |
1 |
|
["物流", "很快", "满意"] |
1 |
|
["今天", "天气", "不错"] |
0 |
|
["吃饭", "逛街", "开心"] |
0 |
填完后,保存为“pj_train.xlsx”,和StopwordsCN.txt放在同一个文件夹里。
3. 新建代码文件
打开记事本(Win+R,输入notepad,回车),把后面的完整代码复制粘贴进去,然后点击“文件→保存”,保存类型选择“所有文件”,文件名改为“评论识别.py”,保存路径和上面两个文件一致(比如都放在“E:\py_flie\爬虫文件”里)。
二、完整代码(小白直接复制,不用改!)
下面这段代码,我已经帮大家处理好了所有报错问题,加了文件校验、路径适配,小白直接复制粘贴到“评论识别.py”里就行,唯一需要改的地方,我会用【】标出来,非常简单。
import pandas as pd
import jieba
import os # 用来检查文件是否存在,避免报错
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn import metrics
# ===================== 第一步:配置文件路径(小白唯一需要改的地方!) =====================
# 把下面两个路径,改成你自己的文件路径(复制文件属性里的“位置+文件名”)
# 注意:路径里的反斜杠是“\”,前面要加一个“r”,比如 r"E:\py_flie\爬虫文件\StopwordsCN.txt"
STOPWORD_FILE = r"E:\py_flie\爬虫文件\StopwordsCN.txt" # 停用词文件路径
TRAIN_FILE = r"E:\py_flie\爬虫文件\pj_train.xlsx" # 训练数据文件路径
# ===================== 第二步:检查文件是否存在(避免“找不到文件”报错) =====================
def check_file_exists(file_path):
if os.path.exists(file_path):
print(f"✅ 找到文件:{file_path}")
return True
else:
print(f"❌ 未找到文件:{file_path}")
print("解决方法:检查文件路径是否正确,或文件是否在该文件夹里!")
return False
# ===================== 第三步:加载停用词(过滤没用的词) =====================
def load_stopwords(file_path):
stopwords = set() # 用来存停用词的集合
if not check_file_exists(file_path):
return stopwords # 找不到文件就返回空,不影响程序运行
# 读取停用词文件
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
word = line.strip() # 去掉每行的空格和换行
if word: # 跳过空行
stopwords.add(word)
print(f"✅ 成功加载 {len(stopwords)} 个停用词\n")
return stopwords
stopwords = load_stopwords(STOPWORD_FILE)
# ===================== 第四步:文本分词(把句子拆成单个词) =====================
def text_segment(text):
# 用jieba分词,把句子拆成单个词(精确模式,适合中文)
seg_list = jieba.lcut(text)
# 过滤停用词和空白字符(比如空格、换行)
seg_clean = [word for word in seg_list if word not in stopwords and word.strip() != '']
return seg_clean
# ===================== 第五步:加载训练数据,训练模型 =====================
# 先检查训练数据文件是否存在
if not check_file_exists(TRAIN_FILE):
exit() # 找不到文件就退出程序,避免报错
# 读取训练数据(Excel文件)
pj_train = pd.read_excel(TRAIN_FILE)
print(f"✅ 成功加载训练数据,共 {len(pj_train)} 条\n")
# 兼容处理:防止Excel里的分词是字符串格式(比如"[产品, 质量]"),转成列表
def parse_segments(seg_str):
if isinstance(seg_str, str):
import ast
try:
return ast.literal_eval(seg_str) # 把字符串转成列表
except:
return seg_str.split() # 转失败就按空格拆分
return seg_str
pj_train['segments_clean'] = pj_train['segments_clean'].apply(parse_segments)
# 拆分训练集和测试集(让模型学一部分,考一部分,检验效果)
x_train, x_test, y_train, y_test = train_test_split(
pj_train['segments_clean'],
pj_train['label'],
test_size=0.3, # 30%的数据用来测试,70%用来训练
random_state=0, # 固定拆分方式,每次运行结果一样
stratify=pj_train['label'] # 保证好评和非产品评价的比例不变
)
# 转换为模型能识别的格式(把分词列表改成空格分隔的字符串)
train_words = [' '.join(seg) for seg in x_train]
test_words = [' '.join(seg) for seg in x_test]
# 词向量转换(把文字变成模型能计算的数字)
vectorizer = CountVectorizer(lowercase=False) # 中文不需要小写,这里固定不动
x_train_vec = vectorizer.fit_transform(train_words) # 训练时,先拟合再转换
x_test_vec = vectorizer.transform(test_words) # 测试时,只转换(避免作弊)
# 训练朴素贝叶斯模型(核心步骤,不用改)
model = MultinomialNB(alpha=1.0)
model.fit(x_train_vec, y_train)
print("✅ 模型训练完成!\n")
# 评估模型效果(看看模型学得好不好)
y_pred = model.predict(x_test_vec)
print("===== 模型评估结果(小白不用管,看个热闹就行) =====")
print(metrics.classification_report(y_test, y_pred))
# ===================== 第六步:交互式预测(小白最关心的部分!) =====================
def predict_sentence(text):
# 1. 对输入的句子分词、去停用词
seg = text_segment(text)
# 2. 转换为模型能识别的格式
text_vec = vectorizer.transform([' '.join(seg)])
# 3. 模型预测
label = model.predict(text_vec)[0]
# 4. 返回易懂的结果
return "好评" if label == 1 else "非产品评价"
# 开始交互式预测(输入quit退出)
print("\n===== 评论识别开始(输入 quit 退出程序) =====")
while True:
user_input = input("\n请输入要识别的语句:")
if user_input.strip().lower() == 'quit':
print("👋 退出程序,下次再见!")
break
# 调用预测函数,输出结果
result = predict_sentence(user_input)
print(f"预测结果:{user_input} → {result}")
三、小白操作步骤(跟着做,零报错)
代码复制完,按照下面的步骤操作,就能顺利运行,全程不踩坑!
步骤1:修改文件路径(唯一需要改的地方)
找到代码里的这两行:
STOPWORD_FILE = r"E:\py_flie\爬虫文件\StopwordsCN.txt" TRAIN_FILE = r"E:\py_flie\爬虫文件\pj_train.xlsx"
把引号里的路径,改成你自己的文件路径(比如你的文件放在桌面,路径就是 r"C:\Users\ASUS\Desktop\StopwordsCN.txt")。
✅ 路径获取方法:右键点击文件 → 属性 → 复制“位置”,然后加上“\文件名”,前面加一个r。
步骤2:运行代码
1. 打开存放3个文件(评论识别.py、StopwordsCN.txt、pj_train.xlsx)的文件夹;
2. 按住Shift键,右键点击空白处,选择“在此处打开PowerShell窗口”;
3. 输入命令:python 评论识别.py,回车;
4. 如果看到“✅ 找到文件”“✅ 模型训练完成”,就说明运行成功了!
步骤3:开始识别评论
运行成功后,会提示“请输入要识别的语句”,你可以输入任意句子,比如:
输入:产品很满意,值得推荐 → 预测结果:好评 输入:周末去爬山了 → 预测结果:非产品评价 输入:物流太慢,差评 → 预测结果:好评(因为是产品相关评论,不管好坏,我们这里label=1都算好评,后续可以优化)
想退出的话,输入quit,回车就可以了。
四、小白常见报错及解决方法(必看!)
如果运行时出现报错,别慌,看看下面的情况,对应解决就好,都是新手常遇到的问题~
报错1:FileNotFoundError: [Errno 2] No such file or directory: 'xxx'
原因:文件路径不对,或者文件不在指定的文件夹里。
解决方法:重新检查代码里的文件路径,确保和文件实际路径一致,并且3个文件在同一个文件夹里。
报错2:ModuleNotFoundError: No module named 'jieba'(或其他库)
原因:没有安装对应的库。
解决方法:打开命令提示符,重新执行 pip install pandas numpy jieba scikit-learn openpyxl,等待安装完成。
报错3:ValueError: Iterable over raw text documents expected, got list
原因:Excel里的“segments_clean”列格式不对,不是列表或字符串。
解决方法:按照前面的要求,在Excel里填写分词数据,比如 ["产品", "质量"],保存后重新运行。
五、小白拓展(可选,不影响核心功能)
如果你想让这个程序更完善,可以试试这两个小操作:
1. 增加更多训练数据:在pj_train.xlsx里多填一些评论,比如100条好评、100条非产品评价,模型识别会更准确;
2. 区分好评和差评:把label改成2个以上(比如1=好评,2=差评,0=非产品评价),再添加对应的训练数据,就能实现“好评/差评/非产品评价”三分类。
最后总结
其实做评论识别一点都不难,核心就是“给模型喂数据→模型学习→模型预测”,小白只要做好「文件准备」和「路径配置」,就能轻松跑通代码。
如果按照步骤操作还是报错,评论区留言你的报错信息,我帮你解决~ 新手也能轻松玩转Python文本识别,赶紧试试吧!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)