这里是引用
import pandas as pd
import numpy as np
import jieba
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
"""
文本评价分类
"""
#加载数据
data=pd.read_csv('./data.csv',encoding='gbk')
# print(data)
"""
内容 评价
0 从编程小白的角度看,入门极佳。 好评
1 很好的入门书,简洁全面,适合小白。 好评
2 讲解全面,许多小细节都有顾及,三个小项目受益匪浅。 好评
3 前半部分讲概念深入浅出,要言不烦,很赞 好评
4 看了一遍还是不会写,有个概念而已 差评
5 中规中矩的教科书,零基础的看了依旧看不懂 差评
6 内容太浅显,个人认为不适合有其它语言编程基础的人 差评
7 破书一本 差评
8 适合完完全全的小白读,有其他语言经验的可以去看别的书 差评
9 基础知识写的挺好的! 好评
10 太基础 差评
11 略啰嗦。。适合完全没有编程经验的小白 差评
12 真的真的不建议买 差评
"""
#取出内容列数据进行分析
content=data['内容 ']#注意有空格
# print(content)
"""
0 从编程小白的角度看,入门极佳。
1 很好的入门书,简洁全面,适合小白。
2 讲解全面,许多小细节都有顾及,三个小项目受益匪浅。
3 前半部分讲概念深入浅出,要言不烦,很赞
4 看了一遍还是不会写,有个概念而已
5 中规中矩的教科书,零基础的看了依旧看不懂
6 内容太浅显,个人认为不适合有其它语言编程基础的人
7 破书一本
8 适合完完全全的小白读,有其他语言经验的可以去看别的书
9 基础知识写的挺好的!
10 太基础
11 略啰嗦。。适合完全没有编程经验的小白
12 真的真的不建议买
Name: 内容 , dtype: object
"""
#制定评判标准 1好评 0差评
plt.rcParams['font.sans-serif']='SimHei'
# data.loc[data.loc[:,'评价']=='好评','评论标号']=1#好评
# data.loc[data.loc[:,'评价']=='差评','评论标号']=0#差评
# pingjia=data['评论标号'].values#获取数据
pingjia=data['评价'].values#获取数据
# print(pingjia)
#['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']
#运用停用词对文本进行去重筛选无意义文本文字
#使用停用词时先对停用词进行去重
#加载停用词
stopwords=[]
with open('./stopwords.txt','r',encoding='utf-8') as f:
lines=f.readlines()
# print(lines)
#['一\n', '一.\n', '一一\n', '一下\n', '一个\n', '一些\n', '一何\n', '一切\n', '一则\n', '一则通过\n', '一天\n',
for tmp in lines:
line=tmp.strip()
stopwords.append(line)
#对停用词表进行去重
stopwords=list(set(stopwords))#去重 列表形式
# print(stopwords)
#['或则', '一则', '其后', '不怎么', '故而', '该当', '从古至今', '不够', '却不', '从此', '必要', '自己', '而',
#对内容进行处理转化成标准形式(数据)
comment_list=[]
for tmp in content:
# print(tmp)
#对文本数据进行切割
seg_list=jieba.cut(tmp,cut_all=False)#cut_all 参数默认为 False,所有使用 cut 方法时默认为精确模式
# print(seg_list)#
seg_str=','.join(seg_list)#拼接字符串
# print(seg_str)
"""
从,编程,小白,的,角度看,,,入门,极佳,。
很,好,的,入门,书,,,简洁,全面,,,适合,小白,。
讲解,全面,,,许多,小,细节,都,有,顾及,,,三个,小,项目,受益匪浅,。
前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞
看,了,一遍,还是,不会,写,,,有个,概念,而已
中规中矩,的,教科书,,,零,基础,的,看,了,依旧,看不懂
内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人
破书,一本
适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书
基础知识,写,的,挺,好,的,!
太,基础
略,啰嗦,。,。,适合,完全,没有,编程,经验,的,小白
真的,真的,不,建议,买
"""
comment_list.append(seg_str)#目的是转化成列表形式
# print(comment_list)
"""
['从,编程,小白,的,角度看,,,入门,极佳,。', '很,好,的,入门,书,,,简洁,全面,,,适合,小白,。', '讲解,全面,,,许多,小,细节,都,有,顾及,,
,三个,小,项目,受益匪浅,。', '前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞', '看,了,一遍,还是,不会,写,,,有个,概念,而已', '中规中矩,的,教科书,,
,零,基础,的,看,了,依旧,看不懂', '内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人', '破书,一本', '适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书',
'基础知识,写,的,挺,好,的,!', '太,基础', '略,啰嗦,。,。,适合,完全,没有,编程,经验,的,小白', '真的,真的,不,建议,买']
"""
#进行统计词个数
#实例化对象
con=CountVectorizer(min_df=1,stop_words=stopwords)#CountVectorizer 类会将文本中的词语转换为词频矩阵
#进行词数统计
X=con.fit_transform(comment_list)#它通过 fit_transform 函数计算各个词语出现的次数
name=con.get_feature_names()#通过 get_feature_names()可获取词袋中所有文本的关键字
# print(X.toarray())#通过 toarray()可看到词频矩阵的结果
# print(name)
"""
[[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 1 1 0 0 0 1 1]
[0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 1 0 0 0 1 0 0 1 0 1 0 0]
[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 1 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
['一本', '一遍', '三个', '不会', '个人', '中规中矩', '依旧', '入门', '全面', '其他', '其它', '内容', '分讲', '别的', '前半部',
'受益匪浅', '可以', '啰嗦', '基础', '基础知识', '完全', '完完全全', '小白', '小白读', '建议', '很赞', '教科书', '有个', '极佳',
'概念', '没有', '浅显', '深入浅出', '看不懂', '真的', '破书', '简洁', '细节', '经验', '编程', '而已', '要言不烦', '角度看', '认为',
'讲解', '许多', '语言', '还是', '适合', '项目', '顾及']
"""
#朴素贝叶斯算法预测
#准备训练集 这里将文本前10行当做训练集 后3行当做测试集
x_train=X.toarray()[:10,:]
y_train=pingjia[:10]
#准备测试集
x_text=X.toarray()[10:,:]
y_text=pingjia[10:]
#构建贝叶斯算法分类器
mb=MultinomialNB(alpha=1)#alpha 为可选项,默认 1.0,添加拉普拉修/Lidstone 平滑参数
#训练数据
mb.fit(x_train,y_train)
#预测数据
y_predict=mb.predict(x_text)
#预测值与真实值展示
print('预测值:',y_predict)
print('真实值:',y_text)
"""
预测值: ['差评' '差评' '差评']
真实值: ['差评' '差评' '差评']
"""
"""
分析得出预测值与真实值相等,预测准确
"""